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

Diff for /src/usr.bin/diff3/diff3prog.c between version 1.6 and 1.7

version 1.6, 2005/03/30 04:44:52 version 1.7, 2005/08/01 08:17:57
Line 105 
Line 105 
         struct range new;          struct range new;
 };  };
   
 #define NC 200  size_t szchanges;
 struct diff d13[NC];  
 struct diff d23[NC];  struct diff *d13;
   struct diff *d23;
 /*  /*
  * "de" is used to gather editing scripts.  These are later spewed out in   * "de" is used to gather editing scripts.  These are later spewed out in
  * reverse order.  Its first element must be all zero, the "new" component   * reverse order.  Its first element must be all zero, the "new" component
Line 115 
Line 116 
  * look (!?).  Array overlap indicates which sections in "de" correspond to   * look (!?).  Array overlap indicates which sections in "de" correspond to
  * lines that are different in all three files.   * lines that are different in all three files.
  */   */
 struct diff de[NC];  struct diff *de;
 char overlap[NC];  char *overlap;
 int  overlapcnt;  int  overlapcnt;
 FILE *fp[3];  FILE *fp[3];
 int cline[3];           /* # of the last-read line in each file (0-2) */  int cline[3];           /* # of the last-read line in each file (0-2) */
Line 135 
Line 136 
 char *getchange(FILE *);  char *getchange(FILE *);
 char *getline(FILE *, size_t *);  char *getline(FILE *, size_t *);
 int number(char **);  int number(char **);
 int readin(char *, struct diff *);  int readin(char *, struct diff **);
 int skip(int, int, char *);  int skip(int, int, char *);
 void change(int, struct range *, int);  void change(int, struct range *, int);
 void keep(int, struct range *);  void keep(int, struct range *);
Line 145 
Line 146 
 void separate(const char *);  void separate(const char *);
 __dead void edscript(int);  __dead void edscript(int);
 __dead void trouble(void);  __dead void trouble(void);
   void increase(void);
 __dead void usage(void);  __dead void usage(void);
   
 int  int
Line 187 
Line 189 
                     argc >= 7 ? argv[6] : argv[4]);                      argc >= 7 ? argv[6] : argv[4]);
         }          }
   
         m = readin(argv[0], d13);          increase();
         n = readin(argv[1], d23);          m = readin(argv[0], &d13);
           n = readin(argv[1], &d23);
         for (i = 0; i <= 2; i++) {          for (i = 0; i <= 2; i++) {
                 if ((fp[i] = fopen(argv[i + 2], "r")) == NULL) {                  if ((fp[i] = fopen(argv[i + 2], "r")) == NULL) {
                         printf("diff3: can't open %s\n", argv[i + 2]);                          printf("diff3: can't open %s\n", argv[i + 2]);
Line 206 
Line 209 
  * The vector could be optimized out of existence)   * The vector could be optimized out of existence)
  */   */
 int  int
 readin(char *name, struct diff *dd)  readin(char *name, struct diff **dd)
 {  {
         int a, b, c, d, i;          int a, b, c, d, i;
         char kind, *p;          char kind, *p;
   
         fp[0] = fopen(name, "r");          fp[0] = fopen(name, "r");
         for (i=0; (p = getchange(fp[0])); i++) {          for (i=0; (p = getchange(fp[0])); i++) {
                 if (i >= NC)                  if (i >= szchanges - 1)
                         err(EXIT_FAILURE, "too many changes");                          increase();
                 a = b = number(&p);                  a = b = number(&p);
                 if (*p == ',') {                  if (*p == ',') {
                         p++;                          p++;
Line 232 
Line 235 
                         c++;                          c++;
                 b++;                  b++;
                 d++;                  d++;
                 dd[i].old.from = a;                  (*dd)[i].old.from = a;
                 dd[i].old.to = b;                  (*dd)[i].old.to = b;
                 dd[i].new.from = c;                  (*dd)[i].new.from = c;
                 dd[i].new.to = d;                  (*dd)[i].new.to = d;
         }          }
         dd[i].old.from = dd[i-1].old.to;          (*dd)[i].old.from = (*dd)[i-1].old.to;
         dd[i].new.from = dd[i-1].new.to;          (*dd)[i].new.from = (*dd)[i-1].new.to;
         (void)fclose(fp[0]);          (void)fclose(fp[0]);
         return (i);          return (i);
 }  }
Line 565 
Line 568 
         }          }
         exit(overlapcnt);          exit(overlapcnt);
 }  }
   
   void
   increase(void)
   {
           struct diff *p;
           char *q;
           size_t newsz, incr;
   
           /* are the memset(3) calls needed? */
           newsz = szchanges == 0 ? 64 : 2 * szchanges;
           incr = newsz - szchanges;
   
           p = realloc(d13, newsz * sizeof(struct diff));
           if (p == NULL)
                   err(1, NULL);
           memset(p + szchanges, 0, incr * sizeof(struct diff));
           d13 = p;
           p = realloc(d23, newsz * sizeof(struct diff));
           if (p == NULL)
                   err(1, NULL);
           memset(p + szchanges, 0, incr * sizeof(struct diff));
           d23 = p;
           p = realloc(de, newsz * sizeof(struct diff));
           if (p == NULL)
                   err(1, NULL);
           memset(p + szchanges, 0, incr * sizeof(struct diff));
           de = p;
           q = realloc(overlap, newsz * sizeof(char));
           if (q == NULL)
                   err(1, NULL);
           memset(q + szchanges, 0, incr * sizeof(char));
           overlap = q;
           szchanges = newsz;
   }
   
   
 __dead void  __dead void
 usage(void)  usage(void)

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7