- make sure not to trip enless loops when using strlen in IMA mode.
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 19 May 2006 10:43:32 +0000 (10:43 -0000)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Fri, 19 May 2006 10:43:32 +0000 (10:43 -0000)
(r15000 from trunk plus preprocessor fixes plus
repair of commit message)

include/libbb.h
include/platform.h
libbb/xfuncs.c

index 0ec332b30122e162e19fb5aca89790948dd64c73..01393ade2624113b352b828f661a1bfae02d002d 100644 (file)
@@ -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
index ea2983d30f859b00bd12125311c0cc769455084f..e2f97c07dd9c0152ecfd90f94f443b8c4aea6da0 100644 (file)
 # 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 */
 
 # 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>
 
 #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 ------------------------------------------ */
index 9ee4fcd65a19a4c615cbded3a71793ff65c2ac87..8bb75f612252a486bf65764cc810d602aa8950a4 100644 (file)
 #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"
 
-
 #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