Not quite compiler independent, but we've never tried to be gcc independent
authorRob Landley <rob@landley.net>
Thu, 4 May 2006 21:22:27 +0000 (21:22 -0000)
committerRob Landley <rob@landley.net>
Thu, 4 May 2006 21:22:27 +0000 (21:22 -0000)
anyway.  This is at least less ugly than what was there before, and fixes
building all sources at once.

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

index 8fc2dbbc8256be07bb179fec8903e23c61e39c7d..48239798b62af42d029b66a62761b476abed1dd4 100644 (file)
@@ -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
index ea2983d30f859b00bd12125311c0cc769455084f..a8858a74c619f3006d649cd9160fabc994b2e90b 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__))
 #endif /* ATTRIBUTE_UNUSED */
 # 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>
index 3db526b85811203ac4fce960feab063cacdda7a1..f1f988f803f9c438cbb6faf74435f5324f2c4e9a 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"
-
+#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