Diff for /embedtools/src/dircmp.c between versions 1.1.2.3 and 1.1.2.4

version 1.1.2.3, 2010/07/13 11:22:36 version 1.1.2.4, 2010/07/13 11:49:49
Line 11  Usage() Line 11  Usage()
 {  {
         printf( "-= DirCmp =- Tool for compare directories and show differences\n"          printf( "-= DirCmp =- Tool for compare directories and show differences\n"
                 "=== %s === %s@%s ===\n\n"                  "=== %s === %s@%s ===\n\n"
                "  Syntax: dircmp [options] <dir> <cmp_dir>\n\n"                "  Syntax: dircmp [options] <dir> [<cmp_dir>]\n\n"
                "\t-l\t\tLong directory output ..."                "\t-l\t\tLong directory output ...\n"
                 "\t-s\t\tCompare dir from stdin list\n"
                 "\t-o <filename>\tOutput diff to filename\n"
                 "\n", compiled, compiledby, compilehost);                  "\n", compiled, compiledby, compilehost);
 }  }
   
Line 71  cmpDir(const char *csDir1, const char *csDir2, struct  Line 73  cmpDir(const char *csDir1, const char *csDir2, struct 
         struct stat sb;          struct stat sb;
         char szStr[MAX_STR], szType[MAX_STR];          char szStr[MAX_STR], szType[MAX_STR];
   
        if (!csDir1 || !csDir2 || !list)        if (!csDir1 || !list)
                 return -1;                  return -1;
         else          else
                 memset(tags, -1, sizeof tags);                  memset(tags, -1, sizeof tags);
Line 112  cmpDir(const char *csDir1, const char *csDir2, struct  Line 114  cmpDir(const char *csDir1, const char *csDir2, struct 
                 l[n].tag = crcFletcher16((u_short*) d.d_name, d.d_namlen / 2 + d.d_namlen % 2);                  l[n].tag = crcFletcher16((u_short*) d.d_name, d.d_namlen / 2 + d.d_namlen % 2);
                 l[n].hash = crcAdler((u_char*) d.d_name, d.d_namlen);                  l[n].hash = crcAdler((u_char*) d.d_name, d.d_namlen);
                 strlcpy(l[n].name, d.d_name, MAXPATHLEN);                  strlcpy(l[n].name, d.d_name, MAXPATHLEN);
                if (lm) {                if (lm & 1) {
                         if (lstat(d.d_name, &sb) != -1) {                          if (lstat(d.d_name, &sb) != -1) {
                                 memset(szStr, 0, MAX_STR);                                  memset(szStr, 0, MAX_STR);
                                 strftime(szStr, MAX_STR, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim));                                  strftime(szStr, MAX_STR, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim));
Line 159  cmpDir(const char *csDir1, const char *csDir2, struct  Line 161  cmpDir(const char *csDir1, const char *csDir2, struct 
         for (i = n - 1; i > -1; i--)          for (i = n - 1; i > -1; i--)
                 tags[l[i].tag] = i;                  tags[l[i].tag] = i;
   
           // if only 1 dir supplied and output filename is set, goto end
           if (lm & 2 && !csDir2)
                   goto end;
           ////
   
         // open dir 2 for diff ...          // open dir 2 for diff ...
         if (chdir(csDir2) == -1) {          if (chdir(csDir2) == -1) {
                 printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));                  printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
Line 205  cmpDir(const char *csDir1, const char *csDir2, struct  Line 212  cmpDir(const char *csDir1, const char *csDir2, struct 
                         l[n].tag = t;                          l[n].tag = t;
                         l[n].hash = hash;                          l[n].hash = hash;
                         strlcpy(l[n].name, d.d_name, MAXPATHLEN);                          strlcpy(l[n].name, d.d_name, MAXPATHLEN);
                        if (lm) {                        if (lm & 1) {
                                 if (lstat(d.d_name, &sb) != -1) {                                  if (lstat(d.d_name, &sb) != -1) {
                                         memset(szStr, 0, MAX_STR);                                          memset(szStr, 0, MAX_STR);
                                         strftime(szStr, MAX_STR, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim));                                          strftime(szStr, MAX_STR, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim));
Line 258  cmpDir(const char *csDir1, const char *csDir2, struct  Line 265  cmpDir(const char *csDir1, const char *csDir2, struct 
                         i--;                          i--;
                 }                  }
         n -= cx;          n -= cx;
end:
         *list = l;          *list = l;
         return n;          return n;
 }  }
Line 268  cmpDir(const char *csDir1, const char *csDir2, struct  Line 275  cmpDir(const char *csDir1, const char *csDir2, struct 
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
        u_char *md[2];        u_char *md[2] = { NULL, NULL };
        char ch;        char ch, szFName[MAXPATHLEN];
         struct tagDirName *list;          struct tagDirName *list;
         register int i;          register int i;
           FILE *f = stdout;
   
        while ((ch = getopt(argc, argv, "hl")) != -1)        while ((ch = getopt(argc, argv, "hlo:s")) != -1)
                 switch (ch) {                  switch (ch) {
                           case 'o':
                                   lm |= 2;
                                   strlcpy(szFName, optarg, MAXPATHLEN);
                                   break;
                           case 's':
                                   lm |= 4;
                                   break;
                         case 'l':                          case 'l':
                                lm = 1;                                lm |= 1;
                                 break;                                  break;
                         case 'h':                          case 'h':
                         default:                          default:
Line 286  main(int argc, char **argv) Line 301  main(int argc, char **argv)
         argc -= optind;          argc -= optind;
         argv += optind;          argv += optind;
   
        if (argc < 2) {        if (argc < 1 || (lm < 2 && argc < 2)) {
                 Usage();                  Usage();
                 return 127;                  return 127;
         }          }
         // check for general differences          // check for general differences
         if (calcDir(argv[0], &md[0]) == -1)          if (calcDir(argv[0], &md[0]) == -1)
                 return 127;                  return 127;
        if (calcDir(argv[1], &md[1]) == -1) {        if (argc > 1 && lm < 4) {
                free(md[0]);                if (calcDir(argv[1], &md[1]) == -1) {
                return 127;                        free(md[0]);
                         return 127;
                 }
                 if (!memcmp(md[0], md[1], MD5_DIGEST_LENGTH)) {
                         free(md[0]);
                         if (md[1])
                                 free(md[1]);
                         printf("Directory %s == %s\n\n", argv[0], argv[1]);
                         return 0;
                 } else {
                         free(md[0]);
                         if (md[1])
                                 free(md[1]);
                         printf("Directory %s != %s ::\n\n", argv[0], argv[1]);
                 }
         }          }
         if (!memcmp(md[0], md[1], MD5_DIGEST_LENGTH)) {  
                 free(md[0]);  
                 free(md[1]);  
                 printf("Directory %s == %s\n\n", argv[0], argv[1]);  
                 return 0;  
         } else {  
                 free(md[0]);  
                 free(md[1]);  
                 printf("Directory %s != %s ::\n\n", argv[0], argv[1]);  
         }  
   
        if (cmpDir(argv[0], argv[1], &list) == -1)        if (lm < 4 && cmpDir(argv[0], argc > 1 ? argv[1] : NULL, &list) == -1)
                 return 127;                  return 127;
   
           if (lm & 2) {
                   f = fopen(szFName, "w");
                   if (!f) {
                           printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
                           if (list)
                                   free(list);
                           return 0;
                   }
           }
         for (i = 0; list[i].ch; i++)          for (i = 0; list[i].ch; i++)
                printf("%c  %s %s\n", list[i].ch, list[i].name, list[i].extra);                fprintf(f, "%c  %s %s\n", list[i].ch, list[i].name, list[i].extra);
        printf("\nTotal count of elements = %d\n", i);        if (lm & 2)
                 fclose(f);
   
           printf("\nTotal count of elements = %d\n", i);
         free(list);          free(list);
         return 1;          return 1;
 }  }

Removed from v.1.1.2.3  
changed lines
  Added in v.1.1.2.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>