diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2019-05-16 08:19:31 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2019-05-16 08:19:31 +0100 |
commit | 1f9bb7a59773e7dacadd517a3f6f59362a8c9a9e (patch) | |
tree | e948efedd1ff2bcb074a17cf8c5f31857294bc11 | |
parent | e03859170afb1c0cc262924f8685039869782691 (diff) |
skip-missing-datasets
-rw-r--r-- | ministat.c | 27 |
1 files changed, 19 insertions, 8 deletions
@@ -461,8 +461,10 @@ ReadSet(const char *n, int column, const char *delim) } else { f = fopen(n, "r"); } - if (f == NULL) - err(1, "Cannot open %s", n); + if (f == NULL) { + fprintf(stderr, "Cannot open %s\n", n); + return NULL; + } s = NewSet(); s->name = strdup(n); line = 0; @@ -482,8 +484,10 @@ ReadSet(const char *n, int column, const char *delim) continue; d = strtod(t, &p); - if (p != NULL && *p != '\0') - err(2, "Invalid data on line %d in %s\n", line, n); + if (p != NULL && *p != '\0') { + fprintf(stderr, "Invalid data on line %d in %s\n", line, n); + return NULL; + } if (*buf != '\0') AddPoint(s, d); } @@ -491,7 +495,7 @@ ReadSet(const char *n, int column, const char *delim) if (s->n < 3) { fprintf(stderr, "Dataset %s must contain at least 3 data points\n", n); - exit (2); + return NULL; } qsort(s->points, s->n, sizeof *s->points, dbl_cmp); return (s); @@ -600,11 +604,18 @@ main(int argc, char **argv) ds[0] = ReadSet("-", column, delim); nds = 1; } else { + int j; + if (argc > MAX_DS) usage("Too many datasets."); - nds = argc; - for (i = 0; i < nds; i++) - ds[i] = ReadSet(argv[i], column, delim); + for (j = i = 0; i < argc; i++) { + ds[j] = ReadSet(argv[i], column, delim); + if (ds[j]) + j++; + } + nds = j; + if (!nds) + err(1, "Unable to open any datasets\n"); } for (i = 0; i < nds; i++) |