--- ray/src/util/cmatrix.c 2021/01/19 23:32:00 2.32 +++ ray/src/util/cmatrix.c 2022/03/11 17:15:42 2.34 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: cmatrix.c,v 2.32 2021/01/19 23:32:00 greg Exp $"; +static const char RCSid[] = "$Id: cmatrix.c,v 2.34 2022/03/11 17:15:42 greg Exp $"; #endif /* * Color matrix routines. @@ -219,11 +219,13 @@ cm_load(const char *inspec, int nrows, int ncols, int COLOR scale; CMATRIX *cm; - if (!inspec || !*inspec) + if (!inspec) + inspec = stdin_name; + else if (!*inspec) return(NULL); - if (inspec == stdin_name) + if (inspec == stdin_name) { /* reading from stdin? */ fp = stdin; - else if (inspec[0] == '!') { + } else if (inspec[0] == '!') { fp = popen(inspec+1, "r"); if (!fp) { sprintf(errmsg, "cannot start command '%s'", inspec); @@ -238,13 +240,13 @@ cm_load(const char *inspec, int nrows, int ncols, int #endif if (dtype != DTascii) SET_FILE_BINARY(fp); /* doesn't really work */ - if (!dtype | !ncols) { /* expecting header? */ + if (!dtype | !nrows | !ncols) { /* expecting header? */ char *err = cm_getheader(&dtype, &nrows, &ncols, &swap, scale, fp); if (err) error(USER, err); } - if (ncols <= 0 && !fscnresolu(&ncols, &nrows, fp)) - error(USER, "unspecified number of columns"); + if (!nrows | !ncols && !fscnresolu(&ncols, &nrows, fp)) + error(USER, "unspecified matrix size"); switch (dtype) { case DTascii: case DTfloat: