Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
** env.c for 42sh
**
** Made by seblu
** Login <seblu@epita.fr>
**
** Started on Tue Nov 14 14:38:42 2006 seblu
** Last update Tue Nov 14 15:37:46 2006 seblu
*/
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <errno.h>
#include "function.h"
int setenv2(char *name,
char *value,
int overwrite)
{
extern char **environ;
char *buf;
char **env = environ;
size_t len;
assert(name && value && env);
len = strlen(name);
if (!overwrite)
for (; *env; ++env)
if (!strncmp(name, *env, len) && (*env)[len] == '=')
return 1;
buf = strmerge(3, name, "=", value);
return !putenv(buf) ? 0 : 2;
}
int unsetenv2(const char *name)
{
extern char **environ;
size_t len;
char **ep = environ;
char **dp = ep;
if (name == NULL || *name == '\0' || strchr(name, '=') != NULL)
{
errno = EINVAL;
return -1;
}
len = strlen(name);
for (; *ep; ++ep)
{
if (!strncmp(*ep, name, len) && (*ep)[len] == '=')
{
dp = ep;
do
dp[0] = dp[1];
while (++dp, *dp);
}
}
return 0;
}