ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/cmatrix.c
(Generate patch)

Comparing ray/src/util/cmatrix.c (file contents):
Revision 2.32 by greg, Tue Jan 19 23:32:00 2021 UTC vs.
Revision 2.36 by greg, Sun Dec 4 16:58:08 2022 UTC

# Line 214 | Line 214 | CMATRIX *
214   cm_load(const char *inspec, int nrows, int ncols, int dtype)
215   {
216          const int       ROWINC = 2048;
217 +        int             dimsOK = (dtype == DTascii) | (nrows > 0) && ncols;
218          int             swap = 0;
219          FILE            *fp;
220          COLOR           scale;
221          CMATRIX         *cm;
222  
223 <        if (!inspec || !*inspec)
223 >        if (!inspec)
224 >                inspec = stdin_name;
225 >        else if (!*inspec)
226                  return(NULL);
227 <        if (inspec == stdin_name)
227 >        if (inspec == stdin_name) {             /* reading from stdin? */
228                  fp = stdin;
229 <        else if (inspec[0] == '!') {
229 >        } else if (inspec[0] == '!') {
230                  fp = popen(inspec+1, "r");
231                  if (!fp) {
232                          sprintf(errmsg, "cannot start command '%s'", inspec);
# Line 238 | Line 241 | cm_load(const char *inspec, int nrows, int ncols, int
241   #endif
242          if (dtype != DTascii)
243                  SET_FILE_BINARY(fp);            /* doesn't really work */
244 <        if (!dtype | !ncols) {                  /* expecting header? */
244 >        if (!dtype | !dimsOK) {                 /* expecting header? */
245                  char    *err = cm_getheader(&dtype, &nrows, &ncols, &swap, scale, fp);
246                  if (err)
247                          error(USER, err);
248 +                dimsOK = ncols > 0 && ( nrows > 0 ||
249 +                                (dtype != DTrgbe) & (dtype != DTxyze) );
250          }
251 <        if (ncols <= 0 && !fscnresolu(&ncols, &nrows, fp))
252 <                error(USER, "unspecified number of columns");
251 >        if (!dimsOK && !fscnresolu(&ncols, &nrows, fp))
252 >                error(USER, "unspecified matrix size");
253          switch (dtype) {
254          case DTascii:
255          case DTfloat:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines