Diff for /embedtools/src/direr.c between versions 1.1 and 1.2

version 1.1, 2010/07/12 15:20:41 version 1.2, 2011/06/08 12:45:41
Line 0 Line 1
   /*************************************************************************
    * (C) 2010 AITNET - Sofia/Bulgaria - <office@aitbg.com>
    *  by Michael Pounov <misho@aitbg.com>
    *
    * $Author$
    * $Id$
    *
    *************************************************************************/
   #include "global.h"
   
   
   extern char compiled[], compiledby[], compilehost[];
   
   static void
   Usage()
   {
           printf( "-= Direr =- Tool for compare directories by checksum\n"
                   "=== %s === %s@%s ===\n\n"
                   "  Syntax: direr [options] <dir> [cmp_dir]\n\n"
                   "\t-s <cksum>\t\tCompare dir with this checksum ...\n"
                   "\n", compiled, compiledby, compilehost);
   }
   
   int
   main(int argc, char **argv)
   {
           u_char *md[2], mode = 0;
           char szCmp[MAXPATHLEN], *str[2], ch;
           int ret = 0;
   
           memset(md, 0, sizeof md);
           memset(str, 0, sizeof str);
           memset(szCmp, 0, MAXPATHLEN);
           while ((ch = getopt(argc, argv, "hs:")) != -1)
                   switch (ch) {
                           case 's':
                                   str[1] = strdup(optarg);
                                   mode = 1;
                                   break;
                           case 'h':
                           default:
                                   Usage();
                                   return 1;
                   }
           argc -= optind;
           argv += optind;
   
           if (argc < 1) {
                   Usage();
                   return 1;
           }
           if (argc > 1) {
                   strlcpy(szCmp, argv[1], MAXPATHLEN);
                   mode |= 2;
           }
   
           if (sync_dirCSum(argv[0], &md[0]) == -1) {
                   printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
                   return 1;
           }
           str[0] = io_Hex2Ch(md[0], MD5_DIGEST_LENGTH);
           if (!str[0]) {
                   free(md[0]);
                   return 1;
           }
           printf("1.Directory '%s': %s\n", argv[0], str[0]);
   
           if (mode & 1 && *str[1]) {
                   ret |= !strcmp((char*) str[0], (char*) str[1]) << 1;
                   printf("Result checksum:: %s %s %s\n\n", str[0], ret & 2 ? "==" : "!=", str[1]);
                   free(str[1]);
           }
   
           if (mode & 2 && *szCmp) {
                   if (sync_dirCSum(szCmp, &md[1]) == -1) {
                           printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
                           return 1;
                   }
                   str[1] = io_Hex2Ch(md[1], MD5_DIGEST_LENGTH);
                   if (!str[1]) {
                           free(md[0]);
                           free(str[0]);
                           free(md[1]);
                           return 1;
                   }
                   printf("2.Directory '%s': %s\n", szCmp, str[1]);
   
                   ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2);
                   printf("Result directory:: %s %s %s\n\n", argv[0], ret & 4 ? "==" : "!=", szCmp);
   
                   if (str[1])
                           free(str[1]);
                   if (md[1])
                           free(md[1]);
           }
   
           if (str[0])
                   free(str[0]);
           if (md[0])
                   free(md[0]);
           return ret;
   }

Removed from v.1.1  
changed lines
  Added in v.1.2


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