source: asp3_tinet_ecnl_arm/trunk/musl-1.1.18/src/env/setenv.c@ 352

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

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 976 bytes
Line 
1#include <stdlib.h>
2#include <string.h>
3#include <errno.h>
4
5char *__strchrnul(const char *, int);
6int __putenv(char *, size_t, char *);
7
8void __env_rm_add(char *old, char *new)
9{
10 static char **env_alloced;
11 static size_t env_alloced_n;
12 for (size_t i=0; i < env_alloced_n; i++)
13 if (env_alloced[i] == old) {
14 env_alloced[i] = new;
15 free(old);
16 return;
17 } else if (!env_alloced[i] && new) {
18 env_alloced[i] = new;
19 new = 0;
20 }
21 if (!new) return;
22 char **t = realloc(env_alloced, sizeof *t * (env_alloced_n+1));
23 if (!t) return;
24 (env_alloced = t)[env_alloced_n++] = new;
25}
26
27int setenv(const char *var, const char *value, int overwrite)
28{
29 char *s;
30 size_t l1, l2;
31
32 if (!var || !(l1 = __strchrnul(var, '=') - var) || var[l1]) {
33 errno = EINVAL;
34 return -1;
35 }
36 if (!overwrite && getenv(var)) return 0;
37
38 l2 = strlen(value);
39 s = malloc(l1+l2+2);
40 if (!s) return -1;
41 memcpy(s, var, l1);
42 s[l1] = '=';
43 memcpy(s+l1+1, value, l2+1);
44 return __putenv(s, l1, s);
45}
Note: See TracBrowser for help on using the repository browser.