wip catch signals
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 22 Jan 2025 17:17:20 +0000 (18:17 +0100)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 22 Jan 2025 17:17:20 +0000 (18:17 +0100)
fm.c

diff --git a/fm.c b/fm.c
index db64f568952e03b6119649e508ebb9ac38ee5a31..f8c141363c522c2a8445d3d254c73577b1f23d1b 100644 (file)
--- 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' */