aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 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);
414void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); 414void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name);
415void reset_ino_dev_hashtable(void); 415void reset_ino_dev_hashtable(void);
416 416
417/* Stupid gcc always includes its own builtin strlen()... */
418extern size_t bb_strlen(const char *string);
419#ifndef BB_STRLEN_IMPLEMENTATION
420#define strlen(x) bb_strlen(x)
421#endif
422
423char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); 417char *bb_xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
424 418
425#define FAIL_DELAY 3 419#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 @@
32# endif 32# endif
33#endif 33#endif
34 34
35#if 0
36/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
37#ifndef ATTRIBUTE_MALLOC
38# if __GNUC_PREREQ (2,96)
39# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
40# else
41# define ATTRIBUTE_MALLOC
42# endif /* GNUC >= 2.96 */
43#endif /* ATTRIBUTE_MALLOC */
44#endif
45
46#ifndef ATTRIBUTE_UNUSED 35#ifndef ATTRIBUTE_UNUSED
47# define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 36# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
48#endif /* ATTRIBUTE_UNUSED */ 37#endif /* ATTRIBUTE_UNUSED */
@@ -78,6 +67,11 @@
78# endif 67# endif
79#endif 68#endif
80 69
70#ifdef __GNUC__
71#define strlen(x) bb_strlen(x)
72extern size_t bb_strlen(const char *string);
73#endif
74
81/* ---- Endian Detection ------------------------------------ */ 75/* ---- Endian Detection ------------------------------------ */
82#ifndef __APPLE__ 76#ifndef __APPLE__
83# include <byteswap.h> 77# 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 @@
14#include <stdlib.h> 14#include <stdlib.h>
15#include <unistd.h> 15#include <unistd.h>
16#include <fcntl.h> 16#include <fcntl.h>
17 17#include "busybox.h"
18/* Since gcc always inlines strlen(), this saves a byte or two, but we need
19 * the #undef here to avoid endless loop from #define strlen bb_strlen */
20#ifdef L_strlen
21#define BB_STRLEN_IMPLEMENTATION
22#endif
23
24#include "libbb.h"
25
26 18
27#ifndef DMALLOC 19#ifndef DMALLOC
28#ifdef L_xmalloc 20#ifdef L_xmalloc
@@ -182,10 +174,12 @@ void bb_xfflush_stdout(void)
182} 174}
183#endif 175#endif
184 176
177// GCC forces inlining of strlen everywhere, which is generally a byte
178// larger than calling a function, and it's called a lot so it adds up.
185#ifdef L_strlen 179#ifdef L_strlen
186size_t bb_strlen(const char *string) 180size_t bb_strlen(const char *string)
187{ 181{
188 return(strlen(string)); 182 return(__builtin_strlen(string));
189} 183}
190#endif 184#endif
191 185