From 14f610e8afa030f15be90ca8c91b49cb5c7e39f1 Mon Sep 17 00:00:00 2001 From: Enno Tensing Date: Tue, 21 Jan 2025 20:17:09 +0100 Subject: [PATCH] smu: Minor error handeling changes --- smu.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/smu.c b/smu.c index 7b17365..a9205ca 100644 --- a/smu.c +++ b/smu.c @@ -16,6 +16,14 @@ #include #include +#ifndef PACKAGE +#define PACKAGE "smu" +#endif + +#ifndef VERSION +#define VERSION "0.0" +#endif + #define CHARWIDTH 4 #define LENGTH(x) sizeof(x) / sizeof(x[0]) #define ADDC(b, i, a) \ @@ -56,7 +64,7 @@ static int dounderline(const char *begin, const char *end, int newblock); static void *ereallocz(void *p, size_t size); static void eprint(const char *format, ...); static void hprint(const char *begin, const char *end); -static void process(const char *begin, const char *end, int isblock); +static int process(const char *begin, const char *end, int isblock); /* list of parsers */ static Parser parsers[] = { dounderline, docomment, dolineprefix, dolist, @@ -123,14 +131,14 @@ char *read_file(const char *path, off64_t file_size) char *buf = calloc(file_size + CHARWIDTH, sizeof(char)); if (!buf) { - perror(""); + perror(PACKAGE); close(fd); return NULL; } bytes = read(fd, buf, file_size); if (bytes != file_size) { - perror(""); + perror(PACKAGE); close(fd); free(buf); return NULL; @@ -676,7 +684,7 @@ void hprint(const char *begin, const char *end) } } -void process(const char *begin, const char *end, int newblock) +int process(const char *begin, const char *end, int newblock) { const char *q; const char *p; @@ -687,11 +695,13 @@ void process(const char *begin, const char *end, int newblock) if (newblock) while (*p == '\n') if (++p == end) - return; + return 1; affected = 0; for (i = 0; i < LENGTH(parsers) && !affected; i++) affected = parsers[i](p, end, newblock); p += abs(affected); + if (affected == -1) + return 0; if (!affected) { if (nohtml) hprint(p, p + 1); @@ -702,12 +712,13 @@ void process(const char *begin, const char *end, int newblock) for (q = p; q != end && *q == '\n'; q++) ; if (q == end) - return; + return 1; else if (p[0] == '\n' && p + 1 != end && p[1] == '\n') newblock = 1; else newblock = affected < 0; } + return 1; } int main(int argc, char *argv[]) @@ -743,7 +754,7 @@ int main(int argc, char *argv[]) } buffer = read_file(path, len); if (!buffer) { - perror(""); + perror(PACKAGE); ret = EXIT_FAILURE; goto exit; } @@ -754,7 +765,7 @@ int main(int argc, char *argv[]) size_t buffer_size = 1024 * CHARWIDTH; buffer = calloc(buffer_size + CHARWIDTH, sizeof(char)); if (!buffer) { - perror(""); + perror(PACKAGE); ret = EXIT_FAILURE; goto exit; } @@ -764,7 +775,7 @@ int main(int argc, char *argv[]) read_bytes = read(STDIN_FILENO, buffer, buffer_size); if (read_bytes <= 0) { if (errno) { - perror(""); + perror(PACKAGE); ret = EXIT_FAILURE; } free(buffer); @@ -772,7 +783,11 @@ int main(int argc, char *argv[]) } buffer[read_bytes] = '\0'; - process(buffer, buffer + read_bytes, 1); + if (!process(buffer, buffer + read_bytes, 1)) { + ret = EXIT_FAILURE; + free(buffer); + break; + } } } exit: