aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2006-05-04 21:22:27 +0000
committerRob Landley <rob@landley.net>2006-05-04 21:22:27 +0000
commit552b56dfd188d32a14a48ff1d81ee6ca05fc9834 (patch)
tree9a9e066f977385ad1f1c081ad75e2174a13487a8
parent3b89039c25c8eb15435ed4f87bc8cb31c7941064 (diff)
downloadbusybox-w32-552b56dfd188d32a14a48ff1d81ee6ca05fc9834.tar.gz
busybox-w32-552b56dfd188d32a14a48ff1d81ee6ca05fc9834.tar.bz2
busybox-w32-552b56dfd188d32a14a48ff1d81ee6ca05fc9834.zip
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 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