Changeset View
Changeset View
Standalone View
Standalone View
usr.bin/diff/diff.c
| Show First 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | |||||
| static void read_excludes_file(char *file); | static void read_excludes_file(char *file); | ||||
| static void set_argstr(char **, char **); | static void set_argstr(char **, char **); | ||||
| static char *splice(char *, char *); | static char *splice(char *, char *); | ||||
| static bool do_color(void); | static bool do_color(void); | ||||
| int | int | ||||
| main(int argc, char **argv) | main(int argc, char **argv) | ||||
| { | { | ||||
| const char *errstr = NULL; | const char *errstr; | ||||
| char *ep, **oargv; | char **oargv; | ||||
| long l; | |||||
| int ch, dflags, lastch, gotstdin, prevoptind, newarg; | int ch, dflags, lastch, gotstdin, prevoptind, newarg; | ||||
| oargv = argv; | oargv = argv; | ||||
| gotstdin = 0; | gotstdin = 0; | ||||
| dflags = 0; | dflags = 0; | ||||
| lastch = '\0'; | lastch = '\0'; | ||||
| prevoptind = 1; | prevoptind = 1; | ||||
| newarg = 1; | newarg = 1; | ||||
| diff_context = 3; | diff_context = 3; | ||||
| Show All 20 Lines | case 'A': | ||||
| if(strcasecmp(optarg, a->name) == 0) { | if(strcasecmp(optarg, a->name) == 0) { | ||||
| diff_algorithm = a->id; | diff_algorithm = a->id; | ||||
| diff_algorithm_set = true; | diff_algorithm_set = true; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (diff_algorithm == D_DIFFNONE) { | if (diff_algorithm == D_DIFFNONE) { | ||||
| printf("unknown algorithm: %s\n", optarg); | warnx("unknown algorithm: %s", optarg); | ||||
| usage(); | usage(); | ||||
| } | } | ||||
| break; | break; | ||||
| case 'a': | case 'a': | ||||
| dflags |= D_FORCEASCII; | dflags |= D_FORCEASCII; | ||||
| break; | break; | ||||
| case 'b': | case 'b': | ||||
| dflags |= D_FOLDBLANKS; | dflags |= D_FOLDBLANKS; | ||||
| break; | break; | ||||
| case 'C': | case 'C': | ||||
| case 'c': | case 'c': | ||||
| if (FORMAT_MISMATCHED(D_CONTEXT)) | if (FORMAT_MISMATCHED(D_CONTEXT)) | ||||
| conflicting_format(); | conflicting_format(); | ||||
| cflag = true; | cflag = true; | ||||
| diff_format = D_CONTEXT; | diff_format = D_CONTEXT; | ||||
| if (optarg != NULL) { | if (optarg != NULL) { | ||||
| l = strtol(optarg, &ep, 10); | diff_context = (int) strtonum(optarg, | ||||
| if (*ep != '\0' || l < 0 || l >= INT_MAX) | 1, INT_MAX, &errstr); | ||||
| if (errstr != NULL) { | |||||
| warnx("context size is %s: %s", | |||||
| errstr, optarg); | |||||
| usage(); | usage(); | ||||
| diff_context = (int)l; | |||||
| } | } | ||||
| } | |||||
| break; | break; | ||||
| case 'd': | case 'd': | ||||
| dflags |= D_MINIMAL; | dflags |= D_MINIMAL; | ||||
| break; | break; | ||||
| case 'D': | case 'D': | ||||
| if (FORMAT_MISMATCHED(D_IFDEF)) | if (FORMAT_MISMATCHED(D_IFDEF)) | ||||
| conflicting_format(); | conflicting_format(); | ||||
| diff_format = D_IFDEF; | diff_format = D_IFDEF; | ||||
| ▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | case 't': | ||||
| dflags |= D_EXPANDTABS; | dflags |= D_EXPANDTABS; | ||||
| break; | break; | ||||
| case 'U': | case 'U': | ||||
| case 'u': | case 'u': | ||||
| if (FORMAT_MISMATCHED(D_UNIFIED)) | if (FORMAT_MISMATCHED(D_UNIFIED)) | ||||
| conflicting_format(); | conflicting_format(); | ||||
| diff_format = D_UNIFIED; | diff_format = D_UNIFIED; | ||||
| if (optarg != NULL) { | if (optarg != NULL) { | ||||
| l = strtol(optarg, &ep, 10); | diff_context = (int) strtonum(optarg, | ||||
| if (*ep != '\0' || l < 0 || l >= INT_MAX) | 0, INT_MAX, &errstr); | ||||
| if (errstr != NULL) { | |||||
| warnx("context size is %s: %s", | |||||
| errstr, optarg); | |||||
| usage(); | usage(); | ||||
| diff_context = (int)l; | |||||
| } | } | ||||
| } | |||||
| break; | break; | ||||
| case 'w': | case 'w': | ||||
| dflags |= D_IGNOREBLANKS; | dflags |= D_IGNOREBLANKS; | ||||
| break; | break; | ||||
| case 'W': | case 'W': | ||||
| width = (int) strtonum(optarg, 1, INT_MAX, &errstr); | width = (int) strtonum(optarg, 1, INT_MAX, &errstr); | ||||
| if (errstr) { | if (errstr != NULL) { | ||||
| warnx("Invalid argument for width"); | warnx("width is %s: %s", errstr, optarg); | ||||
| usage(); | usage(); | ||||
| } | } | ||||
| break; | break; | ||||
| case 'X': | case 'X': | ||||
| read_excludes_file(optarg); | read_excludes_file(optarg); | ||||
| break; | break; | ||||
| case 'x': | case 'x': | ||||
| push_excludes(optarg); | push_excludes(optarg); | ||||
| Show All 23 Lines | case OPT_NO_IGN_FN_CASE: | ||||
| break; | break; | ||||
| case OPT_NORMAL: | case OPT_NORMAL: | ||||
| if (FORMAT_MISMATCHED(D_NORMAL)) | if (FORMAT_MISMATCHED(D_NORMAL)) | ||||
| conflicting_format(); | conflicting_format(); | ||||
| diff_format = D_NORMAL; | diff_format = D_NORMAL; | ||||
| break; | break; | ||||
| case OPT_TSIZE: | case OPT_TSIZE: | ||||
| tabsize = (int) strtonum(optarg, 1, INT_MAX, &errstr); | tabsize = (int) strtonum(optarg, 1, INT_MAX, &errstr); | ||||
| if (errstr) { | if (errstr != NULL) { | ||||
| warnx("Invalid argument for tabsize"); | warnx("tabsize is %s: %s", errstr, optarg); | ||||
| usage(); | usage(); | ||||
| } | } | ||||
| break; | break; | ||||
| case OPT_STRIPCR: | case OPT_STRIPCR: | ||||
| dflags |= D_STRIPCR; | dflags |= D_STRIPCR; | ||||
| break; | break; | ||||
| case OPT_SUPPRESS_COMMON: | case OPT_SUPPRESS_COMMON: | ||||
| suppress_common = 1; | suppress_common = 1; | ||||
| break; | break; | ||||
| case OPT_COLOR: | case OPT_COLOR: | ||||
| if (optarg == NULL || strncmp(optarg, "auto", 4) == 0) | if (optarg == NULL || strncmp(optarg, "auto", 4) == 0) | ||||
| colorflag = COLORFLAG_AUTO; | colorflag = COLORFLAG_AUTO; | ||||
| else if (strncmp(optarg, "always", 6) == 0) | else if (strncmp(optarg, "always", 6) == 0) | ||||
| colorflag = COLORFLAG_ALWAYS; | colorflag = COLORFLAG_ALWAYS; | ||||
| else if (strncmp(optarg, "never", 5) == 0) | else if (strncmp(optarg, "never", 5) == 0) | ||||
| colorflag = COLORFLAG_NEVER; | colorflag = COLORFLAG_NEVER; | ||||
| else | else { | ||||
| errx(2, "unsupported --color value '%s' (must be always, auto, or never)", | warnx("unsupported --color value " | ||||
| optarg); | "(must be always, auto, or never): " | ||||
| "%s", optarg); | |||||
| usage(); | |||||
| } | |||||
| break; | break; | ||||
| case OPT_NO_DEREFERENCE: | case OPT_NO_DEREFERENCE: | ||||
| noderef = true; | noderef = true; | ||||
| break; | break; | ||||
| case OPT_VERSION: | case OPT_VERSION: | ||||
| printf("%s\n", diff_version); | printf("%s\n", diff_version); | ||||
| exit(0); | exit(0); | ||||
| default: | default: | ||||
| ▲ Show 20 Lines • Show All 313 Lines • Show Last 20 Lines | |||||