diff -Naur csvutils-0.9.3+20161218_e57951b/src/csvcheck.c csvutils-0.9.3+20161218_e57951b.patched/src/csvcheck.c --- csvutils-0.9.3+20161218_e57951b/src/csvcheck.c 2022-01-26 02:05:12.660602834 -0500 +++ csvutils-0.9.3+20161218_e57951b.patched/src/csvcheck.c 2022-01-26 02:33:11.553450216 -0500 @@ -89,6 +89,8 @@ } } +int errcnt = 0; + void check_file(char *filename) { @@ -112,6 +114,7 @@ fp = fopen(filename, "rb"); if (fp == NULL) { fprintf(stderr, "Failed to open file %s: %s\n", filename, strerror(errno)); + errcnt++; csv_free(&p); return; } @@ -121,18 +124,21 @@ if ((retval = csv_parse(&p, buf, bytes_read, NULL, NULL, NULL)) != bytes_read) { if (csv_error(&p) == CSV_EPARSE) { printf("%s: malformed at byte %lu\n", filename ? filename : "stdin", (unsigned long)pos + retval + 1); + errcnt++; goto end; } else { printf("Error while processing %s: %s\n", filename ? filename : "stdin", csv_strerror(csv_error(&p))); + errcnt++; goto end; } } pos += 1024; } - if (csv_fini(&p, NULL, NULL, NULL) != 0) + if (csv_fini(&p, NULL, NULL, NULL) != 0) { printf("%s: missing closing quote at end of input\n", filename ? filename : "stdin"); - else + errcnt++; + } else printf("%s well-formed\n", filename ? filename : "data is"); end: @@ -186,5 +192,5 @@ check_file(NULL); } - return EXIT_SUCCESS; + return (errcnt ? EXIT_FAILURE : EXIT_SUCCESS); }