@@ -509,3 +509,40 @@ int ric_env_keys(LIBRARY_PARAMS()) {
509
509
PUSH_VECTOR (stv .vec , sp , sc );
510
510
return 0 ;
511
511
}
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