[BACK]Return to diff.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / rcs

Diff for /src/usr.bin/rcs/diff.c between version 1.20 and 1.21

version 1.20, 2007/05/30 03:30:21 version 1.21, 2007/06/28 01:26:24
Line 171 
Line 171 
 static void      uni_range(int, int);  static void      uni_range(int, int);
 static void      dump_context_vec(FILE *, FILE *, int);  static void      dump_context_vec(FILE *, FILE *, int);
 static void      dump_unified_vec(FILE *, FILE *, int);  static void      dump_unified_vec(FILE *, FILE *, int);
 static int       prepare(int, FILE *, off_t, int);  static void      prepare(int, FILE *, off_t, int);
 static void      prune(void);  static void      prune(void);
 static void      equiv(struct line *, int, struct line *, int, int *);  static void      equiv(struct line *, int, struct line *, int, int *);
 static void      unravel(int);  static void      unravel(int);
Line 208 
Line 208 
 static int  *member;            /* will be overlaid on file[1] */  static int  *member;            /* will be overlaid on file[1] */
 static int   clen;  static int   clen;
 static int   inifdef;           /* whether or not we are in a #ifdef block */  static int   inifdef;           /* whether or not we are in a #ifdef block */
 static int   diff_len[2];  static int   len[2];
 static int   pref, suff;        /* length of prefix and suffix */  static int   pref, suff;        /* length of prefix and suffix */
 static int   slen[2];  static int   slen[2];
 static int   anychange;  static int   anychange;
Line 345 
Line 345 
                 goto closem;                  goto closem;
         }          }
   
         if (prepare(0, f1, stb1.st_size, flags) < 0 ||          prepare(0, f1, stb1.st_size, flags);
             prepare(1, f2, stb2.st_size, flags) < 0) {          prepare(1, f2, stb2.st_size, flags);
                 goto closem;  
         }  
   
         prune();          prune();
         sort(sfile[0], slen[0]);          sort(sfile[0], slen[0]);
Line 373 
Line 371 
         xfree(member);          xfree(member);
         xfree(class);          xfree(class);
   
         J = xrealloc(J, diff_len[0] + 2, sizeof(*J));          J = xrealloc(J, len[0] + 2, sizeof(*J));
         unravel(klist[i]);          unravel(klist[i]);
         xfree(clist);          xfree(clist);
         xfree(klist);          xfree(klist);
   
         ixold = xrealloc(ixold, diff_len[0] + 2, sizeof(*ixold));          ixold = xrealloc(ixold, len[0] + 2, sizeof(*ixold));
   
         ixnew = xrealloc(ixnew, diff_len[1] + 2, sizeof(*ixnew));          ixnew = xrealloc(ixnew, len[1] + 2, sizeof(*ixnew));
         check(f1, f2, flags);          check(f1, f2, flags);
         output(f1, f2, flags);          output(f1, f2, flags);
   
Line 425 
Line 423 
         }          }
 }  }
   
 static int  static void
 prepare(int i, FILE *fd, off_t filesize, int flags)  prepare(int i, FILE *fd, off_t filesize, int flags)
 {  {
         struct line *p;          struct line *p;
Line 434 
Line 432 
   
         rewind(fd);          rewind(fd);
   
         sz = ((size_t)filesize <= SIZE_MAX ? (size_t)filesize : SIZE_MAX) / 25;          sz = (filesize <= SIZE_MAX ? filesize : SIZE_MAX) / 25;
         if (sz < 100)          if (sz < 100)
                 sz = 100;                  sz = 100;
   
         p = xcalloc(sz + 3, sizeof(*p));          p = xcalloc(sz + 3, sizeof(*p));
         for (j = 0; (h = readhash(fd, flags));) {          for (j = 0; (h = readhash(fd, flags));) {
                 if (j == (int)sz) {                  if (j == sz) {
                         sz = sz * 3 / 2;                          sz = sz * 3 / 2;
                         p = xrealloc(p, sz + 3, sizeof(*p));                          p = xrealloc(p, sz + 3, sizeof(*p));
                 }                  }
                 p[++j].value = h;                  p[++j].value = h;
         }          }
         diff_len[i] = j;          len[i] = j;
         file[i] = p;          file[i] = p;
   
         return (0);  
 }  }
   
 static void  static void
Line 457 
Line 453 
 {  {
         int i, j;          int i, j;
   
         for (pref = 0; pref < diff_len[0] && pref < diff_len[1] &&          for (pref = 0; pref < len[0] && pref < len[1] &&
             file[0][pref + 1].value == file[1][pref + 1].value;              file[0][pref + 1].value == file[1][pref + 1].value;
             pref++)              pref++)
                 ;                  ;
         for (suff = 0;          for (suff = 0;
             (suff < diff_len[0] - pref) && (suff < diff_len[1] - pref) &&              (suff < len[0] - pref) && (suff < len[1] - pref) &&
             (file[0][diff_len[0] - suff].value ==              (file[0][len[0] - suff].value ==
             file[1][diff_len[1] - suff].value);              file[1][len[1] - suff].value);
             suff++)              suff++)
                 ;                  ;
         for (j = 0; j < 2; j++) {          for (j = 0; j < 2; j++) {
                 sfile[j] = file[j] + pref;                  sfile[j] = file[j] + pref;
                 slen[j] = diff_len[j] - pref - suff;                  slen[j] = len[j] - pref - suff;
                 for (i = 0; i <= slen[j]; i++)                  for (i = 0; i <= slen[j]; i++)
                         sfile[j][i].serial = i;                          sfile[j][i].serial = i;
         }          }
Line 620 
Line 616 
         struct cand *q;          struct cand *q;
         int i;          int i;
   
         for (i = 0; i <= diff_len[0]; i++)          for (i = 0; i <= len[0]; i++)
                 J[i] = i <= pref ? i :                  J[i] = i <= pref ? i :
                     i > diff_len[0] - suff ? i + diff_len[1] - diff_len[0] : 0;                      i > len[0] - suff ? i + len[1] - len[0] : 0;
         for (q = clist + p; q->y != 0; q = clist + q->pred)          for (q = clist + p; q->y != 0; q = clist + q->pred)
                 J[q->x + pref] = q->y + pref;                  J[q->x + pref] = q->y + pref;
 }  }
Line 645 
Line 641 
         ixold[0] = ixnew[0] = 0;          ixold[0] = ixnew[0] = 0;
         jackpot = 0;          jackpot = 0;
         ctold = ctnew = 0;          ctold = ctnew = 0;
         for (i = 1; i <= diff_len[0]; i++) {          for (i = 1; i <= len[0]; i++) {
                 if (J[i] == 0) {                  if (J[i] == 0) {
                         ixold[i] = ctold += skipline(f1);                          ixold[i] = ctold += skipline(f1);
                         continue;                          continue;
Line 724 
Line 720 
                 ixnew[j] = ctnew;                  ixnew[j] = ctnew;
                 j++;                  j++;
         }          }
         for (; j <= diff_len[1]; j++)          for (; j <= len[1]; j++)
                 ixnew[j] = ctnew += skipline(f2);                  ixnew[j] = ctnew += skipline(f2);
         /*          /*
          * if (jackpot != 0)           * if (jackpot != 0)
Line 795 
Line 791 
   
         rewind(f1);          rewind(f1);
         rewind(f2);          rewind(f2);
         m = diff_len[0];          m = len[0];
         J[0] = 0;          J[0] = 0;
         J[m + 1] = diff_len[1] + 1;          J[m + 1] = len[1] + 1;
         for (i0 = 1; i0 <= m; i0 = i1 + 1) {          for (i0 = 1; i0 <= m; i0 = i1 + 1) {
                 while (i0 <= m && J[i0] == J[i0 - 1] + 1)                  while (i0 <= m && J[i0] == J[i0 - 1] + 1)
                         i0++;                          i0++;
Line 810 
Line 806 
                 change(f1, f2, i0, i1, j0, j1, flags);                  change(f1, f2, i0, i1, j0, j1, flags);
         }          }
         if (m == 0)          if (m == 0)
                 change(f1, f2, 1, 0, 1, diff_len[1], flags);                  change(f1, f2, 1, 0, 1, len[1], flags);
         if (diff_format == D_IFDEF) {          if (diff_format == D_IFDEF) {
                 for (;;) {                  for (;;) {
 #define c i0  #define c i0
Line 1218 
Line 1214 
   
         b = d = 0;              /* gcc */          b = d = 0;              /* gcc */
         lowa = MAX(1, cvp->a - diff_context);          lowa = MAX(1, cvp->a - diff_context);
         upb = MIN(diff_len[0], context_vec_ptr->b + diff_context);          upb = MIN(len[0], context_vec_ptr->b + diff_context);
         lowc = MAX(1, cvp->c - diff_context);          lowc = MAX(1, cvp->c - diff_context);
         upd = MIN(diff_len[1], context_vec_ptr->d + diff_context);          upd = MIN(len[1], context_vec_ptr->d + diff_context);
   
         diff_output("***************");          diff_output("***************");
         if ((flags & D_PROTOTYPE)) {          if ((flags & D_PROTOTYPE)) {
Line 1323 
Line 1319 
   
         b = d = 0;              /* gcc */          b = d = 0;              /* gcc */
         lowa = MAX(1, cvp->a - diff_context);          lowa = MAX(1, cvp->a - diff_context);
         upb = MIN(diff_len[0], context_vec_ptr->b + diff_context);          upb = MIN(len[0], context_vec_ptr->b + diff_context);
         lowc = MAX(1, cvp->c - diff_context);          lowc = MAX(1, cvp->c - diff_context);
         upd = MIN(diff_len[1], context_vec_ptr->d + diff_context);          upd = MIN(len[1], context_vec_ptr->d + diff_context);
   
         diff_output("@@ -");          diff_output("@@ -");
         uni_range(lowa, upb);          uni_range(lowa, upb);

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21