annotate libgo/runtime/go-unsetenv.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* go-unsetenv.c -- unset an environment variable from Go.
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 Copyright 2015 The Go Authors. All rights reserved.
kono
parents:
diff changeset
4 Use of this source code is governed by a BSD-style
kono
parents:
diff changeset
5 license that can be found in the LICENSE file. */
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 #include "config.h"
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 #include <stddef.h>
kono
parents:
diff changeset
10 #include <stdlib.h>
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 #include "runtime.h"
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 /* Unset an environment variable from Go. This is called by
kono
parents:
diff changeset
15 syscall.Unsetenv. */
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 void unsetenv_c (String) __asm__ (GOSYM_PREFIX "syscall.unsetenv_c");
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 void
kono
parents:
diff changeset
20 unsetenv_c (String k)
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 const byte *ks;
kono
parents:
diff changeset
23 unsigned char *kn;
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 ks = k.str;
kono
parents:
diff changeset
26 if (ks == NULL)
kono
parents:
diff changeset
27 ks = (const byte *) "";
kono
parents:
diff changeset
28 kn = NULL;
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 #ifdef HAVE_UNSETENV
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 if (ks[k.len] != 0)
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 kn = malloc (k.len + 1);
kono
parents:
diff changeset
35 if (kn == NULL)
kono
parents:
diff changeset
36 runtime_throw ("out of malloc memory");
kono
parents:
diff changeset
37 __builtin_memcpy (kn, ks, k.len);
kono
parents:
diff changeset
38 ks = kn;
kono
parents:
diff changeset
39 }
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 unsetenv ((const char *) ks);
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 #endif /* !defined(HAVE_UNSETENV) */
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 if (kn != NULL)
kono
parents:
diff changeset
46 free (kn);
kono
parents:
diff changeset
47 }