From 0a6e4e584686422ec777e9448668e4c02a30c23c Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 15 Feb 2022 09:34:38 -0500 Subject: Defer unset until the end. * bash 4.1.2 did not react well to unset calls mixed between assignments --- src/main.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 71d291f..ce691c0 100644 --- a/src/main.c +++ b/src/main.c @@ -234,6 +234,9 @@ int main(int argc, char *argv[], char *arge[]) { sys_var = getenv_ex(CLEANPATH_VAR); } + char *deferred[1024] = {0}; + size_t dcount = 0; + // Initialize path data if (do_all_sys_vars) { for (size_t i = 0; environ[i] != NULL; i++) { @@ -266,9 +269,9 @@ int main(int argc, char *argv[], char *arge[]) { show_listing(path); } else { char *data = get_path(path); - if (!strlen(path->data)) { - printf("unset %s\n", key); - + if (strlen(path->data) == 0 && dcount < sizeof(deferred) / sizeof(*deferred)) { + deferred[dcount] = strdup(key); + dcount++; } else { printf("%s='%s'\n", key, data); } @@ -277,6 +280,11 @@ int main(int argc, char *argv[], char *arge[]) { free(key); free(path); } + + for (size_t i = 0; i < dcount; i++) { + printf("unset %s\n", deferred[i]); + free(deferred[i]); + } } else { path = cleanpath_init(sys_var, sep); if (path == NULL) { -- cgit