X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/108b2ebc0200fbc6218ca5165c25eea4e7890ac6..refs/heads/master:/src/cdecl99.c diff --git a/src/cdecl99.c b/src/cdecl99.c index 574d36e..0622e67 100644 --- a/src/cdecl99.c +++ b/src/cdecl99.c @@ -1,6 +1,6 @@ /* * Command line utility for making sense of C declarations. - * Copyright © 2011-2012, 2020-2023 Nick Bowler + * Copyright © 2011-2012, 2020-2024 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -37,6 +38,7 @@ #include "xtra.h" #include "options.h" #include "version.h" +#include "getline.h" #if HAVE_READLINE_READLINE_H # include @@ -117,17 +119,17 @@ static void print_help(const struct option *lopts) static int do_getline(char **linebuf, size_t *n) { - ssize_t rc; + int rc; - if ((rc = getline(linebuf, n, stdin)) < 0) { - if (ferror(stdin)) + if ((rc = dx_getline(linebuf, n, stdin)) < 0) { + if (rc == DX_GETLINE_ENOMEM) + print_error("%s", _("failed to allocate memory")); + else print_error("%s", strerror(errno)); return 0; } - if (rc-- && (*linebuf)[rc] == '\n') - (*linebuf)[rc] = '\0'; - return 1; + return rc; } static int do_readline(char **linebuf, size_t *n, bool batch) @@ -156,7 +158,7 @@ static int repl(bool batch) { char *line = NULL; bool fail = 0; - size_t n; + size_t n = 0; while (do_readline(&line, &n, batch)) { int rc = run_command(line, batch);