diff options
| -rw-r--r-- | meta/recipes-core/busybox/busybox/find-get-rid-of-nested-functions.patch | 117 | ||||
| -rw-r--r-- | meta/recipes-core/busybox/busybox_1.21.1.bb | 1 |
2 files changed, 118 insertions, 0 deletions
diff --git a/meta/recipes-core/busybox/busybox/find-get-rid-of-nested-functions.patch b/meta/recipes-core/busybox/busybox/find-get-rid-of-nested-functions.patch new file mode 100644 index 0000000000..d66ef79cf0 --- /dev/null +++ b/meta/recipes-core/busybox/busybox/find-get-rid-of-nested-functions.patch | |||
| @@ -0,0 +1,117 @@ | |||
| 1 | Upstream-Status: Accepted | ||
| 2 | |||
| 3 | commit 6db5f679a21342249e6a6eb06ec70a337bf0d0b0 | ||
| 4 | Author: Denys Vlasenko <vda.linux@googlemail.com> | ||
| 5 | Date: Thu May 16 18:36:42 2013 +0200 | ||
| 6 | |||
| 7 | find:: get rid of nested function (it's a gcc-ism) | ||
| 8 | |||
| 9 | function old new delta | ||
| 10 | alloc_action - 80 +80 | ||
| 11 | parse_params 1459 1445 -14 | ||
| 12 | static.alloc_action 98 - -98 | ||
| 13 | |||
| 14 | (add/remove: 1/1 grow/shrink: 0/1 up/down: 80/-112) Total: -32 bytes | ||
| 15 | |||
| 16 | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> | ||
| 17 | |||
| 18 | diff --git a/findutils/find.c b/findutils/find.c | ||
| 19 | index d4b7c8e..af913cc 100644 | ||
| 20 | --- a/findutils/find.c | ||
| 21 | +++ b/findutils/find.c | ||
| 22 | @@ -815,6 +815,31 @@ static const char* plus_minus_num(const char* str) | ||
| 23 | } | ||
| 24 | #endif | ||
| 25 | |||
| 26 | +/* Say no to GCCism */ | ||
| 27 | +#define USE_NESTED_FUNCTION 0 | ||
| 28 | + | ||
| 29 | +#if !USE_NESTED_FUNCTION | ||
| 30 | +struct pp_locals { | ||
| 31 | + action*** appp; | ||
| 32 | + unsigned cur_group; | ||
| 33 | + unsigned cur_action; | ||
| 34 | + IF_FEATURE_FIND_NOT( bool invert_flag; ) | ||
| 35 | +}; | ||
| 36 | +static action* alloc_action(struct pp_locals *ppl, int sizeof_struct, action_fp f) | ||
| 37 | +{ | ||
| 38 | + action *ap = xzalloc(sizeof_struct); | ||
| 39 | + action **app; | ||
| 40 | + action ***group = &ppl->appp[ppl->cur_group]; | ||
| 41 | + *group = app = xrealloc(*group, (ppl->cur_action+2) * sizeof(ppl->appp[0][0])); | ||
| 42 | + app[ppl->cur_action++] = ap; | ||
| 43 | + app[ppl->cur_action] = NULL; | ||
| 44 | + ap->f = f; | ||
| 45 | + IF_FEATURE_FIND_NOT( ap->invert = ppl->invert_flag; ) | ||
| 46 | + IF_FEATURE_FIND_NOT( ppl->invert_flag = 0; ) | ||
| 47 | + return ap; | ||
| 48 | +} | ||
| 49 | +#endif | ||
| 50 | + | ||
| 51 | static action*** parse_params(char **argv) | ||
| 52 | { | ||
| 53 | enum { | ||
| 54 | @@ -901,10 +926,18 @@ static action*** parse_params(char **argv) | ||
| 55 | IF_FEATURE_FIND_MAXDEPTH("-mindepth\0""-maxdepth\0") | ||
| 56 | ; | ||
| 57 | |||
| 58 | +#if !USE_NESTED_FUNCTION | ||
| 59 | + struct pp_locals ppl; | ||
| 60 | +#define appp (ppl.appp ) | ||
| 61 | +#define cur_group (ppl.cur_group ) | ||
| 62 | +#define cur_action (ppl.cur_action ) | ||
| 63 | +#define invert_flag (ppl.invert_flag) | ||
| 64 | +#define ALLOC_ACTION(name) (action_##name*)alloc_action(&ppl, sizeof(action_##name), (action_fp) func_##name) | ||
| 65 | +#else | ||
| 66 | action*** appp; | ||
| 67 | - unsigned cur_group = 0; | ||
| 68 | - unsigned cur_action = 0; | ||
| 69 | - IF_FEATURE_FIND_NOT( bool invert_flag = 0; ) | ||
| 70 | + unsigned cur_group; | ||
| 71 | + unsigned cur_action; | ||
| 72 | + IF_FEATURE_FIND_NOT( bool invert_flag; ) | ||
| 73 | |||
| 74 | /* This is the only place in busybox where we use nested function. | ||
| 75 | * So far more standard alternatives were bigger. */ | ||
| 76 | @@ -913,7 +946,7 @@ static action*** parse_params(char **argv) | ||
| 77 | action* alloc_action(int sizeof_struct, action_fp f) | ||
| 78 | { | ||
| 79 | action *ap; | ||
| 80 | - appp[cur_group] = xrealloc(appp[cur_group], (cur_action+2) * sizeof(*appp)); | ||
| 81 | + appp[cur_group] = xrealloc(appp[cur_group], (cur_action+2) * sizeof(appp[0][0])); | ||
| 82 | appp[cur_group][cur_action++] = ap = xzalloc(sizeof_struct); | ||
| 83 | appp[cur_group][cur_action] = NULL; | ||
| 84 | ap->f = f; | ||
| 85 | @@ -921,9 +954,12 @@ static action*** parse_params(char **argv) | ||
| 86 | IF_FEATURE_FIND_NOT( invert_flag = 0; ) | ||
| 87 | return ap; | ||
| 88 | } | ||
| 89 | - | ||
| 90 | #define ALLOC_ACTION(name) (action_##name*)alloc_action(sizeof(action_##name), (action_fp) func_##name) | ||
| 91 | +#endif | ||
| 92 | |||
| 93 | + cur_group = 0; | ||
| 94 | + cur_action = 0; | ||
| 95 | + IF_FEATURE_FIND_NOT( invert_flag = 0; ) | ||
| 96 | appp = xzalloc(2 * sizeof(appp[0])); /* appp[0],[1] == NULL */ | ||
| 97 | |||
| 98 | while (*argv) { | ||
| 99 | @@ -988,7 +1024,7 @@ static action*** parse_params(char **argv) | ||
| 100 | dbg("%d", __LINE__); | ||
| 101 | /* start new OR group */ | ||
| 102 | cur_group++; | ||
| 103 | - appp = xrealloc(appp, (cur_group+2) * sizeof(*appp)); | ||
| 104 | + appp = xrealloc(appp, (cur_group+2) * sizeof(appp[0])); | ||
| 105 | /*appp[cur_group] = NULL; - already NULL */ | ||
| 106 | appp[cur_group+1] = NULL; | ||
| 107 | cur_action = 0; | ||
| 108 | @@ -1246,6 +1282,9 @@ static action*** parse_params(char **argv) | ||
| 109 | dbg("exiting %s", __func__); | ||
| 110 | return appp; | ||
| 111 | #undef ALLOC_ACTION | ||
| 112 | +#undef appp | ||
| 113 | +#undef cur_action | ||
| 114 | +#undef invert_flag | ||
| 115 | } | ||
| 116 | |||
| 117 | int find_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | ||
diff --git a/meta/recipes-core/busybox/busybox_1.21.1.bb b/meta/recipes-core/busybox/busybox_1.21.1.bb index 8b91e6329d..267604afa3 100644 --- a/meta/recipes-core/busybox/busybox_1.21.1.bb +++ b/meta/recipes-core/busybox/busybox_1.21.1.bb | |||
| @@ -34,6 +34,7 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \ | |||
| 34 | file://login-utilities.cfg \ | 34 | file://login-utilities.cfg \ |
| 35 | file://busybox-list-suid-and-non-suid-app-configs.patch \ | 35 | file://busybox-list-suid-and-non-suid-app-configs.patch \ |
| 36 | file://busybox-sed-fix-sed-clusternewline-testcase.patch \ | 36 | file://busybox-sed-fix-sed-clusternewline-testcase.patch \ |
| 37 | file://find-get-rid-of-nested-functions.patch \ | ||
| 37 | " | 38 | " |
| 38 | 39 | ||
| 39 | SRC_URI[tarball.md5sum] = "795394f83903b5eec6567d51eebb417e" | 40 | SRC_URI[tarball.md5sum] = "795394f83903b5eec6567d51eebb417e" |
