diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2021-06-03 18:20:16 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2021-06-03 18:35:42 +0300 |
commit | 5468d4012f55f7332c7c7df6dabb4fa1e157a3b5 (patch) | |
tree | 343896d13ad4d814609567d00a30a14cfd90d24e /lib/envop.c | |
parent | d0aca5ad26a6fb86b1d8797823966f1aeb41b303 (diff) | |
download | pies-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/envop.c')
-rw-r--r-- | lib/envop.c | 39 |
1 files changed, 38 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; +} |