aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/envop.c39
-rw-r--r--lib/envop.h1
2 files changed, 39 insertions, 1 deletions
diff --git a/lib/envop.c b/lib/envop.c
index c685ee2..75d0891 100644
--- a/lib/envop.c
+++ b/lib/envop.c
@@ -71,6 +71,7 @@ environ_free (environ_t *env)
for (i = 0; i < env->env_count; i++)
free (env->env_base[i]);
free (env->env_base);
+ free (env);
}
static ssize_t
@@ -502,4 +503,40 @@ envop_free (struct envop_entry *op)
op = next;
}
}
-
+
+int
+envop_cmp (struct envop_entry *a, struct envop_entry *b)
+{
+ while (a)
+ {
+ if (!b)
+ return 1;
+ if (a->code != b->code)
+ return 1;
+ switch (a->code)
+ {
+ case envop_clear:
+ break;
+
+ case envop_keep:
+ case envop_set:
+ case envop_unset:
+ if (strcmp (a->name, b->name))
+ return 1;
+
+ if (!a->value)
+ {
+ if (b->value)
+ return 1;
+ }
+ else if (!b->value || strcmp (a->value, b->value))
+ return 1;
+ break;
+ }
+ a = a->next;
+ b = b->next;
+ }
+ if (b)
+ return 1;
+ return 0;
+}
diff --git a/lib/envop.h b/lib/envop.h
index 6587b1a..2b4aad6 100644
--- a/lib/envop.h
+++ b/lib/envop.h
@@ -63,6 +63,7 @@ int envop_entry_add (envop_t **head,
int envop_exec (envop_t *op, environ_t *env);
void envop_free (envop_t *op);
+int envop_cmp (struct envop_entry *a, struct envop_entry *b);

Return to:

Send suggestions and report system problems to the System administrator.