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); void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); void reset_ino_dev_hashtable(void); -/* Stupid gcc always includes its own builtin strlen()... */ -extern size_t bb_strlen(const char *string); -#ifndef BB_STRLEN_IMPLEMENTATION -#define strlen(x) bb_strlen(x) -#endif - char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); #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 @@ # endif #endif -#if 0 -/* Attribute __malloc__ on functions was valid as of gcc 2.96. */ -#ifndef ATTRIBUTE_MALLOC -# if __GNUC_PREREQ (2,96) -# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) -# else -# define ATTRIBUTE_MALLOC -# endif /* GNUC >= 2.96 */ -#endif /* ATTRIBUTE_MALLOC */ -#endif - #ifndef ATTRIBUTE_UNUSED # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #endif /* ATTRIBUTE_UNUSED */ @@ -78,6 +67,11 @@ # endif #endif +#ifdef __GNUC__ +#define strlen(x) bb_strlen(x) +extern size_t bb_strlen(const char *string); +#endif + /* ---- Endian Detection ------------------------------------ */ #ifndef __APPLE__ # 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 @@ #include <stdlib.h> #include <unistd.h> #include <fcntl.h> - -/* Since gcc always inlines strlen(), this saves a byte or two, but we need - * the #undef here to avoid endless loop from #define strlen bb_strlen */ -#ifdef L_strlen -#define BB_STRLEN_IMPLEMENTATION -#endif - -#include "libbb.h" - +#include "busybox.h" #ifndef DMALLOC #ifdef L_xmalloc @@ -182,10 +174,12 @@ void bb_xfflush_stdout(void) } #endif +// GCC forces inlining of strlen everywhere, which is generally a byte +// larger than calling a function, and it's called a lot so it adds up. #ifdef L_strlen size_t bb_strlen(const char *string) { - return(strlen(string)); + return(__builtin_strlen(string)); } #endif |