/************************************************************************* * (C) 2010 AITNET - Sofia/Bulgaria - * by Michael Pounov * * $Author: misho $ * $Id: dircmp.c,v 1.2 2011/06/08 12:45:41 misho Exp $ * *************************************************************************/ #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] []\n\n" "\t-l\t\tLong directory output ...\n" "\t-o \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; }