Annotation of embedtools/src/direr.c, revision 1.1.2.3

1.1.2.1   misho       1: /*************************************************************************
                      2:  * (C) 2010 AITNET - Sofia/Bulgaria - <office@aitbg.com>
                      3:  *  by Michael Pounov <misho@aitbg.com>
                      4:  *
                      5:  * $Author: misho $
1.1.2.3 ! misho       6:  * $Id: direr.c,v 1.1.2.2 2010/07/13 15:17:58 misho Exp $
1.1.2.1   misho       7:  *
                      8:  *************************************************************************/
                      9: #include "global.h"
                     10: 
                     11: 
                     12: extern char compiled[], compiledby[], compilehost[];
                     13: 
                     14: static void
                     15: Usage()
                     16: {
                     17:        printf( "-= Direr =- Tool for compare directories by checksum\n"
                     18:                "=== %s === %s@%s ===\n\n"
                     19:                "  Syntax: direr [options] <dir> [cmp_dir]\n\n"
                     20:                "\t-s <cksum>\t\tCompare dir with this checksum ...\n"
                     21:                "\n", compiled, compiledby, compilehost);
                     22: }
                     23: 
                     24: int
                     25: main(int argc, char **argv)
                     26: {
                     27:        u_char *md[2], mode = 0;
                     28:        char szCmp[MAXPATHLEN], *str[2], ch;
                     29:        int ret = 0;
                     30: 
                     31:        memset(md, 0, sizeof md);
                     32:        memset(str, 0, sizeof str);
                     33:        memset(szCmp, 0, MAXPATHLEN);
                     34:        while ((ch = getopt(argc, argv, "hs:")) != -1)
                     35:                switch (ch) {
                     36:                        case 's':
                     37:                                str[1] = strdup(optarg);
                     38:                                mode = 1;
                     39:                                break;
                     40:                        case 'h':
                     41:                        default:
                     42:                                Usage();
                     43:                                return 1;
                     44:                }
                     45:        argc -= optind;
                     46:        argv += optind;
                     47: 
                     48:        if (argc < 1) {
                     49:                Usage();
                     50:                return 1;
                     51:        }
                     52:        if (argc > 1) {
                     53:                strlcpy(szCmp, argv[1], MAXPATHLEN);
                     54:                mode |= 2;
                     55:        }
                     56: 
1.1.2.2   misho      57:        if (sync_dirCSum(argv[0], &md[0]) == -1) {
                     58:                printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
1.1.2.1   misho      59:                return 1;
1.1.2.2   misho      60:        }
                     61:        str[0] = io_Hex2Ch(md[0], MD5_DIGEST_LENGTH);
                     62:        if (!str[0]) {
1.1.2.1   misho      63:                free(md[0]);
                     64:                return 1;
                     65:        }
                     66:        printf("1.Directory '%s': %s\n", argv[0], str[0]);
                     67: 
                     68:        if (mode & 1 && *str[1]) {
                     69:                ret |= !strcmp((char*) str[0], (char*) str[1]) << 1;
1.1.2.3 ! misho      70:                printf("Result checksum:: %s %s %s\n\n", str[0], ret & 2 ? "==" : "!=", str[1]);
1.1.2.1   misho      71:                free(str[1]);
                     72:        }
                     73: 
                     74:        if (mode & 2 && *szCmp) {
1.1.2.2   misho      75:                if (sync_dirCSum(szCmp, &md[1]) == -1) {
                     76:                        printf("Error:: %s(%d) #%d - %s\n", __func__, __LINE__, errno, strerror(errno));
1.1.2.1   misho      77:                        return 1;
1.1.2.2   misho      78:                }
                     79:                str[1] = io_Hex2Ch(md[1], MD5_DIGEST_LENGTH);
                     80:                if (!str[1]) {
1.1.2.1   misho      81:                        free(md[0]);
                     82:                        free(str[0]);
                     83:                        free(md[1]);
                     84:                        return 1;
                     85:                }
                     86:                printf("2.Directory '%s': %s\n", szCmp, str[1]);
                     87: 
                     88:                ret |= (!strcmp((char*) str[0], (char*) str[1]) << 2);
1.1.2.3 ! misho      89:                printf("Result directory:: %s %s %s\n\n", argv[0], ret & 4 ? "==" : "!=", szCmp);
1.1.2.1   misho      90: 
                     91:                if (str[1])
                     92:                        free(str[1]);
                     93:                if (md[1])
                     94:                        free(md[1]);
                     95:        }
                     96: 
                     97:        if (str[0])
                     98:                free(str[0]);
                     99:        if (md[0])
                    100:                free(md[0]);
                    101:        return ret;
                    102: }

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