source: azure_iot_hub/trunk/musl-1.1.18/src/env/putenv.c@ 388

Last change on this file since 388 was 388, checked in by coas-nagasima, 5 years ago

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 1.0 KB
Line 
1#include <stdlib.h>
2#include <string.h>
3#include "libc.h"
4
5char *__strchrnul(const char *, int);
6
7#ifndef __c2__
8static void dummy(char *old, char *new) {}
9weak_alias(dummy, __env_rm_add);
10#else
11extern void __env_rm_add(char *old, char *new);
12#endif
13
14int __putenv(char *s, size_t l, char *r)
15{
16 size_t i=0;
17 if (__environ) {
18 for (char **e = __environ; *e; e++, i++)
19 if (!strncmp(s, *e, l+1)) {
20 char *tmp = *e;
21 *e = s;
22 __env_rm_add(tmp, r);
23 return 0;
24 }
25 }
26 static char **oldenv;
27 char **newenv;
28 if (__environ == oldenv) {
29 newenv = realloc(oldenv, sizeof *newenv * (i+2));
30 if (!newenv) goto oom;
31 } else {
32 newenv = malloc(sizeof *newenv * (i+2));
33 if (!newenv) goto oom;
34 if (i) memcpy(newenv, __environ, sizeof *newenv * i);
35 free(oldenv);
36 }
37 newenv[i] = s;
38 newenv[i+1] = 0;
39 __environ = oldenv = newenv;
40 if (r) __env_rm_add(0, r);
41 return 0;
42oom:
43 free(r);
44 return -1;
45}
46
47int putenv(char *s)
48{
49 size_t l = __strchrnul(s, '=') - s;
50 if (!l || !s[l]) return unsetenv(s);
51 return __putenv(s, l, 0);
52}
Note: See TracBrowser for help on using the repository browser.