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

Diff for /src/usr.bin/diff/diffdir.c between version 1.21 and 1.22

version 1.21, 2003/07/06 22:17:21 version 1.22, 2003/07/09 00:07:44
Line 45 
Line 45 
 static struct dirent **slurpdir(char *, char **, int);  static struct dirent **slurpdir(char *, char **, int);
 static void diffit(struct dirent *, char *, size_t, char *, size_t);  static void diffit(struct dirent *, char *, size_t, char *, size_t);
   
   #define d_status        d_type          /* we need to store status for -l */
   
 /*  /*
  * Diff directory traveral. Will be called recursively if -r was specified.   * Diff directory traveral. Will be called recursively if -r was specified.
  */   */
Line 113 
Line 115 
                         /* file only in first dir, only diff if -N */                          /* file only in first dir, only diff if -N */
                         if (Nflag)                          if (Nflag)
                                 diffit(dent1, path1, dirlen1, path2, dirlen2);                                  diffit(dent1, path1, dirlen1, path2, dirlen2);
                           else if (lflag)
                                   dent1->d_status |= D_ONLY;
                         else if (format == D_NORMAL || format == D_CONTEXT ||                          else if (format == D_NORMAL || format == D_CONTEXT ||
                             format == D_UNIFIED || format == D_BRIEF)                              format == D_UNIFIED || format == D_BRIEF)
                                 /* XXX GNU diff always prints this XXX */                                  /* XXX GNU diff always prints this XXX */
Line 123 
Line 127 
                         /* file only in second dir, only diff if -N or -P */                          /* file only in second dir, only diff if -N or -P */
                         if (Nflag || Pflag)                          if (Nflag || Pflag)
                                 diffit(dent2, path1, dirlen1, path2, dirlen2);                                  diffit(dent2, path1, dirlen1, path2, dirlen2);
                           else if (lflag)
                                   dent2->d_status |= D_ONLY;
                         else if (format == D_NORMAL || format == D_CONTEXT ||                          else if (format == D_NORMAL || format == D_CONTEXT ||
                             format == D_UNIFIED || format == D_BRIEF)                              format == D_UNIFIED || format == D_BRIEF)
                                 /* XXX GNU diff always prints this XXX */                                  /* XXX GNU diff always prints this XXX */
Line 131 
Line 137 
                         dp2++;                          dp2++;
                 }                  }
         }          }
           if (lflag) {
                   path1[dirlen1 - 1] = '\0';
                   path2[dirlen2 - 1] = '\0';
                   for (dp1 = dirp1; (dent1 = *dp1) != NULL; dp1++) {
                           print_status(dent1->d_status, path1, path2,
                               dent1->d_name);
                   }
                   for (dp2 = dirp2; (dent2 = *dp2) != NULL; dp2++) {
                           if (dent2->d_status == D_ONLY)
                                   print_status(dent2->d_status, path2, NULL,
                                       dent2->d_name);
                   }
           }
   
         if (dirbuf1 != NULL) {          if (dirbuf1 != NULL) {
                 free(dirp1);                  free(dirp1);
Line 201 
Line 220 
         for (entries = 0, cp = buf; cp < ebuf; ) {          for (entries = 0, cp = buf; cp < ebuf; ) {
                 dp = (struct dirent *)cp;                  dp = (struct dirent *)cp;
                 if (dp->d_fileno != 0 && dp->d_type != DT_WHT &&                  if (dp->d_fileno != 0 && dp->d_type != DT_WHT &&
                     !excluded(dp->d_name))                      !excluded(dp->d_name)) {
                           dp->d_status = 0;
                         dirlist[entries++] = dp;                          dirlist[entries++] = dp;
                   }
                 if (dp->d_reclen <= 0)                  if (dp->d_reclen <= 0)
                         break;                          break;
                 cp += dp->d_reclen;                  cp += dp->d_reclen;
Line 261 
Line 282 
         if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) {          if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) {
                 if (rflag)                  if (rflag)
                         diffdir(path1, path2);                          diffdir(path1, path2);
                   else if (lflag)
                           dp->d_status |= D_COMMON;
                 else if (format != D_EDIT)                  else if (format != D_EDIT)
                         /* XXX GNU diff always prints this for dirs XXX */                          /* XXX GNU diff always prints this for dirs XXX */
                         printf("Common subdirectories: %s and %s\n",                          printf("Common subdirectories: %s and %s\n",
                             path1, path2);                              path1, path2);
                 return;                  return;
         }          }
         diffreg(path1, path2, flags);          dp->d_status = diffreg(path1, path2, flags);
 }  }
   
 /*  /*

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