Przeglądaj źródła

Added a way to unset an ENV variable

Marco Bambini 6 lat temu
rodzic
commit
2dc1418c98
1 zmienionych plików z 3 dodań i 3 usunięć
  1. 3 3
      src/optionals/gravity_env.c

+ 3 - 3
src/optionals/gravity_env.c

@@ -59,16 +59,16 @@ static bool gravity_env_get(gravity_vm *vm, gravity_value_t *args, uint16_t narg
 static bool gravity_env_set(gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
     #pragma unused(nargs)
     
-    if(!VALUE_ISA_STRING(args[1]) || !VALUE_ISA_STRING(args[2])) {
+    if(!VALUE_ISA_STRING(args[1]) || (!VALUE_ISA_STRING(args[2]) && !VALUE_ISA_NULL(args[2]))) {
         RETURN_ERROR("Environment variable key and value must both be strings.");
     }
 
     gravity_string_t *key = VALUE_AS_STRING(args[1]);
-    gravity_string_t *value = VALUE_AS_STRING(args[2]);
+    gravity_string_t *value = (VALUE_ISA_STRING(args[2])) ? VALUE_AS_STRING(args[2]) : NULL;
 
     GRAVITY_DEBUG_PRINT("[ENV::SET args : %i] %s => %s\n", nargs, key, value);
 
-    int rt = setenv(key->s, value->s, 1);
+    int rt = (value) ? setenv(key->s, value->s, 1) : unsetenv(key->s);
     RETURN_VALUE(VALUE_FROM_INT(rt), rindex);
 }