summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2019-05-16 08:19:31 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2019-05-16 08:19:31 +0100
commit1f9bb7a59773e7dacadd517a3f6f59362a8c9a9e (patch)
treee948efedd1ff2bcb074a17cf8c5f31857294bc11
parente03859170afb1c0cc262924f8685039869782691 (diff)
skip-missing-datasets
-rw-r--r--ministat.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/ministat.c b/ministat.c
index 73fd49e..8d3b4d3 100644
--- a/ministat.c
+++ b/ministat.c
@@ -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++)