Lines Matching full:env

1 /* $OpenBSD: env.c,v 1.10 2019/07/07 19:21:28 tedu Exp $ */
39 struct env { struct
44 static void fillenv(struct env *env, const char **envlist); argument
77 addnode(struct env *env, const char *key, const char *value) in addnode() argument
82 RB_INSERT(envtree, &env->root, node); in addnode()
83 env->count++; in addnode()
86 static struct env *
94 struct env *env; in createenv() local
97 env = malloc(sizeof(*env)); in createenv()
98 if (!env) in createenv()
100 RB_INIT(&env->root); in createenv()
101 env->count = 0; in createenv()
103 addnode(env, "DOAS_USER", mypw->pw_name); in createenv()
104 addnode(env, "HOME", targpw->pw_dir); in createenv()
105 addnode(env, "LOGNAME", targpw->pw_name); in createenv()
106 addnode(env, "PATH", getenv("PATH")); in createenv()
107 addnode(env, "SHELL", targpw->pw_shell); in createenv()
108 addnode(env, "USER", targpw->pw_name); in createenv()
110 fillenv(env, copyset); in createenv()
133 if (RB_INSERT(envtree, &env->root, node)) { in createenv()
137 env->count++; in createenv()
142 return env; in createenv()
146 flattenenv(struct env *env) in flattenenv() argument
152 envp = reallocarray(NULL, env->count + 1, sizeof(char *)); in flattenenv()
156 RB_FOREACH(node, envtree, &env->root) { in flattenenv()
166 fillenv(struct env *env, const char **envlist) in fillenv() argument
178 /* parse out env name */ in fillenv()
192 if ((node = RB_FIND(envtree, &env->root, &key))) { in fillenv()
193 RB_REMOVE(envtree, &env->root, node); in fillenv()
195 env->count--; in fillenv()
218 RB_INSERT(envtree, &env->root, node); in fillenv()
219 env->count++; in fillenv()
228 struct env *env; in prepenv() local
230 env = createenv(rule, mypw, targpw); in prepenv()
232 fillenv(env, rule->envlist); in prepenv()
234 return flattenenv(env); in prepenv()