better shared strings trick
No binary (build failed)
—
(log yok)
| @@ -1573,12 +1573,22 @@ void bb_progress_update(bb_progress_t *p, const char *curfile, | |
| off_t totalsize) FAST_FUNC; | |
| extern const char *applet_name; | |
| + | |
| + | /* Some older linkers don't perform string merging, we used to have common strings |
| + | * as global arrays to do it by hand. But: |
| + | * (1) newer linkers do it themselves, |
| + | * (2) however, they DONT merge string constants with global arrays, |
| + | * even if the value is the same (!). Thus global arrays actually |
| + | * increased size a bit: for example, "/etc/passwd" string from libc |
| + | * wasn't merged with bb_path_passwd_file[] array! |
| + | * Therefore now we use #defines. |
| + | */ |
| /* "BusyBox vN.N.N (timestamp or extra_version)" */ | |
| extern const char bb_banner[]; | |
| extern const char bb_msg_memory_exhausted[]; | |
| extern const char bb_msg_invalid_date[]; | |
| - | extern const char bb_msg_read_error[]; |
| - | extern const char bb_msg_write_error[]; |
| + | #define bb_msg_read_error "read error" |
| + | #define bb_msg_write_error "write error" |
| extern const char bb_msg_unknown[]; | |
| extern const char bb_msg_can_not_create_raw_socket[]; | |
| extern const char bb_msg_perm_denied_are_you_root[]; | |
| @@ -1588,18 +1598,23 @@ extern const char bb_msg_invalid_arg[]; | |
| extern const char bb_msg_standard_input[]; | |
| extern const char bb_msg_standard_output[]; | |
| - | extern const char bb_str_default[]; |
| /* NB: (bb_hexdigits_upcase[i] | 0x20) -> lowercase hex digit */ | |
| extern const char bb_hexdigits_upcase[]; | |
| - | extern const char bb_path_mtab_file[]; |
| - | extern const char bb_path_passwd_file[]; |
| - | extern const char bb_path_shadow_file[]; |
| - | extern const char bb_path_gshadow_file[]; |
| - | extern const char bb_path_group_file[]; |
| - | extern const char bb_path_motd_file[]; |
| extern const char bb_path_wtmp_file[]; | |
| - | extern const char bb_dev_null[]; |
| + | |
| + | /* Busybox mount uses either /proc/mounts or /etc/mtab to |
| + | * get the list of currently mounted filesystems */ |
| + | #define bb_path_mtab_file IF_FEATURE_MTAB_SUPPORT("/etc/mtab")IF_NOT_FEATURE_MTAB_SUPPORT("/proc/mounts") |
| + | |
| + | #define bb_path_passwd_file "/etc/passwd" |
| + | #define bb_path_shadow_file "/etc/shadow" |
| + | #define bb_path_gshadow_file "/etc/gshadow" |
| + | #define bb_path_group_file "/etc/group" |
| + | |
| + | #define bb_path_motd_file "/etc/motd" |
| + | |
| + | #define bb_dev_null "/dev/null" |
| extern const char bb_busybox_exec_path[]; | |
| /* util-linux manpage says /sbin:/bin:/usr/sbin:/usr/bin, | |
| * but I want to save a few bytes here */ | |
| @@ -64,7 +64,6 @@ lib-y += md5.o | |
| #lib-y += md5prime.o | |
| lib-y += messages.o | |
| lib-y += mode_string.o | |
| - | lib-y += mtab_file.o |
| lib-y += obscure.o | |
| lib-y += parse_mode.o | |
| lib-y += parse_config.o | |
| @@ -23,7 +23,7 @@ int FAST_FUNC INET_resolve(const char *name, struct sockaddr_in *s_in, int hostf | |
| s_in->sin_port = 0; | |
| /* Default is special, meaning 0.0.0.0. */ | |
| - | if (!strcmp(name, bb_str_default)) { |
| + | if (strcmp(name, "default") == 0) { |
| s_in->sin_addr.s_addr = INADDR_ANY; | |
| return 1; | |
| } | |
| @@ -109,7 +109,7 @@ char* FAST_FUNC INET_rresolve(struct sockaddr_in *s_in, int numeric, uint32_t ne | |
| if (ad == INADDR_ANY) { | |
| if ((numeric & 0x0FFF) == 0) { | |
| if (numeric & 0x8000) | |
| - | return xstrdup(bb_str_default); |
| + | return xstrdup("default"); |
| return xstrdup("*"); | |
| } | |
| } | |
| @@ -205,7 +205,7 @@ char* FAST_FUNC INET6_rresolve(struct sockaddr_in6 *sin6, int numeric) | |
| } | |
| if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) { | |
| if (numeric & 0x8000) | |
| - | return xstrdup(bb_str_default); |
| + | return xstrdup("default"); |
| return xstrdup("*"); | |
| } | |
| @@ -24,8 +24,6 @@ const char bb_banner[] ALIGN1 = BANNER; | |
| const char bb_msg_memory_exhausted[] ALIGN1 = "memory exhausted"; | |
| const char bb_msg_invalid_date[] ALIGN1 = "invalid date '%s'"; | |
| - | const char bb_msg_write_error[] ALIGN1 = "write error"; |
| - | const char bb_msg_read_error[] ALIGN1 = "read error"; |
| const char bb_msg_unknown[] ALIGN1 = "(unknown)"; | |
| const char bb_msg_can_not_create_raw_socket[] ALIGN1 = "can't create raw socket"; | |
| const char bb_msg_perm_denied_are_you_root[] ALIGN1 = "permission denied (are you root?)"; | |
| @@ -35,15 +33,8 @@ const char bb_msg_invalid_arg[] ALIGN1 = "invalid argument '%s' to '%s'"; | |
| const char bb_msg_standard_input[] ALIGN1 = "standard input"; | |
| const char bb_msg_standard_output[] ALIGN1 = "standard output"; | |
| - | const char bb_str_default[] ALIGN1 = "default"; |
| const char bb_hexdigits_upcase[] ALIGN1 = "0123456789ABCDEF"; | |
| - | const char bb_path_passwd_file[] ALIGN1 = "/etc/passwd"; |
| - | const char bb_path_shadow_file[] ALIGN1 = "/etc/shadow"; |
| - | const char bb_path_group_file[] ALIGN1 = "/etc/group"; |
| - | const char bb_path_gshadow_file[] ALIGN1 = "/etc/gshadow"; |
| - | const char bb_path_motd_file[] ALIGN1 = "/etc/motd"; |
| - | const char bb_dev_null[] ALIGN1 = "/dev/null"; |
| const char bb_busybox_exec_path[] ALIGN1 = CONFIG_BUSYBOX_EXEC_PATH; | |
| const char bb_default_login_shell[] ALIGN1 = LIBBB_DEFAULT_LOGIN_SHELL; | |
| /* util-linux manpage says /sbin:/bin:/usr/sbin:/usr/bin, | |
| @@ -1,15 +0,0 @@ | |
| - | /* vi: set sw=4 ts=4: */ |
| - | /* |
| - | * Utility routines. |
| - | * |
| - | * Copyright (C) 1999-2004 by Erik Andersen <[email protected]> |
| - | * |
| - | * Licensed under GPLv2 or later, see file LICENSE in this source tree. |
| - | */ |
| - | |
| - | #include "libbb.h" |
| - | |
| - | /* Busybox mount uses either /proc/mounts or /etc/mtab to |
| - | * get the list of currently mounted filesystems */ |
| - | const char bb_path_mtab_file[] ALIGN1 = |
| - | IF_FEATURE_MTAB_SUPPORT("/etc/mtab")IF_NOT_FEATURE_MTAB_SUPPORT("/proc/mounts"); |
| @@ -370,7 +370,7 @@ int ifconfig_main(int argc UNUSED_PARAM, char **argv) | |
| #endif | |
| sai.sin_family = AF_INET; | |
| sai.sin_port = 0; | |
| - | if (!strcmp(host, bb_str_default)) { |
| + | if (strcmp(host, "default") == 0) { |
| /* Default is special, meaning 0.0.0.0. */ | |
| sai.sin_addr.s_addr = INADDR_ANY; | |
| } | |
| @@ -64,7 +64,7 @@ int get_addr_1(inet_prefix *addr, char *name, int family) | |
| { | |
| memset(addr, 0, sizeof(*addr)); | |
| - | if (strcmp(name, bb_str_default) == 0 |
| + | if (strcmp(name, "default") == 0 |
| || strcmp(name, "all") == 0 | |
| || strcmp(name, "any") == 0 | |
| ) { | |
| @@ -103,7 +103,7 @@ static int get_prefix_1(inet_prefix *dst, char *arg, int family) | |
| memset(dst, 0, sizeof(*dst)); | |
| - | if (strcmp(arg, bb_str_default) == 0 |
| + | if (strcmp(arg, "default") == 0 |
| || strcmp(arg, "all") == 0 | |
| || strcmp(arg, "any") == 0 | |
| ) { | |
| @@ -185,7 +185,7 @@ static NOINLINE void INET_setroute(int action, char **args) | |
| #endif | |
| } else { | |
| /* Default netmask. */ | |
| - | netmask = bb_str_default; |
| + | netmask = "default"; |
| } | |
| /* Prefer hostname lookup is -host flag (xflag==1) was given. */ | |
| isnet = INET_resolve(target, (struct sockaddr_in *) &rt.rt_dst, | |
| @@ -346,7 +346,7 @@ static NOINLINE void INET6_setroute(int action, char **args) | |
| /* We know args isn't NULL from the check in route_main. */ | |
| const char *target = *args++; | |
| - | if (strcmp(target, bb_str_default) == 0) { |
| + | if (strcmp(target, "default") == 0) { |
| prefix_len = 0; | |
| memset(&sa6, 0, sizeof(sa6)); | |
| } else { | |