aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2019-05-23 05:51:11 -0700
committerBruce Hill <bruce@bruce-hill.com>2019-05-23 05:51:11 -0700
commitaa297e79d39baf7b984da8f7e6236b77096d614c (patch)
treebde2473594738e702b84c7cb418a9db7d6c4bf8c
parent28627567338675fca1e26fe17c1d78a998fd1dda (diff)
Fixed an issue with leaking temp files
-rw-r--r--bb.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/bb.c b/bb.c
index c20c9a6..59bc74c 100644
--- a/bb.c
+++ b/bb.c
@@ -788,7 +788,7 @@ static void explore(char *path, int print_dir, int print_selection, char sep)
}
// Scan for IPC requests
- int needs_full_refresh = 0;
+ int needs_quit = 0, needs_refresh = 0, needs_sort = 0;
FILE *tmpfile;
if (!(tmpfile = fopen(bb_tmpfile, "r")))
goto redraw;
@@ -801,9 +801,9 @@ static void explore(char *path, int print_dir, int print_selection, char sep)
char *value = strchr(line, ':');
if (value) ++value;
if (strcmp(line, "refresh") == 0) {
- needs_full_refresh = 1;
+ needs_refresh = 1;
} else if (strcmp(line, "quit") == 0) {
- goto done;
+ needs_quit = 1;
} else if (startswith(line, "sort:")) {
sortmethod_t oldsort = state.sortmethod;
switch (value[0]) {
@@ -821,12 +821,12 @@ static void explore(char *path, int print_dir, int print_selection, char sep)
else if (state.sortmethod == oldsort)
state.sort_reverse ^= 1;
strcpy(to_select, state.files[state.cursor]->d_name);
- goto sort_files;
+ needs_sort = 1;
} else if (startswith(line, "cd:")) {
free(path);
path = calloc(strlen(line+strlen("cd:")) + 1, sizeof(char));
strcpy(path, line+strlen("cd:"));
- goto tail_call;
+ needs_refresh = 1;
} else if (startswith(line, "toggle:")) {
lazy = 0;
entry_t *e = find_file(&state, line + strlen("select:"));
@@ -867,7 +867,7 @@ static void explore(char *path, int print_dir, int print_selection, char sep)
path = calloc(len + 1, sizeof(char));
memcpy(path, value, len);
strcpy(to_select, lastslash+1);
- goto tail_call;
+ needs_refresh = 1;
found_it:;
} else if (startswith(line, "move:")) {
int expand_sel = 0;
@@ -926,13 +926,21 @@ static void explore(char *path, int print_dir, int print_selection, char sep)
}
if (line) free(line);
fclose(tmpfile);
- unlink(bb_tmpfile);
+ if (unlink(bb_tmpfile))
+ err("Failed to delete tmpfile %s", bb_tmpfile);
- if (needs_full_refresh) {
+ if (needs_quit)
+ goto done;
+
+ if (needs_refresh) {
strcpy(to_select, state.files[state.cursor]->d_name);
goto tail_call;
}
+ if (needs_sort)
+ goto sort_files;
+
+
goto redraw;
}
goto skip_redraw;