| /* go-unsetenv.c -- unset an environment variable from Go. | |
| Copyright 2015 The Go Authors. All rights reserved. | |
| Use of this source code is governed by a BSD-style | |
| license that can be found in the LICENSE file. */ | |
| #include "config.h" | |
| #include <stddef.h> | |
| #include <stdlib.h> | |
| #include "runtime.h" | |
| /* Unset an environment variable from Go. This is called by | |
| syscall.Unsetenv. */ | |
| void unsetenv_c (String) __asm__ (GOSYM_PREFIX "syscall.unsetenv__c"); | |
| void | |
| unsetenv_c (String k) | |
| { | |
| const byte *ks; | |
| unsigned char *kn; | |
| ks = k.str; | |
| if (ks == NULL) | |
| ks = (const byte *) ""; | |
| kn = NULL; | |
| #ifdef HAVE_UNSETENV | |
| if (ks[k.len] != 0) | |
| { | |
| kn = malloc (k.len + 1); | |
| if (kn == NULL) | |
| runtime_throw ("out of malloc memory"); | |
| __builtin_memcpy (kn, ks, k.len); | |
| ks = kn; | |
| } | |
| unsetenv ((const char *) ks); | |
| #endif /* !defined(HAVE_UNSETENV) */ | |
| if (kn != NULL) | |
| free (kn); | |
| } |