From: Laurent Mazet Date: Wed, 22 Jan 2025 22:15:55 +0000 (+0100) Subject: nff catch signals X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=90f5d4861261b198349a7e74ad21dcf502c62309;p=fm.git nff catch signals --- diff --git a/fm.c b/fm.c index f8c1413..4d51125 100644 --- a/fm.c +++ b/fm.c @@ -39,6 +39,7 @@ window_t *windir[MAXPANELS] = {0}; window_t *winelem[MAXPANELS] = {0}; window_t *winmenu = NULL; window_t *winscreen = NULL; +list_t *list[MAXPANELS] = {0}; char *help = "alt Menu functions\n" @@ -69,18 +70,35 @@ int usage (int ret) return ret; } -int emergency_stop = 0; -void dostop (int sig) +void dostop (__attribute__((unused)) int sig) { - if (askwindow (" Restart (Y/N) ", winscreen, "Yy", "Nn") == 1) { - emergency_stop = 1; + static int end = 0; + if (!end) { + end = (sig == 1); + } + + if (end || (askwindow (" Quit (Y/N) ", winscreen, "Yy", "Nn") == 1)) { + if (winscreen) { + endwin (); + } + + int i; + for (i = 0; i < MAXPANELS; i++) { + free (dirname[i]); + freelist (list[i]); + freewindow (windir[i]); + freewindow (winelem[i]); + } + freewindow (winmenu); + freewindow (winscreen); + + exit (sig > 0); } } /* main function */ int main (int argc, char *argv[]) { - int rc = 1; int i; /* get basename */ @@ -201,7 +219,6 @@ int main (int argc, char *argv[]) int index_s[MAXPANELS] = {0}; int index_x[MAXPANELS] = {0}; int index_y[MAXPANELS] = {0}; - list_t *list[MAXPANELS] = {0}; int page[MAXPANELS] = {0}; /* catch signals */ @@ -210,7 +227,7 @@ int main (int argc, char *argv[]) #endif signal (SIGABRT, &dostop); signal (SIGSEGV, &dostop); - signal (SIGTERM, &dostop); +// signal (SIGTERM, &dostop); /* event loop */ int stop = 0; @@ -228,8 +245,7 @@ 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] : ".")); - rc = 1; - goto end; + dostop (-1); } } @@ -247,10 +263,6 @@ int main (int argc, char *argv[]) } int ch = getch (); - if (emergency_stop) { - stop = 1; - continue; - } switch (ch) { case '\n': case '\r': @@ -443,7 +455,7 @@ int main (int argc, char *argv[]) free (string); break; case ALT_Q: /* quit */ - if (askwindow (" Restart (Y/N) ", winscreen, "Yy", "Nn") == 1) { + if (askwindow (" Quit (Y/N) ", winscreen, "Yy", "Nn") == 1) { stop = 1; } break; @@ -534,19 +546,8 @@ int main (int argc, char *argv[]) } } - endwin (); - -end: - for (i = 0; i < MAXPANELS; i++) { - free (dirname[i]); - freelist (list[i]); - freewindow (windir[i]); - freewindow (winelem[i]); - } - freewindow (winmenu); - freewindow (winscreen); - - return rc; + dostop (0); + return 0; } /* test: fm.exe -d 2>&1 | grep 'no directory name' */