X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=main.c;h=dca022a5d9657a044e58a2b0b1ad0354ce230d61;hb=865e10e6d0d15df04ac6209990394277ba1da2a7;hp=dfc682e5b032d805e282ae62018ff44562400919;hpb=bb2b8e0fcad10cf896acd1bfd42267c40f4f21ea;p=open-adventure.git diff --git a/main.c b/main.c index dfc682e..dca022a 100644 --- a/main.c +++ b/main.c @@ -147,9 +147,11 @@ char *myreadline(const char *prompt) if (settings.argc == 0) return readline(prompt); + char *buf = malloc(BUFSIZ); for (;;) { if (settings.scriptfp == NULL || feof(settings.scriptfp)) { if (settings.optind >= settings.argc) { + free(buf); return NULL; } @@ -158,15 +160,16 @@ char *myreadline(const char *prompt) if (settings.scriptfp != NULL && feof(settings.scriptfp)) fclose(settings.scriptfp); if (strcmp(next, "-") == 0) - settings.scriptfp = stdin; + settings.scriptfp = stdin; // LCOV_EXCL_LINE else settings.scriptfp = fopen(next, "r"); } if (isatty(fileno(settings.scriptfp))) { - return readline(prompt); + free(buf); // LCOV_EXCL_LINE + return readline(prompt); // LCOV_EXCL_LINE } else { - char *ln = fgets(malloc(BUFSIZ), BUFSIZ-1, settings.scriptfp); + char *ln = fgets(buf, BUFSIZ-1, settings.scriptfp); if (ln != NULL) { fputs(PROMPT, stdout); fputs(ln, stdout); @@ -252,6 +255,7 @@ static void checkhints(void) game.hintlc[hint] = 0; return; default: // LCOV_EXCL_LINE + // Should never hap[pen BUG(HINT_NUMBER_EXCEEDS_GOTO_LIST); // LCOV_EXCL_LINE } @@ -1041,7 +1045,7 @@ static void listobjects(void) } } -bool preprocess_command(command_t *command) +static bool preprocess_command(command_t *command) /* Pre-processes a command input to see if we need to tease out a few specific cases: * - "enter water" or "enter stream": * wierd specific case that gets the user wet, and then kicks us back to get another command @@ -1263,6 +1267,7 @@ static bool do_command() } break;// LCOV_EXCL_LINE default: // LCOV_EXCL_LINE + case NO_WORD_TYPE: // LCOV_EXCL_LINE BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE }