From 0e37af831d707494a86111755a3530b707d1035c Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Fri, 19 May 2006 10:43:32 +0000 Subject: [PATCH] - make sure not to trip enless loops when using strlen in IMA mode. (r15000 from trunk plus preprocessor fixes plus repair of commit message) --- include/libbb.h | 6 ------ include/platform.h | 33 ++++++++++++--------------------- libbb/xfuncs.c | 13 ++++--------- 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/include/libbb.h b/include/libbb.h index 0ec332b30..01393ade2 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -387,12 +387,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..e2f97c07d 100644 --- a/include/platform.h +++ b/include/platform.h @@ -32,40 +32,29 @@ # 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__)) +#define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #endif /* ATTRIBUTE_UNUSED */ #ifndef ATTRIBUTE_NORETURN -# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) #endif /* ATTRIBUTE_NORETURN */ #ifndef ATTRIBUTE_PACKED -# define ATTRIBUTE_PACKED __attribute__ ((__packed__)) -#endif /* ATTRIBUTE_PACKED */ +#define ATTRIBUTE_PACKED __attribute__ ((__packed__)) +#endif /* ATTRIBUTE_NORETURN */ #ifndef ATTRIBUTE_ALIGNED -# define ATTRIBUTE_ALIGNED(m) __attribute__ ((__aligned__(m))) +#define ATTRIBUTE_ALIGNED(m) __attribute__ ((__aligned__(m))) #endif /* ATTRIBUTE_ALIGNED */ /* -fwhole-program makes all symbols local. The attribute externally_visible forces a symbol global. */ #ifndef ATTRIBUTE_EXTERNALLY_VISIBLE # if __GNUC_PREREQ (4,1) -# define ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((__externally_visible__)) +# define ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((__externally_visible__)) # else -# define ATTRIBUTE_EXTERNALLY_VISIBLE +# define ATTRIBUTE_EXTERNALLY_VISIBLE # endif /* GNUC >= 4.1 */ #endif /* ATTRIBUTE_EXTERNALLY_VISIBLE */ @@ -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 @@ -86,13 +80,10 @@ #ifdef __BIG_ENDIAN__ # define BB_BIG_ENDIAN 1 -# define BB_LITTLE_ENDIAN 0 #elif __BYTE_ORDER == __BIG_ENDIAN # define BB_BIG_ENDIAN 1 -# define BB_LITTLE_ENDIAN 0 #else # define BB_BIG_ENDIAN 0 -# define BB_LITTLE_ENDIAN 1 #endif /* ---- Networking ------------------------------------------ */ diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 9ee4fcd65..8bb75f612 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -14,16 +14,8 @@ #include #include #include - -/* 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" - #ifndef DMALLOC #ifdef L_xmalloc void *xmalloc(size_t size) @@ -175,10 +167,13 @@ 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 -- 2.25.1