From: Laurent MAZET Date: Wed, 22 Jan 2025 17:17:20 +0000 (+0100) Subject: wip catch signals X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=652e14a342d54f65a052e0d3da66d332de2e37bb;p=fm.git wip catch signals --- diff --git a/fm.c b/fm.c index db64f56..f8c1413 100644 --- a/fm.c +++ b/fm.c @@ -69,16 +69,18 @@ int usage (int ret) return ret; } +int emergency_stop = 0; void dostop (int sig) { if (askwindow (" Restart (Y/N) ", winscreen, "Yy", "Nn") == 1) { - exit (1); + emergency_stop = 1; } } /* main function */ int main (int argc, char *argv[]) { + int rc = 1; int i; /* get basename */ @@ -226,16 +228,8 @@ int main (int argc, char *argv[]) if (list[i] == NULL) { endwin (); VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", (dirname[i]) ? dirname[i] : ".")); - int _i; - for (_i = 0; _i < MAXPANELS; _i++) { - free (dirname[_i]); - freelist (list[_i]); - freewindow (windir[_i]); - freewindow (winelem[_i]); - } - freewindow (winmenu); - freewindow (winscreen); - return 1; + rc = 1; + goto end; } } @@ -253,6 +247,10 @@ int main (int argc, char *argv[]) } int ch = getch (); + if (emergency_stop) { + stop = 1; + continue; + } switch (ch) { case '\n': case '\r': @@ -538,6 +536,7 @@ int main (int argc, char *argv[]) endwin (); +end: for (i = 0; i < MAXPANELS; i++) { free (dirname[i]); freelist (list[i]); @@ -547,7 +546,7 @@ int main (int argc, char *argv[]) freewindow (winmenu); freewindow (winscreen); - return 0; + return rc; } /* test: fm.exe -d 2>&1 | grep 'no directory name' */