From d9da488c35de801fd651c3dd0ee8f152d5309337 Mon Sep 17 00:00:00 2001 From: Bart House Date: Sun, 14 Jul 2019 14:30:38 -0700 Subject: [PATCH] Move fuzzer_start, fuzzer_stop and fuzzer_log to pline.c --- include/extern.h | 6 ++--- src/allmain.c | 63 ++++-------------------------------------------- src/pline.c | 57 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 61 deletions(-) diff --git a/include/extern.h b/include/extern.h index 3c74bfda0..ba6164be2 100644 --- a/include/extern.h +++ b/include/extern.h @@ -27,10 +27,7 @@ E void NDECL(newgame); E void FDECL(welcome, (BOOLEAN_P)); E time_t NDECL(get_realtime); E int FDECL(argcheck, (int, char **, enum earlyarg)); -E void NDECL(fuzzer_start); -E void NDECL(fuzzer_stop); E void NDECL(fuzzer_toggle); -E void VDECL(fuzzer_log, (int, const char *, ...)) PRINTF_F(2, 3); E void NDECL(fuzzer_check); E void NDECL(fuzzer_auto_start); E boolean FDECL(fuzzer_msg_history, (const char *)); @@ -1943,6 +1940,9 @@ E void VDECL(raw_printf, (const char *, ...)) PRINTF_F(1, 2); E void VDECL(impossible, (const char *, ...)) PRINTF_F(1, 2); E void VDECL(config_error_add, (const char *, ...)) PRINTF_F(1, 2); E void FDECL(nhassert_failed, (const char *, int)); +E void NDECL(fuzzer_start); +E void NDECL(fuzzer_stop); +E void VDECL(fuzzer_log, (int, const char *, ...)) PRINTF_F(2, 3); /* ### polyself.c ### */ diff --git a/src/allmain.c b/src/allmain.c index 957c47a44..b834f0a8c 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -4,7 +4,6 @@ /* NetHack may be freely redistributed. See license for details. */ /* various code that was replicated in *main.c */ -#define NEED_VARARGS #include "hack.h" #include @@ -927,38 +926,6 @@ const char *opts; return; } -static FILE * g_fuzzer_log_file = NULL; -static int g_fuzzer_log_level = LOG_MINIMAL; - -/* fuzzer_start() starts the fuzzer opening the fuzzer log file */ -void -fuzzer_start() -{ - if (!iflags.debug_fuzzer) { - const char * fq_replay; - - iflags.debug_fuzzer = TRUE; - iflags.fuzzer_auto_start = FALSE; - - nhassert(g_fuzzer_log_file == NULL); - fq_replay = fqname("fuzzer.log", SAVEPREFIX, 0); - - g_fuzzer_log_file = fopen(fq_replay, "w"); - } -} - -/* fuzzer_stop() stops the fuzzer and close the fuzzer log file */ -void -fuzzer_stop() -{ - if (iflags.debug_fuzzer) { - if(g_fuzzer_log_file != NULL) { - fclose(g_fuzzer_log_file); - g_fuzzer_log_file = NULL; - } - } -} - /* fuzzer_toggle() toggles fuzzer state */ void fuzzer_toggle() @@ -969,29 +936,6 @@ fuzzer_toggle() fuzzer_start(); } -/* fuzzer_log() is used to place messages in the file 'fuzzer.log'. This - * log is the primary tool for monitoring fuzzer activity and tracking down - * issues that the fuzzer is able to reproduce. - */ -void -fuzzer_log -VA_DECL2(int, level, const char *, str) -{ - VA_START(str); - VA_INIT(str, char *); - - if (!g_fuzzer_log_file) - return; - - if (iflags.verbose_logging_start != 0 && moves >= iflags.verbose_logging_start) - g_fuzzer_log_level = LOG_VERBOSE; - - if (level <= g_fuzzer_log_level) - Vfprintf(g_fuzzer_log_file, str, VA_ARGS); - - VA_END(); -} - /* fuzzer_check() is called prior to rhack(0) to allow the fuzzer to * check if it should stop and to allow it to reseed the game. */ @@ -1000,6 +944,8 @@ fuzzer_check() { if (iflags.debug_fuzzer) { + unsigned long seed; + if (moves >= iflags.fuzzer_stop_and_save) { iflags.fuzzer_saving = TRUE; dosave0(); @@ -1008,7 +954,7 @@ fuzzer_check() nh_terminate(EXIT_SUCCESS); } - unsigned long seed = rul(); + seed = rul(); set_random(seed, rn2); fuzzer_log(LOG_MINIMAL, "SEED:%ld:%lu\n", moves, seed); @@ -1022,9 +968,10 @@ void fuzzer_auto_start() { if (iflags.fuzzer_auto_start) { + unsigned long seed; nhassert(!iflags.debug_fuzzer); fuzzer_start(); - unsigned long seed = rul(); + seed = rul(); set_random(seed, rn2); fuzzer_log(LOG_MINIMAL, "START:%ld:%lu\n", moves, seed); } diff --git a/src/pline.c b/src/pline.c index 91e825963..03654355e 100644 --- a/src/pline.c +++ b/src/pline.c @@ -599,4 +599,61 @@ nhassert_failed(filepath, line) impossible("nhassert failed in file '%s' at line %d", filename, line); } +static FILE * g_fuzzer_log_file = NULL; +static int g_fuzzer_log_level = LOG_MINIMAL; + +/* fuzzer_start() starts the fuzzer opening the fuzzer log file */ +void +fuzzer_start() +{ + if (!iflags.debug_fuzzer) { + const char * fq_replay; + + iflags.debug_fuzzer = TRUE; + iflags.fuzzer_auto_start = FALSE; + + nhassert(g_fuzzer_log_file == NULL); + fq_replay = fqname("fuzzer.log", SAVEPREFIX, 0); + + g_fuzzer_log_file = fopen(fq_replay, "w"); + } +} + +/* fuzzer_stop() stops the fuzzer and close the fuzzer log file */ +void +fuzzer_stop() +{ + if (iflags.debug_fuzzer) { + if(g_fuzzer_log_file != NULL) { + fclose(g_fuzzer_log_file); + g_fuzzer_log_file = NULL; + } + } +} + +/* fuzzer_log() is used to place messages in the file 'fuzzer.log'. This + * log is the primary tool for monitoring fuzzer activity and tracking down + * issues that the fuzzer is able to reproduce. + */ +void +fuzzer_log +VA_DECL2(int, lvl, const char *, str) +{ + VA_START(str); + VA_INIT(str, char *); + + if (!g_fuzzer_log_file) + return; + + if (iflags.verbose_logging_start != 0 && + moves >= iflags.verbose_logging_start) + g_fuzzer_log_level = LOG_VERBOSE; + + if (lvl <= g_fuzzer_log_level) + Vfprintf(g_fuzzer_log_file, str, VA_ARGS); + + VA_END(); +} + + /*pline.c*/