| 
version 1.3.4.2, 2013/01/18 13:21:06
 | 
version 1.3.4.4, 2014/02/04 16:52:32
 | 
| 
 Line 12  terms:
 | 
 Line 12  terms:
 | 
 |  All of the documentation and software included in the ELWIX and AITNET | 
  All of the documentation and software included in the ELWIX and AITNET | 
 |  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> | 
  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> | 
 |   | 
   | 
| Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 | Copyright 2004 - 2014 | 
 |          by Michael Pounov <misho@elwix.org>.  All rights reserved. | 
          by Michael Pounov <misho@elwix.org>.  All rights reserved. | 
 |   | 
   | 
 |  Redistribution and use in source and binary forms, with or without | 
  Redistribution and use in source and binary forms, with or without | 
| 
 Line 54  Usage()
 | 
 Line 54  Usage()
 | 
 |          printf( "-= Direr =- Tool for compare directories by checksum\n" | 
          printf( "-= Direr =- Tool for compare directories by checksum\n" | 
 |                  "=== %s === %s@%s ===\n\n" | 
                  "=== %s === %s@%s ===\n\n" | 
 |                  "  Syntax: direr [options] <dir> [cmp_dir]\n\n" | 
                  "  Syntax: direr [options] <dir> [cmp_dir]\n\n" | 
 |   | 
                  "\t-q\t\t\tQuiet mode\n" | 
 |                  "\t-s <cksum>\t\tCompare dir with this checksum ...\n" | 
                  "\t-s <cksum>\t\tCompare dir with this checksum ...\n" | 
 |                  "\n", compiled, compiledby, compilehost); | 
                  "\n", compiled, compiledby, compilehost); | 
 |  } | 
  } | 
| 
 Line 61  Usage()
 | 
 Line 62  Usage()
 | 
 |  int | 
  int | 
 |  main(int argc, char **argv) | 
  main(int argc, char **argv) | 
 |  { | 
  { | 
|         u_char *md[2], mode = 0; |         u_char *md[2], mode = 0, quiet = 0; | 
 |          char szCmp[MAXPATHLEN], *str[2], ch; | 
          char szCmp[MAXPATHLEN], *str[2], ch; | 
 |          int ret = 0; | 
          int ret = 0; | 
|         ait_val_t v; |         ait_val_t v = AIT_VAL_INITIALIZER(v); | 
 |   | 
   | 
 |          memset(md, 0, sizeof md); | 
          memset(md, 0, sizeof md); | 
 |          memset(str, 0, sizeof str); | 
          memset(str, 0, sizeof str); | 
 |          memset(szCmp, 0, MAXPATHLEN); | 
          memset(szCmp, 0, MAXPATHLEN); | 
|         while ((ch = getopt(argc, argv, "hs:")) != -1) |         while ((ch = getopt(argc, argv, "hqs:")) != -1) | 
 |                  switch (ch) { | 
                  switch (ch) { | 
 |                          case 's': | 
                          case 's': | 
 |                                  str[1] = strdup(optarg); | 
                                  str[1] = strdup(optarg); | 
 |                                  mode = 1; | 
                                  mode = 1; | 
 |                                  break; | 
                                  break; | 
 |   | 
                          case 'q': | 
 |   | 
                                  quiet = 1; | 
 |   | 
                                  break; | 
 |                          case 'h': | 
                          case 'h': | 
 |                          default: | 
                          default: | 
 |                                  Usage(); | 
                                  Usage(); | 
| 
 Line 93  main(int argc, char **argv)
 | 
 Line 97  main(int argc, char **argv)
 | 
 |          } | 
          } | 
 |   | 
   | 
 |          if (sync_dirChkSum(argv[0], &md[0]) == -1) { | 
          if (sync_dirChkSum(argv[0], &md[0]) == -1) { | 
|                 printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno)); |                 ELIBERR(sync); | 
 |                  return 1; | 
                  return 1; | 
 |          } | 
          } | 
 |          AIT_SET_BUF(&v, md[0], MD5_DIGEST_LENGTH); | 
          AIT_SET_BUF(&v, md[0], MD5_DIGEST_LENGTH); | 
 |          str[0] = str_Dig2Hex(&v); | 
          str[0] = str_Dig2Hex(&v); | 
 |          AIT_FREE_VAL(&v); | 
          AIT_FREE_VAL(&v); | 
 |          if (!str[0]) { | 
          if (!str[0]) { | 
|                 free(md[0]); |                 e_free(md[0]); | 
 |                  return 1; | 
                  return 1; | 
 |          } | 
          } | 
|         printf("1.Directory '%s': %s\n", argv[0], str[0]); |         if (!quiet) | 
|   |                 printf("1.Directory '%s': %s\n", argv[0], str[0]); | 
 |   | 
   | 
 |          if (mode & 1 && *str[1]) { | 
          if (mode & 1 && *str[1]) { | 
 |                  ret |= !strcmp((char*) str[0], (char*) str[1]) << 1; | 
                  ret |= !strcmp((char*) str[0], (char*) str[1]) << 1; | 
|                 printf("Result checksum:: %s %s %s\n\n", str[0], ret & 2 ? "==" : "!=", str[1]); |                 if (!quiet) | 
|                 free(str[1]); |                         printf("Result checksum:: %s %s %s\n\n", str[0],  | 
|   |                                         ret & 2 ? "==" : "!=", str[1]); | 
|   |                 e_free(str[1]); | 
 |          } | 
          } | 
 |   | 
   | 
 |          if (mode & 2 && *szCmp) { | 
          if (mode & 2 && *szCmp) { | 
 |                  if (sync_dirChkSum(szCmp, &md[1]) == -1) { | 
                  if (sync_dirChkSum(szCmp, &md[1]) == -1) { | 
|                         printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno)); |                         ELIBERR(sync); | 
 |                          return 1; | 
                          return 1; | 
 |                  } | 
                  } | 
 |                  AIT_SET_BUF(&v, md[1], MD5_DIGEST_LENGTH); | 
                  AIT_SET_BUF(&v, md[1], MD5_DIGEST_LENGTH); | 
 |                  str[1] = str_Dig2Hex(&v); | 
                  str[1] = str_Dig2Hex(&v); | 
 |                  AIT_FREE_VAL(&v); | 
                  AIT_FREE_VAL(&v); | 
 |                  if (!str[1]) { | 
                  if (!str[1]) { | 
|                         free(md[0]); |                         e_free(md[0]); | 
|                         free(str[0]); |                         e_free(str[0]); | 
|                         free(md[1]); |                         e_free(md[1]); | 
 |                          return 1; | 
                          return 1; | 
 |                  } | 
                  } | 
|                 printf("2.Directory '%s': %s\n", szCmp, str[1]); |                 if (!quiet) | 
|   |                         printf("2.Directory '%s': %s\n", szCmp, str[1]); | 
 |   | 
   | 
 |                  ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2); | 
                  ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2); | 
|                 printf("Result directory:: %s %s %s\n\n", argv[0], ret & 4 ? "==" : "!=", szCmp); |                 if (!quiet) | 
 |                         printf("Result directory:: %s %s %s\n\n", argv[0],  | 
|                 if (str[1]) |                                         ret & 4 ? "==" : "!=", szCmp); | 
|                         free(str[1]); |                 e_free(str[1]); | 
|                 if (md[1]) |                 e_free(md[1]); | 
|                         free(md[1]); |   | 
 |          } | 
          } | 
 |   | 
   | 
|         if (str[0]) |         e_free(str[0]); | 
|                 free(str[0]); |         e_free(md[0]); | 
|         if (md[0]) |   | 
|                 free(md[0]); |   | 
 |          return ret; | 
          return ret; | 
 |  } | 
  } |