version 1.52, 2009/06/06 15:37:28 |
version 1.53, 2009/06/07 08:39:13 |
|
|
#include "xmalloc.h" |
#include "xmalloc.h" |
|
|
int lflag, Nflag, Pflag, rflag, sflag, Tflag; |
int lflag, Nflag, Pflag, rflag, sflag, Tflag; |
int format, context, status; |
int diff_format, diff_context, status; |
char *start, *ifdefname, *diffargs, *label[2], *ignore_pats; |
char *start, *ifdefname, *diffargs, *label[2], *ignore_pats; |
struct stat stb1, stb2; |
struct stat stb1, stb2; |
struct excludes *excludes_list; |
struct excludes *excludes_list; |
|
|
if (newarg) |
if (newarg) |
usage(); /* disallow -[0-9]+ */ |
usage(); /* disallow -[0-9]+ */ |
else if (lastch == 'c' || lastch == 'u') |
else if (lastch == 'c' || lastch == 'u') |
context = 0; |
diff_context = 0; |
else if (!isdigit(lastch) || context > INT_MAX / 10) |
else if (!isdigit(lastch) || diff_context > INT_MAX / 10) |
usage(); |
usage(); |
context = (context * 10) + (ch - '0'); |
diff_context = (diff_context * 10) + (ch - '0'); |
break; |
break; |
case 'a': |
case 'a': |
dflags |= D_FORCEASCII; |
dflags |= D_FORCEASCII; |
|
|
break; |
break; |
case 'C': |
case 'C': |
case 'c': |
case 'c': |
format = D_CONTEXT; |
diff_format = D_CONTEXT; |
if (optarg != NULL) { |
if (optarg != NULL) { |
l = strtol(optarg, &ep, 10); |
l = strtol(optarg, &ep, 10); |
if (*ep != '\0' || l < 0 || l >= INT_MAX) |
if (*ep != '\0' || l < 0 || l >= INT_MAX) |
usage(); |
usage(); |
context = (int)l; |
diff_context = (int)l; |
} else |
} else |
context = 3; |
diff_context = 3; |
break; |
break; |
case 'd': |
case 'd': |
dflags |= D_MINIMAL; |
dflags |= D_MINIMAL; |
break; |
break; |
case 'D': |
case 'D': |
format = D_IFDEF; |
diff_format = D_IFDEF; |
ifdefname = optarg; |
ifdefname = optarg; |
break; |
break; |
case 'e': |
case 'e': |
format = D_EDIT; |
diff_format = D_EDIT; |
break; |
break; |
case 'f': |
case 'f': |
format = D_REVERSE; |
diff_format = D_REVERSE; |
break; |
break; |
case 'h': |
case 'h': |
/* silently ignore for backwards compatibility */ |
/* silently ignore for backwards compatibility */ |
|
|
Nflag = 1; |
Nflag = 1; |
break; |
break; |
case 'n': |
case 'n': |
format = D_NREVERSE; |
diff_format = D_NREVERSE; |
break; |
break; |
case 'p': |
case 'p': |
dflags |= D_PROTOTYPE; |
dflags |= D_PROTOTYPE; |
|
|
rflag = 1; |
rflag = 1; |
break; |
break; |
case 'q': |
case 'q': |
format = D_BRIEF; |
diff_format = D_BRIEF; |
break; |
break; |
case 'S': |
case 'S': |
start = optarg; |
start = optarg; |
|
|
break; |
break; |
case 'U': |
case 'U': |
case 'u': |
case 'u': |
format = D_UNIFIED; |
diff_format = D_UNIFIED; |
if (optarg != NULL) { |
if (optarg != NULL) { |
l = strtol(optarg, &ep, 10); |
l = strtol(optarg, &ep, 10); |
if (*ep != '\0' || l < 0 || l >= INT_MAX) |
if (*ep != '\0' || l < 0 || l >= INT_MAX) |
usage(); |
usage(); |
context = (int)l; |
diff_context = (int)l; |
} else |
} else |
context = 3; |
diff_context = 3; |
break; |
break; |
case 'w': |
case 'w': |
dflags |= D_IGNOREBLANKS; |
dflags |= D_IGNOREBLANKS; |
|
|
errx(2, "can't compare - to a directory"); |
errx(2, "can't compare - to a directory"); |
set_argstr(oargv, argv); |
set_argstr(oargv, argv); |
if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) { |
if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) { |
if (format == D_IFDEF) |
if (diff_format == D_IFDEF) |
errx(2, "-D option not supported with directories"); |
errx(2, "-D option not supported with directories"); |
diffdir(argv[0], argv[1], dflags); |
diffdir(argv[0], argv[1], dflags); |
} else { |
} else { |
|
|
path1, entry ? entry : "", path2, entry ? entry : ""); |
path1, entry ? entry : "", path2, entry ? entry : ""); |
break; |
break; |
case D_DIFFER: |
case D_DIFFER: |
if (format == D_BRIEF) |
if (diff_format == D_BRIEF) |
printf("Files %s%s and %s%s differ\n", |
printf("Files %s%s and %s%s differ\n", |
path1, entry ? entry : "", |
path1, entry ? entry : "", |
path2, entry ? entry : ""); |
path2, entry ? entry : ""); |