aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/sys/win32
diff options
context:
space:
mode:
authorMartin Hässler <[email protected]>2013-11-09 21:04:06 +0100
committerMartin Hässler <[email protected]>2013-11-09 21:04:06 +0100
commit7b739330bb459401f9c11f0f84912aedc7ee22cd (patch)
treee1ffbca9adb63a1132c6c8af8236b725a8c5da56 /erts/emulator/sys/win32
parent768a64354e3d69b3c0840a84dd072601c67ca39d (diff)
downloadotp-7b739330bb459401f9c11f0f84912aedc7ee22cd.tar.gz
otp-7b739330bb459401f9c11f0f84912aedc7ee22cd.tar.bz2
otp-7b739330bb459401f9c11f0f84912aedc7ee22cd.zip
Add os:unsetenv/1
New BIF os:unsetenv/1 which deletes an environment variable and returns 'true'. Does not change any old functionality. Calls the libc function unsetenv(3) on UNIX and SetEnvironmentVariableW(key, NULL) on Windows. The unicode support is the same as for os:getenv and os:putenv.
Diffstat (limited to 'erts/emulator/sys/win32')
-rw-r--r--erts/emulator/sys/win32/sys_env.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/erts/emulator/sys/win32/sys_env.c b/erts/emulator/sys/win32/sys_env.c
index 754f4c6e4c..9f977ad6c8 100644
--- a/erts/emulator/sys/win32/sys_env.c
+++ b/erts/emulator/sys/win32/sys_env.c
@@ -141,6 +141,24 @@ void fini_getenv_state(GETENV_STATE *state)
erts_smp_rwmtx_runlock(&environ_rwmtx);
}
+int erts_sys_unsetenv(char *key)
+{
+ int res = 0;
+ WCHAR *wkey = (WCHAR *) key;
+
+ SetLastError(0);
+ erts_smp_rwmtx_rlock(&environ_rwmtx);
+ GetEnvironmentVariableW(wkey,
+ NULL,
+ 0);
+ if (GetLastError() != ERROR_ENVVAR_NOT_FOUND) {
+ res = (SetEnvironmentVariableW(wkey,
+ NULL) ? 0 : 1);
+ }
+ erts_smp_rwmtx_runlock(&environ_rwmtx);
+ return res;
+}
+
char*
win_build_environment(char* new_env)
{