From: Nick Bowler Date: Wed, 5 Jul 2023 05:48:11 +0000 (-0400) Subject: cdecl99: Simplify main loops a bit. X-Git-Tag: v1.3~131 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/f3d0075fed997b037645e866622224d8175dddfd cdecl99: Simplify main loops a bit. Convert the calls to repl/repl_execute to tail calls from main. --- diff --git a/src/cdecl99.c b/src/cdecl99.c index 1b82168..6eb00df 100644 --- a/src/cdecl99.c +++ b/src/cdecl99.c @@ -139,7 +139,7 @@ static int do_getline(char **linebuf, size_t *n) return 1; } -static int do_readline(char **linebuf, size_t *n, int batch) +static int do_readline(char **linebuf, size_t *n, bool batch) { #if !HAVE_READLINE if (!batch) { @@ -161,38 +161,38 @@ static int do_readline(char **linebuf, size_t *n, int batch) #endif } -static int repl(int batch) +static int repl(bool batch) { char *line = NULL; - int ret = 0; + bool fail = 0; size_t n; while (do_readline(&line, &n, batch)) { int rc = run_command(line, batch); if (rc > 0) break; - else if (rc < 0) - ret = -batch; + if (rc < 0) + fail = batch; } free(line); - return ret; + return fail ? EXIT_FAILURE : 0; } static int repl_cmdline(unsigned count, char **commands) { - int ret = 0; + bool fail = 0; unsigned i; for (i = 0; i < count; i++) { int rc = run_command(commands[i], true); - if (rc < 0) - ret = -1; - else if (rc > 0) + if (rc > 0) break; + if (rc < 0) + fail = true; } - return ret; + return fail ? EXIT_FAILURE : 0; } /* Initialize gettext */ @@ -285,7 +285,7 @@ static int initialize(int argc, char **argv) int main(int argc, char **argv) { - int rc, execute; + int execute; switch ((execute = initialize(argc, argv))) { case INIT_EXIT_SUCCESS: return EXIT_SUCCESS; @@ -293,11 +293,7 @@ int main(int argc, char **argv) } if (execute) - rc = repl_cmdline(execute, argv); + return repl_cmdline(execute, argv); else - rc = repl(batch_mode); - - if (rc != 0) - return EXIT_FAILURE; - return EXIT_SUCCESS; + return repl(batch_mode); }