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 | ||