diff options
| -rw-r--r-- | include/libbb.h | 6 | ||||
| -rw-r--r-- | include/platform.h | 16 | ||||
| -rw-r--r-- | libbb/xfuncs.c | 14 |
3 files changed, 9 insertions, 27 deletions
diff --git a/include/libbb.h b/include/libbb.h index 8fc2dbbc8..48239798b 100644 --- a/include/libbb.h +++ b/include/libbb.h | |||
| @@ -414,12 +414,6 @@ int is_in_ino_dev_hashtable(const struct stat *statbuf, char **name); | |||
| 414 | void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); | 414 | void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); |
| 415 | void reset_ino_dev_hashtable(void); | 415 | void reset_ino_dev_hashtable(void); |
| 416 | 416 | ||
| 417 | /* Stupid gcc always includes its own builtin strlen()... */ | ||
| 418 | extern size_t bb_strlen(const char *string); | ||
| 419 | #ifndef BB_STRLEN_IMPLEMENTATION | ||
| 420 | #define strlen(x) bb_strlen(x) | ||
| 421 | #endif | ||
| 422 | |||
| 423 | char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); | 417 | char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); |
| 424 | 418 | ||
| 425 | #define FAIL_DELAY 3 | 419 | #define FAIL_DELAY 3 |
diff --git a/include/platform.h b/include/platform.h index ea2983d30..a8858a74c 100644 --- a/include/platform.h +++ b/include/platform.h | |||
| @@ -32,17 +32,6 @@ | |||
| 32 | # endif | 32 | # endif |
| 33 | #endif | 33 | #endif |
| 34 | 34 | ||
| 35 | #if 0 | ||
| 36 | /* Attribute __malloc__ on functions was valid as of gcc 2.96. */ | ||
| 37 | #ifndef ATTRIBUTE_MALLOC | ||
| 38 | # if __GNUC_PREREQ (2,96) | ||
| 39 | # define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) | ||
| 40 | # else | ||
| 41 | # define ATTRIBUTE_MALLOC | ||
| 42 | # endif /* GNUC >= 2.96 */ | ||
| 43 | #endif /* ATTRIBUTE_MALLOC */ | ||
| 44 | #endif | ||
| 45 | |||
| 46 | #ifndef ATTRIBUTE_UNUSED | 35 | #ifndef ATTRIBUTE_UNUSED |
| 47 | # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) | 36 | # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) |
| 48 | #endif /* ATTRIBUTE_UNUSED */ | 37 | #endif /* ATTRIBUTE_UNUSED */ |
| @@ -78,6 +67,11 @@ | |||
| 78 | # endif | 67 | # endif |
| 79 | #endif | 68 | #endif |
| 80 | 69 | ||
| 70 | #ifdef __GNUC__ | ||
| 71 | #define strlen(x) bb_strlen(x) | ||
| 72 | extern size_t bb_strlen(const char *string); | ||
| 73 | #endif | ||
| 74 | |||
| 81 | /* ---- Endian Detection ------------------------------------ */ | 75 | /* ---- Endian Detection ------------------------------------ */ |
| 82 | #ifndef __APPLE__ | 76 | #ifndef __APPLE__ |
| 83 | # include <byteswap.h> | 77 | # include <byteswap.h> |
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 3db526b85..f1f988f80 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c | |||
| @@ -14,15 +14,7 @@ | |||
| 14 | #include <stdlib.h> | 14 | #include <stdlib.h> |
| 15 | #include <unistd.h> | 15 | #include <unistd.h> |
| 16 | #include <fcntl.h> | 16 | #include <fcntl.h> |
| 17 | 17 | #include "busybox.h" | |
| 18 | /* Since gcc always inlines strlen(), this saves a byte or two, but we need | ||
| 19 | * the #undef here to avoid endless loop from #define strlen bb_strlen */ | ||
| 20 | #ifdef L_strlen | ||
| 21 | #define BB_STRLEN_IMPLEMENTATION | ||
| 22 | #endif | ||
| 23 | |||
| 24 | #include "libbb.h" | ||
| 25 | |||
| 26 | 18 | ||
| 27 | #ifndef DMALLOC | 19 | #ifndef DMALLOC |
| 28 | #ifdef L_xmalloc | 20 | #ifdef L_xmalloc |
| @@ -182,10 +174,12 @@ void bb_xfflush_stdout(void) | |||
| 182 | } | 174 | } |
| 183 | #endif | 175 | #endif |
| 184 | 176 | ||
| 177 | // GCC forces inlining of strlen everywhere, which is generally a byte | ||
| 178 | // larger than calling a function, and it's called a lot so it adds up. | ||
| 185 | #ifdef L_strlen | 179 | #ifdef L_strlen |
| 186 | size_t bb_strlen(const char *string) | 180 | size_t bb_strlen(const char *string) |
| 187 | { | 181 | { |
| 188 | return(strlen(string)); | 182 | return(__builtin_strlen(string)); |
| 189 | } | 183 | } |
| 190 | #endif | 184 | #endif |
| 191 | 185 | ||
