aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2022-02-15 09:34:38 -0500
committerJoseph Hunkeler <jhunkeler@gmail.com>2022-02-15 09:34:38 -0500
commit0a6e4e584686422ec777e9448668e4c02a30c23c (patch)
tree621e423688b17f9e8e3ce1781a1c6d44cd10b610 /src/main.c
parent7d5b0a8d2149ec7f78d2ae62d13f5161493a9a74 (diff)
downloadcleanpath-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.c14
1 files changed, 11 insertions, 3 deletions
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) {