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.13 by greg, Fri Oct 19 23:50:32 2018 UTC vs.
Revision 2.17 by greg, Sat Nov 17 20:22:17 2018 UTC

# Line 75 | Line 75 | LUTAB  hdr2 = LU_SINIT(free,free);
75                                          lin2cnt += (htp == &hdr2))
76  
77   typedef struct {                /* dynamic line buffer */
78 <        char    *ptr;
78 >        char    *str;
79          int     len;
80          int     siz;
81   } LINEBUF;
82  
83 < #define init_line(bp)   ((bp)->ptr = NULL, (bp)->siz = 0)
83 > #define init_line(bp)   ((bp)->str = NULL, (bp)->siz = 0)
84                                  /* 100 MByte limit on line buffer */
85   #define MAXBUF          (100L<<20)
86  
# Line 109 | Line 109 | usage()
109   static int
110   read_line(LINEBUF *bp, FILE *fp)
111   {
112 +        static int      doneWarn = 0;
113 +
114          bp->len = 0;
115 <        if (!bp->ptr) {
116 <                bp->ptr = (char *)malloc(bp->siz = 512);
117 <                if (!bp->ptr)
115 >        if (!bp->str) {
116 >                bp->str = (char *)malloc(bp->siz = 512);
117 >                if (!bp->str)
118                          goto memerr;
119          }
120 <        while (fgets(bp->ptr + bp->len, bp->siz - bp->len, fp)) {
121 <                bp->len += strlen(bp->ptr + bp->len);
122 <                if (bp->ptr[bp->len-1] == '\n')
120 >        while (fgets(bp->str + bp->len, bp->siz - bp->len, fp)) {
121 >                bp->len += strlen(bp->str + bp->len);
122 >                if (bp->str[bp->len-1] == '\n')
123                          break;          /* found EOL */
124                  if (bp->len < bp->siz - 4)
125                          continue;       /* at EOF? */
126 <                if (bp->siz >= MAXBUF)
127 <                        break;          /* don't go to extremes */
126 >                if (bp->siz >= MAXBUF) {
127 >                        if ((report >= REP_WARN) & !doneWarn) {
128 >                                fprintf(stderr,
129 >                        "%s: warning - input line(s) past %ld MByte limit\n",
130 >                                        progname, MAXBUF>>20);
131 >                                doneWarn++;
132 >                        }
133 >                        break;          /* return MAXBUF partial line */
134 >                }
135                  if ((bp->siz += bp->siz/2) > MAXBUF)
136                          bp->siz = MAXBUF;
137 <                bp->ptr = (char *)realloc(bp->ptr, bp->siz);
138 <                if (!bp->ptr)
137 >                bp->str = (char *)realloc(bp->str, bp->siz);
138 >                if (!bp->str)
139                          goto memerr;
140          }
141          return(bp->len);
# Line 141 | Line 150 | memerr:
150   static void
151   free_line(LINEBUF *bp)
152   {
153 <        if (bp->ptr) free(bp->ptr);
153 >        if (bp->str) free(bp->str);
154          init_line(bp);
155   }
156  
# Line 190 | Line 199 | color_check(COLOR c1, COLOR c2)
199   {
200          int     p;
201  
202 <        if (!real_check(colval(c1,RED)+colval(c1,GRN)+colval(c1,BLU)*(1./3.),
203 <                        colval(c2,RED)+colval(c2,GRN)+colval(c2,BLU))*(1./3.))
202 >        if (!real_check((colval(c1,RED)+colval(c1,GRN)+colval(c1,BLU))*(1./3.),
203 >                        (colval(c2,RED)+colval(c2,GRN)+colval(c2,BLU))*(1./3.)))
204                  return(0);
205  
206          p = (colval(c1,GRN) > colval(c1,RED)) ? GRN : RED;
# Line 504 | Line 513 | compare_text()
513          init_line(&l1buf); init_line(&l2buf);   /* compare a line at a time */
514          while (read_line(&l1buf, f1in)) {
515                  lin1cnt++;
516 <                if (!*sskip2(l1buf.ptr,0))
516 >                if (!*sskip2(l1buf.str,0))
517                          continue;               /* ignore empty lines */
518  
519                  while (read_line(&l2buf, f2in)) {
520                          lin2cnt++;
521 <                        if (*sskip2(l2buf.ptr,0))
521 >                        if (*sskip2(l2buf.str,0))
522                                  break;          /* found other non-empty line */
523                  }
524                  if (!l2buf.len) {               /* input 2 EOF? */
# Line 521 | Line 530 | compare_text()
530                          return(0);
531                  }
532                                                  /* compare non-empty lines */
533 <                if (!equiv_string(l1buf.ptr, l2buf.ptr)) {
533 >                if (!equiv_string(l1buf.str, l2buf.str)) {
534                          if (report != REP_QUIET) {
535                                  printf("%s: inputs '%s' and '%s' differ at line %d|%d\n",
536                                                  progname, f1name, f2name,
# Line 531 | Line 540 | compare_text()
540                                                  (l2buf.len < 256) ) {
541                                          fputs("------------- Mismatch -------------\n", stdout);
542                                          printf("%s@%d:\t%s", f1name,
543 <                                                        lin1cnt, l1buf.ptr);
543 >                                                        lin1cnt, l1buf.str);
544                                          printf("%s@%d:\t%s", f2name,
545 <                                                        lin2cnt, l2buf.ptr);
545 >                                                        lin2cnt, l2buf.str);
546                                  }
547                          }
548                          free_line(&l1buf); free_line(&l2buf);
# Line 542 | Line 551 | compare_text()
551          }
552          free_line(&l1buf);                      /* check for EOF on input 2 */
553          while (read_line(&l2buf, f2in)) {
554 <                if (!*sskip2(l2buf.ptr,0))
554 >                if (!*sskip2(l2buf.str,0))
555                          continue;
556                  if (report != REP_QUIET) {
557                          fputs(f1name, stdout);
# Line 768 | Line 777 | main(int argc, char *argv[])
777          ign_header |= !has_header(typ1);        /* check headers if indicated */
778          if (!ign_header && !headers_match())
779                  return(1);
780 <        lu_done(&hdr1); lu_done(&hdr2);
780 >        lu_done(&hdr1); lu_done(&hdr2);         /* done with header info. */
781          if (!ign_header & (report >= REP_WARN)) {
773                if (typ1 == TYP_UNKNOWN)
774                        printf("%s: warning - unrecognized format, comparing as binary\n",
775                                        progname);
782                  if (lin1cnt != lin2cnt)
783                          printf("%s: warning - headers are different lengths\n",
784 +                                        progname);
785 +                if (typ1 == TYP_UNKNOWN)
786 +                        printf("%s: warning - unrecognized format\n",
787                                          progname);
788          }
789          if (report >= REP_VERBOSE)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines