smu: Minor error handeling changes

This commit is contained in:
Enno Tensing 2025-01-21 20:17:09 +01:00
parent e195f586cd
commit 14f610e8af
Signed by: tenno
GPG key ID: 95265603BD36E66C

35
smu.c
View file

@ -16,6 +16,14 @@
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <errno.h>
#ifndef PACKAGE
#define PACKAGE "smu"
#endif
#ifndef VERSION
#define VERSION "0.0"
#endif
#define CHARWIDTH 4 #define CHARWIDTH 4
#define LENGTH(x) sizeof(x) / sizeof(x[0]) #define LENGTH(x) sizeof(x) / sizeof(x[0])
#define ADDC(b, i, a) \ #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 *ereallocz(void *p, size_t size);
static void eprint(const char *format, ...); static void eprint(const char *format, ...);
static void hprint(const char *begin, const char *end); 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 */ /* list of parsers */
static Parser parsers[] = { dounderline, docomment, dolineprefix, dolist, 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)); char *buf = calloc(file_size + CHARWIDTH, sizeof(char));
if (!buf) { if (!buf) {
perror(""); perror(PACKAGE);
close(fd); close(fd);
return NULL; return NULL;
} }
bytes = read(fd, buf, file_size); bytes = read(fd, buf, file_size);
if (bytes != file_size) { if (bytes != file_size) {
perror(""); perror(PACKAGE);
close(fd); close(fd);
free(buf); free(buf);
return NULL; 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 *q;
const char *p; const char *p;
@ -687,11 +695,13 @@ void process(const char *begin, const char *end, int newblock)
if (newblock) if (newblock)
while (*p == '\n') while (*p == '\n')
if (++p == end) if (++p == end)
return; return 1;
affected = 0; affected = 0;
for (i = 0; i < LENGTH(parsers) && !affected; i++) for (i = 0; i < LENGTH(parsers) && !affected; i++)
affected = parsers[i](p, end, newblock); affected = parsers[i](p, end, newblock);
p += abs(affected); p += abs(affected);
if (affected == -1)
return 0;
if (!affected) { if (!affected) {
if (nohtml) if (nohtml)
hprint(p, p + 1); 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++) for (q = p; q != end && *q == '\n'; q++)
; ;
if (q == end) if (q == end)
return; return 1;
else if (p[0] == '\n' && p + 1 != end && p[1] == '\n') else if (p[0] == '\n' && p + 1 != end && p[1] == '\n')
newblock = 1; newblock = 1;
else else
newblock = affected < 0; newblock = affected < 0;
} }
return 1;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -743,7 +754,7 @@ int main(int argc, char *argv[])
} }
buffer = read_file(path, len); buffer = read_file(path, len);
if (!buffer) { if (!buffer) {
perror(""); perror(PACKAGE);
ret = EXIT_FAILURE; ret = EXIT_FAILURE;
goto exit; goto exit;
} }
@ -754,7 +765,7 @@ int main(int argc, char *argv[])
size_t buffer_size = 1024 * CHARWIDTH; size_t buffer_size = 1024 * CHARWIDTH;
buffer = calloc(buffer_size + CHARWIDTH, sizeof(char)); buffer = calloc(buffer_size + CHARWIDTH, sizeof(char));
if (!buffer) { if (!buffer) {
perror(""); perror(PACKAGE);
ret = EXIT_FAILURE; ret = EXIT_FAILURE;
goto exit; goto exit;
} }
@ -764,7 +775,7 @@ int main(int argc, char *argv[])
read_bytes = read(STDIN_FILENO, buffer, buffer_size); read_bytes = read(STDIN_FILENO, buffer, buffer_size);
if (read_bytes <= 0) { if (read_bytes <= 0) {
if (errno) { if (errno) {
perror(""); perror(PACKAGE);
ret = EXIT_FAILURE; ret = EXIT_FAILURE;
} }
free(buffer); free(buffer);
@ -772,7 +783,11 @@ int main(int argc, char *argv[])
} }
buffer[read_bytes] = '\0'; buffer[read_bytes] = '\0';
process(buffer, buffer + read_bytes, 1); if (!process(buffer, buffer + read_bytes, 1)) {
ret = EXIT_FAILURE;
free(buffer);
break;
}
} }
} }
exit: exit: