aboutsummaryrefslogtreecommitdiff
path: root/lib/env/env.c
blob: d52c3f37f0b3291ec211ad67d9f53df75e65bd68 (plain)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "env.h"

#include "../malloc/malloc.h"

const char **envp;

const char **__getenvpair(const char *key);
u8 __match_env_key(const char *p, const char *key);


const char *getenv(const char *key)
{
	const char **p = __getenvpair(key);
	const char *value;

	if (p == 0)
		return "";

	value = *p;

	while (*value != '=') ++value;
	return ++value;
}


void setenv(const char *key, const char *value)
{
	const char **p = __getenvpair(key);
	*p = value;
}


const char **__getenvpair(const char *key)
{
	const char **p = envp;

	while (*p) {
		if (__match_env_key(*p, key)) {
			return p;
		}

		++p;
	}

	return 0;
}


const char **getenvp()
{
	return envp;
}


u8 __match_env_key(const char *p, const char *key)
{
	while (*key && *p) {

		if (*key != *p)
			return 0;

		++p;
		++key;
	}

	if (*p != '=')
		return 0;

	return 1;
}

void init_env(int argc, const char **argv, const char **envp__)
{
	envp = envp__;
}

#ifdef ENV_UNIT_TEST

#include "../io/io.h"

int main(int argc, const char **argv)
{
	wstdf("HOME: %s\n", getenv("HOSTNAME"));
}

#endif