summaryrefslogtreecommitdiffstats
path: root/environ.c
diff options
context:
space:
mode:
authornicm <nicm>2015-10-28 09:51:55 +0000
committernicm <nicm>2015-10-28 09:51:55 +0000
commitbf9c933caed5c74be3c9c4da02d7c57a9dcf091d (patch)
tree533de8449d76a2bb151f883f99f80ba73f0c987e /environ.c
parent44657bf932b068aff5ce1019a4e8a2e7b00b5321 (diff)
Like options, move the environ struct into environ.c.
Diffstat (limited to 'environ.c')
-rw-r--r--environ.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/environ.c b/environ.c
index 11b8c849..43a9ce01 100644
--- a/environ.c
+++ b/environ.c
@@ -27,6 +27,9 @@
* Environment - manipulate a set of environment variables.
*/
+RB_HEAD(environ, environ_entry);
+int environ_cmp(struct environ_entry *, struct environ_entry *);
+RB_PROTOTYPE(environ, environ_entry, entry, environ_cmp);
RB_GENERATE(environ, environ_entry, entry, environ_cmp);
int
@@ -36,25 +39,42 @@ environ_cmp(struct environ_entry *envent1, struct environ_entry *envent2)
}
/* Initialise the environment. */
-void
-environ_init(struct environ *env)
+struct environ *
+environ_create(void)
{
+ struct environ *env;
+
+ env = xcalloc(1, sizeof *env);
RB_INIT(env);
+
+ return (env);
}
/* Free an environment. */
void
environ_free(struct environ *env)
{
- struct environ_entry *envent;
+ struct environ_entry *envent, *envent1;
- while (!RB_EMPTY(env)) {
- envent = RB_ROOT(env);
+ RB_FOREACH_SAFE(envent, environ, env, envent1) {
RB_REMOVE(environ, env, envent);
free(envent->name);
free(envent->value);
free(envent);
}
+ free(env);
+}
+
+struct environ_entry *
+environ_first(struct environ *env)
+{
+ return (RB_MIN(environ, env));
+}
+
+struct environ_entry *
+environ_next(struct environ_entry *envent)
+{
+ return (RB_NEXT(environ, env, envent));
}
/* Copy one environment into another. */