- patch from Rob Sullivan to add support for -L
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -88,15 +88,16 @@ static unsigned long cmd_flags; | |
| #define FLAG_b (1<<1) | |
| #define FLAG_d (1<<2) | |
| #define FLAG_i (1<<3) | |
| - | #define FLAG_N (1<<4) |
| - | #define FLAG_q (1<<5) |
| - | #define FLAG_r (1<<6) |
| - | #define FLAG_s (1<<7) |
| - | #define FLAG_S (1<<8) |
| - | #define FLAG_t (1<<9) |
| - | #define FLAG_T (1<<10) |
| - | #define FLAG_U (1<<11) |
| - | #define FLAG_w (1<<12) |
| + | #define FLAG_L (1<<4) |
| + | #define FLAG_N (1<<5) |
| + | #define FLAG_q (1<<6) |
| + | #define FLAG_r (1<<7) |
| + | #define FLAG_s (1<<8) |
| + | #define FLAG_S (1<<9) |
| + | #define FLAG_t (1<<10) |
| + | #define FLAG_T (1<<11) |
| + | #define FLAG_U (1<<12) |
| + | #define FLAG_w (1<<13) |
| int context, status; | |
| char *start, *label[2]; | |
| @@ -376,7 +377,6 @@ static int isqrt(int n) { | |
| return (x); | |
| } | |
| - | |
| static int newcand(int x, int y, int pred) | |
| { | |
| struct cand *q; | |
| @@ -422,10 +422,10 @@ static int stone(int *a, int n, int *b, int *c) | |
| int i, k, y, j, l; | |
| int oldc, tc, oldl; | |
| u_int numtries; | |
| - | #ifdef CONFIG_FEATURE_DIFF_MINIMAL |
| - | const u_int bound = (cmd_flags & FLAG_d) ? UINT_MAX : MAX(256, isqrt(n)); |
| + | #if ENABLE_FEATURE_DIFF_MINIMAL |
| + | const u_int bound = (cmd_flags & FLAG_d) ? UINT_MAX : MAX(256, isqrt(n)); |
| #else | |
| - | const u_int bound = MAX(256, isqrt(n)); |
| + | const u_int bound = MAX(256, isqrt(n)); |
| #endif | |
| k = 0; | |
| c[0] = newcand(0, 0, 0); | |
| @@ -672,7 +672,7 @@ static int fetch(long *f, int a, int b, FILE *lb, int ch) | |
| static int asciifile(FILE *f) | |
| { | |
| - | #ifdef CONFIG_FEATURE_DIFF_BINARY |
| + | #if ENABLE_FEATURE_DIFF_BINARY |
| unsigned char buf[BUFSIZ]; | |
| int i, cnt; | |
| #endif | |
| @@ -680,14 +680,16 @@ static int asciifile(FILE *f) | |
| if ((cmd_flags & FLAG_a) || f == NULL) | |
| return (1); | |
| - | #ifdef CONFIG_FEATURE_DIFF_BINARY |
| + | #if ENABLE_FEATURE_DIFF_BINARY |
| rewind(f); | |
| - | cnt = fread(buf, 1, sizeof(buf), f); |
| - | for (i = 0; i < cnt; i++) |
| - | if (!isprint(buf[i]) && !isspace(buf[i])) |
| - | return (0); |
| + | cnt = fread(buf, 1, sizeof(buf), f); |
| + | for (i = 0; i < cnt; i++) { |
| + | if (!isprint(buf[i]) && !isspace(buf[i])) { |
| + | return (0); |
| + | } |
| + | } |
| #endif | |
| - | return (1); |
| + | return (1); |
| } | |
| /* dump accumulated "unified" diff changes */ | |
| @@ -837,7 +839,10 @@ static void change(char *file1, FILE *f1, char *file2, FILE *f2, int a, int b, i | |
| static void output(char *file1, FILE *f1, char *file2, FILE *f2) | |
| { | |
| - | int m, i0, i1, j0, j1; |
| + | |
| + | /* Note that j0 and j1 can't be used as they are defined in math.h. |
| + | * This also allows the rather amusing variable 'j00'... */ |
| + | int m, i0, i1, j00, j01; |
| rewind(f1); | |
| rewind(f2); | |
| @@ -847,13 +852,13 @@ static void output(char *file1, FILE *f1, char *file2, FILE *f2) | |
| for (i0 = 1; i0 <= m; i0 = i1 + 1) { | |
| while (i0 <= m && J[i0] == J[i0 - 1] + 1) | |
| i0++; | |
| - | j0 = J[i0 - 1] + 1; |
| + | j00 = J[i0 - 1] + 1; |
| i1 = i0 - 1; | |
| while (i1 < m && J[i1 + 1] == 0) | |
| i1++; | |
| - | j1 = J[i1 + 1] - 1; |
| - | J[i1] = j1; |
| - | change(file1, f1, file2, f2, i0, i1, j0, j1); |
| + | j01 = J[i1 + 1] - 1; |
| + | J[i1] = j01; |
| + | change(file1, f1, file2, f2, i0, i1, j00, j01); |
| } | |
| if (m == 0) { | |
| change(file1, f1, file2, f2, 1, 0, 1, len[1]); | |
| @@ -1064,7 +1069,7 @@ static void do_diff (char *dir1, char *path1, char *dir2, char *path2) { | |
| } | |
| #endif | |
| - | #ifdef CONFIG_FEATURE_DIFF_DIR |
| + | #if ENABLE_FEATURE_DIFF_DIR |
| static int dir_strcmp(const void *p1, const void *p2) { | |
| return strcmp(*(char * const *)p1, *(char * const *)p2); | |
| } | |
| @@ -1196,13 +1201,36 @@ static void diffdir (char *p1, char *p2) { | |
| - | extern int diff_main(int argc, char **argv) { |
| - | char *ep; |
| - | int gotstdin = 0; |
| + | int diff_main(int argc, char **argv) { |
| + | char *ep; |
| + | int gotstdin = 0; |
| char *U_opt; | |
| - | cmd_flags = bb_getopt_ulflags(argc, argv, "abdiNqrsS:tTU:wu", &start, &U_opt); |
| - | |
| + | llist_t *L_arg = NULL; |
| + | bb_opt_complementally = "L::"; |
| + | cmd_flags = bb_getopt_ulflags(argc, argv, "abdiL:NqrsS:tTU:wu", &L_arg, &start, &U_opt); |
| + | |
| + | if (cmd_flags & FLAG_L) { |
| + | while (L_arg) { |
| + | if (label[0] == NULL) |
| + | label[0] = L_arg->data; |
| + | else if (label[1] == NULL) |
| + | label[1] = L_arg->data; |
| + | else |
| + | bb_show_usage(); |
| + | |
| + | L_arg = L_arg->link; |
| + | } |
| + | |
| + | /* If both label[0] and label[1] were set, they need to be swapped. */ |
| + | if (label[0] && label[1]) { |
| + | char *tmp; |
| + | tmp = label[1]; |
| + | label[1] = label[0]; |
| + | label[0] = tmp; |
| + | } |
| + | } |
| + | |
| context = 3; /* This is the default number of lines of context. */ | |
| if (cmd_flags & FLAG_U) { | |
| context = strtol(U_opt, &ep, 10); | |
| @@ -1235,23 +1263,23 @@ extern int diff_main(int argc, char **argv) { | |
| if (gotstdin && (S_ISDIR(stb1.st_mode) || S_ISDIR(stb2.st_mode))) | |
| bb_error_msg_and_die("Can't compare - to a directory"); | |
| if (S_ISDIR(stb1.st_mode) && S_ISDIR(stb2.st_mode)) { | |
| - | #ifdef CONFIG_FEATURE_DIFF_DIR |
| + | #if ENABLE_FEATURE_DIFF_DIR |
| diffdir(argv[0], argv[1]); | |
| #else | |
| bb_error_msg_and_die("Directory comparison not supported"); | |
| #endif | |
| } | |
| - | else { |
| + | else { |
| if (S_ISDIR(stb1.st_mode)) { | |
| argv[0] = concat_path_file(argv[0], argv[1]); | |
| if (stat(argv[0], &stb1) < 0) | |
| bb_perror_msg_and_die("Couldn't stat %s", argv[0]); | |
| - | } |
| - | if (S_ISDIR(stb2.st_mode)) { |
| + | } |
| + | if (S_ISDIR(stb2.st_mode)) { |
| argv[1] = concat_path_file(argv[1], argv[0]); | |
| if (stat(argv[1], &stb2) < 0) | |
| bb_perror_msg_and_die("Couldn't stat %s", argv[1]); | |
| - | } |
| + | } |
| print_status(diffreg(argv[0], argv[1], 0), argv[0], argv[1], NULL); | |
| } | |
| exit(status); | |
| @@ -454,7 +454,7 @@ | |
| "/dev/sda3 8690864 8553540 137324 98% /\n" | |
| #define diff_trivial_usage \ | |
| - | "[-abdiNqrTstw] [-S FILE] [-U LINES] FILE1 FILE2" |
| + | "[-abdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2" |
| #define diff_full_usage \ | |
| "Compare files line by line and output the differences between them.\n" \ | |
| "This diff implementation only supports unified diffs.\n\n" \ | |
| @@ -463,6 +463,7 @@ | |
| "\t-b\tIgnore changes in the amount of whitespace\n" \ | |
| "\t-d\tTry hard to find a smaller set of changes\n" \ | |
| "\t-i\tIgnore case differences\n" \ | |
| + | "\t-L\tUse LABEL instead of the filename in the unified header\n" \ |
| "\t-N\tTreat absent files as empty\n" \ | |
| "\t-q\tOutput only whether files differ\n" \ | |
| "\t-r\tRecursively compare any subdirectories\n" \ | |