fileutil: better error handling for foreach_line()
authorMarko Kreen <markokr@gmail.com>
Tue, 1 Feb 2011 12:32:47 +0000 (14:32 +0200)
committerMarko Kreen <markokr@gmail.com>
Tue, 1 Feb 2011 12:38:09 +0000 (14:38 +0200)
usual/fileutil.c
usual/fileutil.h

index 7ae16b1d922016e82b3dd749102ab11f5b9ef24b..23e6ba293866cbcb7d860a522b0cd32a6c3223bb 100644 (file)
@@ -72,17 +72,22 @@ bool foreach_line(const char *fn, procline_cb proc_line, void *arg)
        size_t len = 0;
        ssize_t res;
        FILE *f = fopen(fn, "rb");
+       bool ok = false;
        if (!f)
                return false;
        while (1) {
                res = getline(&ln, &len, f);
-               if (res < 0)
+               if (res < 0) {
+                       if (feof(f))
+                               ok = true;
+                       break;
+               }
+               if (!proc_line(arg, ln, res))
                        break;
-               proc_line(arg, ln, res);
        }
        fclose(f);
        free(ln);
-       return true;
+       return ok;
 }
 
 /*
index e3973993b47b4548a1a8c250d637670635490b37..2f57e4b8397691ec3d7b824a9c4a23cd25bae3ae 100644 (file)
@@ -34,7 +34,7 @@ struct MappedFile {
 };
 
 /** Signature for per-line callback */
-typedef void (*procline_cb)(void *arg, const char *line, ssize_t len);
+typedef bool (*procline_cb)(void *arg, const char *line, ssize_t len);
 
 /** Read file into memory */
 void *load_file(const char *fn, size_t *len_p);