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

version 1.1, 2010/07/13 09:35:01 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( "-= DirCmp =- Tool for compare directories and show differences\n"
                   "=== %s === %s@%s ===\n\n"
                   "  Syntax: dircmp [options] <dir> [<cmp_dir>]\n\n"
                   "\t-l\t\tLong directory output ...\n"
                   "\t-o <filename>\tOutput diff to filename\n"
                   "\n", compiled, compiledby, compilehost);
   }
   
   int
   main(int argc, char **argv)
   {
           char ch, szFName[MAXPATHLEN];
           int lm = 0;
           struct tagDirName *list;
           register int i;
           FILE *f = stdout;
           struct stat sb;
   
           while ((ch = getopt(argc, argv, "hlo:")) != -1)
                   switch (ch) {
                           case 'o':
                                   lm |= 2;
                                   strlcpy(szFName, optarg, MAXPATHLEN);
                                   break;
                           case 'l':
                                   lm |= 1;
                                   break;
                           case 'h':
                           default:
                                   Usage();
                                   return 127;
                   }
           argc -= optind;
           argv += optind;
   
           if (!argc || (!(lm & 2) && argc < 2)) {
                   Usage();
                   return 127;
           }
           // check for general differences
           if (argc > 1) {
                   if (lstat(argv[1], &sb) == -1) {
                           printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
                           return 127;
                   }
   
                   if (S_ISDIR(sb.st_mode))
                           switch (sync_dircmp(argv[0], argv[1])) {
                                   case -1:
                                           printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
                                           return 127;
                                   case 0:
                                           printf("Directory %s == %s\n\n", argv[0], argv[1]);
                                           return 0;
                                   case 1:
                                           printf("Directory %s != %s ::\n\n", argv[0], argv[1]);
                           }
           }
   
           if (sync_dircmpList(argv[0], argc > 1 ? argv[1] : NULL, lm, &list) == -1) {
                   printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, sync_GetErrno(), sync_GetError());
                   return 127;
           }
   
           if (lm & 2 && strcmp(szFName, "-")) {
                   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++)
                   fprintf(f, "%c  %s %s\n", list[i].ch, list[i].name, list[i].extra);
           if (lm & 2)
                   fclose(f);
   
           printf("\nTotal count of elements = %d\n", i);
           free(list);
           return 1;
   }

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


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