fast replace if src outside
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)
| @@ -1,5 +1,5 @@ | |
| /* | |
| - | * Another fast dependencies generator for Makefiles, Version 2.4 |
| + | * Another fast dependencies generator for Makefiles, Version 2.5 |
| * | |
| * Copyright (C) 2005 by Vladimir Oleynik <[email protected]> | |
| * mmaping file may be originally by Linus Torvalds. | |
| @@ -97,7 +97,11 @@ static void parse_conf_opt(const char *opt, const char *val, | |
| static char first_chars[257]; /* + L_EOF */ | |
| static char isalnums[257]; /* + L_EOF */ | |
| /* trick for fast find "define", "include", "undef" */ | |
| - | static char first_chars_diu[256]; |
| + | static char first_chars_diu[256] = { |
| + | [(int)'d'] = (char)5, /* strlen("define") - 1; */ |
| + | [(int)'i'] = (char)6, /* strlen("include") - 1; */ |
| + | [(int)'u'] = (char)4, /* strlen("undef") - 1; */ |
| + | }; |
| static int pagesizem1; | |
| static size_t mema_id = 128; /* first allocated for id */ | |
| @@ -136,7 +140,6 @@ static char *id_s; | |
| id[id_len++] = c; } while(0) | |
| - | |
| /* stupid C lexical analyser */ | |
| static void c_lex(const char *fname, long fsize) | |
| { | |
| @@ -605,14 +608,19 @@ static void parse_conf_opt(const char *opt, const char *val, | |
| } | |
| } | |
| - | static int show_dep(int first, bb_key_t *k, const char *name) |
| + | static char *pwd; |
| + | |
| + | static int show_dep(int first, bb_key_t *k, const char *name, const char *f) |
| { | |
| bb_key_t *cur; | |
| for(cur = k; cur; cur = cur->next) { | |
| if(cur->checked) { | |
| if(first) { | |
| - | printf("\n%s:", name); |
| + | if(f == NULL) |
| + | printf("\n%s:", name); |
| + | else |
| + | printf("\n%s/%s:", pwd, name); |
| first = 0; | |
| } else { | |
| printf(" \\\n "); | |
| @@ -624,8 +632,7 @@ static int show_dep(int first, bb_key_t *k, const char *name) | |
| return first; | |
| } | |
| - | static char *pwd; |
| - | static char *replace; |
| + | static size_t replace; |
| static struct stat st_kp; | |
| static int dontgenerate_dep; | |
| @@ -673,23 +680,17 @@ parse_chd(const char *fe, const char *p, size_t dirlen) | |
| if(*e == 'c') { | |
| /* *.c -> *.o */ | |
| *e = 'o'; | |
| - | if(replace) { |
| - | /* /src_dir/path/file.o to path/file.o */ |
| - | e = fp + strlen(replace); |
| - | while(*e == '/') |
| - | e++; |
| - | /* path/file.o to pwd/path/file.o */ |
| - | e = fp = bb_asprint("%s/%s", pwd, e); |
| - | } |
| + | /* /src_dir/path/file.o to path/file.o */ |
| + | fp += replace; |
| + | if(*fp == '/') |
| + | fp++; |
| } else { | |
| e = NULL; | |
| } | |
| - | first = show_dep(1, Ifound, fp); |
| - | first = show_dep(first, key_top, fp); |
| + | first = show_dep(1, Ifound, fp, e); |
| + | first = show_dep(first, key_top, fp, e); |
| if(first == 0) | |
| putchar('\n'); | |
| - | if(replace && e) |
| - | free(e); |
| } | |
| return NULL; | |
| } else if(S_ISDIR(st.st_mode)) { | |
| @@ -726,10 +727,7 @@ static void scan_dir_find_ch_files(const char *p) | |
| size_t dirlen; | |
| dirs = llist_add_to(NULL, bb_simplify_path(p)); | |
| - | if(strcmp(dirs->data, pwd)) |
| - | replace = bb_xstrdup(dirs->data); |
| - | else |
| - | replace = NULL; |
| + | replace = strlen(dirs->data); |
| /* emulate recursive */ | |
| while(dirs) { | |
| d_add = NULL; | |
| @@ -755,8 +753,6 @@ static void scan_dir_find_ch_files(const char *p) | |
| } | |
| dirs = d_add; | |
| } | |
| - | free(replace); |
| - | replace = NULL; |
| } | |
| @@ -832,10 +828,6 @@ int main(int argc, char **argv) | |
| first_chars[i] = ANY; | |
| } | |
| first_chars[i] = '-'; /* L_EOF */ | |
| - | /* trick for fast find "define", "include", "undef" */ |
| - | first_chars_diu[(int)'d'] = (char)5; /* strlen("define") - 1; */ |
| - | first_chars_diu[(int)'i'] = (char)6; /* strlen("include") - 1; */ |
| - | first_chars_diu[(int)'u'] = (char)4; /* strlen("undef") - 1; */ |
| /* parse configs */ | |
| for(fl = configs; fl; fl = fl->link) { | |