Last change
on this file since 403 was 337, checked in by coas-nagasima, 6 years ago |
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 |
|
---|
5 | char *__strchrnul(const char *, int);
|
---|
6 | int __putenv(char *, size_t, char *);
|
---|
7 |
|
---|
8 | void __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 |
|
---|
27 | int 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.