@@ -509,3 +509,40 @@ int ric_env_keys(LIBRARY_PARAMS()) {
509509 PUSH_VECTOR (stv .vec , sp , sc );
510510 return 0 ;
511511}
512+
513+ int ric_set_env (LIBRARY_PARAMS ()) {
514+ stackval_t stv_key , stv_val ;
515+ heapval_t * hpv ;
516+ int dummy ;
517+ expr_t * ret = NULL ;
518+ void * sp = PROVIDE_CONTEXT ()-> sp ;
519+ size_t * sc = PROVIDE_CONTEXT ()-> sc ;
520+ void * hp = PROVIDE_CONTEXT ()-> hp ;
521+
522+ // Pop value first, then key (stack order)
523+ POP_VAL (& stv_key , sp , sc );
524+ POP_VAL (& stv_val , sp , sc );
525+
526+ if (stv_key .type != TEXT || stv_val .type != TEXT ) {
527+ fprintf (stderr , "error: function '%s' expected (string, string) as arguments.\n" ,
528+ LIBRARY_FUNC_NAME ());
529+ exit (1 );
530+ }
531+
532+ char * key = stv_key .t ;
533+ char * val = stv_val .t ;
534+
535+ if (_putenv_s (key , val ) != 0 ) {
536+ fprintf (stderr , "error: _putenv_s failed in '%s' for key='%s'\n" , LIBRARY_FUNC_NAME (), key );
537+ exit (1 );
538+ }
539+
540+ // Return empty string as success indicator
541+ stackval_t stv ;
542+ stv .type = TEXT ;
543+ stv .t = strdup ("" );
544+ ALLOC_HEAP (& stv , hp , & hpv , & dummy );
545+ PUSH_STRING (stv .t , sp , sc );
546+
547+ return 0 ;
548+ }
0 commit comments