Stop leaking memory
[open-adventure.git] / main.c
diff --git a/main.c b/main.c
index 95acac2fb47adcec557ecce53bf2df089704e45c..61a2267a59b183f6879f132c9001493938888111 100644 (file)
--- a/main.c
+++ b/main.c
@@ -13,7 +13,7 @@
  * and for the offensive globals.  Applying the Structured Program
  * Theorem can be hard.
  */
-#define DEFINE_GLOBALS_FROM_INCLUDES
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdbool.h>
@@ -42,7 +42,7 @@ static void sig_handler(int signo)
         if (logfp != NULL)
             fflush(logfp);
     }
-    exit(0);
+    exit(EXIT_FAILURE);
 }
 // LCOV_EXCL_STOP
 
@@ -113,7 +113,7 @@ int main(int argc, char *argv[])
 #endif
             fprintf(stderr,
                     "        -s suppress command editing\n");
-            exit(-1);
+            exit(EXIT_FAILURE);
             break;
         }
     }
@@ -1029,6 +1029,8 @@ L2600:
 
         /* This is where we get a new command from the user */
         char* input;
+        char inputbuf[LINESIZE];
+
         for (;;) {
             input = get_input();
             if (input == NULL)
@@ -1040,8 +1042,12 @@ L2600:
             if (strcmp(input, "") != 0)
                 break;
         }
+
+        strncpy(inputbuf, input, LINESIZE - 1);
+        linenoiseFree(input);
+
         long tokens[4];
-        tokenize(input, tokens);
+        tokenize(inputbuf, tokens);
         command.wd1 = tokens[0];
         command.wd1x = tokens[1];
         command.wd2 = tokens[2];
@@ -1118,7 +1124,7 @@ Lookup:
         defn = get_vocab_id(word1);
         if (defn == -1) {
             /* Gee, I don't understand. */
-            if (fallback_handler(input))
+            if (fallback_handler(inputbuf))
                 continue;
             rspeak(DONT_KNOW, command.wd1, command.wd1x);
             goto L2600;
@@ -1181,7 +1187,6 @@ Laction:
         default:
             BUG(ACTION_RETURNED_PHASE_CODE_BEYOND_END_OF_SWITCH); // LCOV_EXCL_LINE
         }
-        linenoiseFree(input);
     }
 }