diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2022-02-15 09:34:38 -0500 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2022-02-15 09:34:38 -0500 |
commit | 0a6e4e584686422ec777e9448668e4c02a30c23c (patch) | |
tree | 621e423688b17f9e8e3ce1781a1c6d44cd10b610 /src/main.c | |
parent | 7d5b0a8d2149ec7f78d2ae62d13f5161493a9a74 (diff) | |
download | cleanpath-0a6e4e584686422ec777e9448668e4c02a30c23c.tar.gz |
Defer unset until the end.
* bash 4.1.2 did not react well to unset calls mixed between assignments
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -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) { |