aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2021-06-03 18:20:16 +0300
committerSergey Poznyakoff <gray@gnu.org>2021-06-03 18:35:42 +0300
commit5468d4012f55f7332c7c7df6dabb4fa1e157a3b5 (patch)
tree343896d13ad4d814609567d00a30a14cfd90d24e /lib
parentd0aca5ad26a6fb86b1d8797823966f1aeb41b303 (diff)
downloadpies-5468d4012f55f7332c7c7df6dabb4fa1e157a3b5.tar.gz
pies-5468d4012f55f7332c7c7df6dabb4fa1e157a3b5.tar.bz2
Fix reloading of the configuration files.
* lib/envop.c (environ_free): Free the env block itself. (envop_cmp): New function. * lib/envop.h (envop_cmp): New proto. * src/comp.c (argvcmp): Fix segmentation fault that occurred when both a and b were NULL. (component_match): Compare command, envop, and umask.
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.