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

Comparing ray/src/util/radcompare.c (file contents):
Revision 2.12 by greg, Fri Oct 19 22:15:30 2018 UTC vs.
Revision 2.18 by greg, Sat Dec 1 21:09:53 2018 UTC

# Line 64 | Line 64 | const char     *hdr_ignkey[] = {
64                          "SOFTWARE",
65                          "CAPDATE",
66                          "GMT",
67 +                        "FRAME",
68                          NULL    /* terminator */
69                  };
70                                  /* header variable settings */
# Line 75 | Line 76 | LUTAB  hdr2 = LU_SINIT(free,free);
76                                          lin2cnt += (htp == &hdr2))
77  
78   typedef struct {                /* dynamic line buffer */
79 <        char    *ptr;
79 >        char    *str;
80          int     len;
81          int     siz;
82   } LINEBUF;
83  
84 < #define init_line(bp)   ((bp)->ptr = NULL, (bp)->siz = 0)
84 > #define init_line(bp)   ((bp)->str = NULL, (bp)->siz = 0)
85                                  /* 100 MByte limit on line buffer */
86   #define MAXBUF          (100L<<20)
87  
# Line 109 | Line 110 | usage()
110   static int
111   read_line(LINEBUF *bp, FILE *fp)
112   {
113 +        static int      doneWarn = 0;
114 +
115          bp->len = 0;
116 <        if (!bp->ptr) {
117 <                bp->ptr = (char *)malloc(bp->siz = 512);
118 <                if (!bp->ptr)
116 >        if (!bp->str) {
117 >                bp->str = (char *)malloc(bp->siz = 512);
118 >                if (!bp->str)
119                          goto memerr;
120          }
121 <        while (fgets(bp->ptr + bp->len, bp->siz - bp->len, fp)) {
122 <                bp->len += strlen(bp->ptr + bp->len);
123 <                if (bp->ptr[bp->len-1] == '\n')
121 >        while (fgets(bp->str + bp->len, bp->siz - bp->len, fp)) {
122 >                bp->len += strlen(bp->str + bp->len);
123 >                if (bp->str[bp->len-1] == '\n')
124                          break;          /* found EOL */
125                  if (bp->len < bp->siz - 4)
126                          continue;       /* at EOF? */
127 <                if (bp->siz >= MAXBUF)
128 <                        break;          /* don't go to extremes */
127 >                if (bp->siz >= MAXBUF) {
128 >                        if ((report >= REP_WARN) & !doneWarn) {
129 >                                fprintf(stderr,
130 >                        "%s: warning - input line(s) past %ld MByte limit\n",
131 >                                        progname, MAXBUF>>20);
132 >                                doneWarn++;
133 >                        }
134 >                        break;          /* return MAXBUF partial line */
135 >                }
136                  if ((bp->siz += bp->siz/2) > MAXBUF)
137                          bp->siz = MAXBUF;
138 <                bp->ptr = (char *)realloc(bp->ptr, bp->siz);
139 <                if (!bp->ptr)
138 >                bp->str = (char *)realloc(bp->str, bp->siz);
139 >                if (!bp->str)
140                          goto memerr;
141          }
142          return(bp->len);
# Line 141 | Line 151 | memerr:
151   static void
152   free_line(LINEBUF *bp)
153   {
154 <        bp->len = 0;
155 <        if (!bp->ptr) return;
146 <        free(bp->ptr);
147 <        bp->ptr = NULL;
154 >        if (bp->str) free(bp->str);
155 >        init_line(bp);
156   }
157  
158   /* Get type ID from name (or 0 if not found) */
# Line 192 | Line 200 | color_check(COLOR c1, COLOR c2)
200   {
201          int     p;
202  
203 <        if (!real_check(colval(c1,RED)+colval(c1,GRN)+colval(c1,BLU)*(1./3.),
204 <                        colval(c2,RED)+colval(c2,GRN)+colval(c2,BLU))*(1./3.))
203 >        if (!real_check((colval(c1,RED)+colval(c1,GRN)+colval(c1,BLU))*(1./3.),
204 >                        (colval(c2,RED)+colval(c2,GRN)+colval(c2,BLU))*(1./3.)))
205                  return(0);
206  
207          p = (colval(c1,GRN) > colval(c1,RED)) ? GRN : RED;
# Line 506 | Line 514 | compare_text()
514          init_line(&l1buf); init_line(&l2buf);   /* compare a line at a time */
515          while (read_line(&l1buf, f1in)) {
516                  lin1cnt++;
517 <                if (!*sskip2(l1buf.ptr,0))
517 >                if (!*sskip2(l1buf.str,0))
518                          continue;               /* ignore empty lines */
519  
520                  while (read_line(&l2buf, f2in)) {
521                          lin2cnt++;
522 <                        if (*sskip2(l2buf.ptr,0))
522 >                        if (*sskip2(l2buf.str,0))
523                                  break;          /* found other non-empty line */
524                  }
525 <                if (feof(f2in)) {
525 >                if (!l2buf.len) {               /* input 2 EOF? */
526                          if (report != REP_QUIET) {
527                                  fputs(f2name, stdout);
528                                  fputs(": unexpected end-of-file\n", stdout);
# Line 523 | Line 531 | compare_text()
531                          return(0);
532                  }
533                                                  /* compare non-empty lines */
534 <                if (!equiv_string(l1buf.ptr, l2buf.ptr)) {
534 >                if (!equiv_string(l1buf.str, l2buf.str)) {
535                          if (report != REP_QUIET) {
536                                  printf("%s: inputs '%s' and '%s' differ at line %d|%d\n",
537                                                  progname, f1name, f2name,
# Line 533 | Line 541 | compare_text()
541                                                  (l2buf.len < 256) ) {
542                                          fputs("------------- Mismatch -------------\n", stdout);
543                                          printf("%s@%d:\t%s", f1name,
544 <                                                        lin1cnt, l1buf.ptr);
544 >                                                        lin1cnt, l1buf.str);
545                                          printf("%s@%d:\t%s", f2name,
546 <                                                        lin2cnt, l2buf.ptr);
546 >                                                        lin2cnt, l2buf.str);
547                                  }
548                          }
549                          free_line(&l1buf); free_line(&l2buf);
550                          return(0);
551                  }
552          }
553 <                                                /* check for EOF on input 2 */
553 >        free_line(&l1buf);                      /* check for EOF on input 2 */
554          while (read_line(&l2buf, f2in)) {
555 <                if (!*sskip2(l2buf.ptr,0))
555 >                if (!*sskip2(l2buf.str,0))
556                          continue;
557                  if (report != REP_QUIET) {
558                          fputs(f1name, stdout);
559                          fputs(": unexpected end-of-file\n", stdout);
560                  }
561 <                free_line(&l1buf); free_line(&l2buf);
561 >                free_line(&l2buf);
562                  return(0);
563          }
564 <        free_line(&l1buf); free_line(&l2buf);
564 >        free_line(&l2buf);
565          return(good_RMS());                     /* final check for reals */
566   }
567  
# Line 770 | Line 778 | main(int argc, char *argv[])
778          ign_header |= !has_header(typ1);        /* check headers if indicated */
779          if (!ign_header && !headers_match())
780                  return(1);
781 <        lu_done(&hdr1); lu_done(&hdr2);
781 >        lu_done(&hdr1); lu_done(&hdr2);         /* done with header info. */
782          if (!ign_header & (report >= REP_WARN)) {
775                if (typ1 == TYP_UNKNOWN)
776                        printf("%s: warning - unrecognized format, comparing as binary\n",
777                                        progname);
783                  if (lin1cnt != lin2cnt)
784                          printf("%s: warning - headers are different lengths\n",
785 +                                        progname);
786 +                if (typ1 == TYP_UNKNOWN)
787 +                        printf("%s: warning - unrecognized format\n",
788                                          progname);
789          }
790          if (report >= REP_VERBOSE)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines