summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley2006-05-04 21:22:27 +0000
committerRob Landley2006-05-04 21:22:27 +0000
commit552b56dfd188d32a14a48ff1d81ee6ca05fc9834 (patch)
tree9a9e066f977385ad1f1c081ad75e2174a13487a8
parent3b89039c25c8eb15435ed4f87bc8cb31c7941064 (diff)
downloadbusybox-552b56dfd188d32a14a48ff1d81ee6ca05fc9834.zip
busybox-552b56dfd188d32a14a48ff1d81ee6ca05fc9834.tar.gz
Not quite compiler independent, but we've never tried to be gcc independent
anyway. This is at least less ugly than what was there before, and fixes building all sources at once.
-rw-r--r--include/libbb.h6
-rw-r--r--include/platform.h16
-rw-r--r--libbb/xfuncs.c14
3 files changed, 9 insertions, 27 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 8fc2dbb..4823979 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 ea2983d..a8858a7 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 3db526b..f1f988f 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