more thorough fix for systems with strange socklen_t
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 2 Feb 2010 11:45:38 +0000 (12:45 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 2 Feb 2010 11:45:38 +0000 (12:45 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/inet_common.h
include/libbb.h
include/platform.h
include/unicode.h
networking/ifconfig.c
networking/interface.c

index f4374e5..4638aa9 100644 (file)
@@ -6,8 +6,10 @@
  * Heavily modified by Manuel Novoa III       Mar 12, 2001
  *
  */
+#ifndef INET_COMMON_H
+#define INET_COMMON_H 1
 
-#include "platform.h"
+PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
 
 /* hostfirst!=0 If we expect this to be a hostname,
    try hostname database first
@@ -24,3 +26,7 @@ int INET6_resolve(const char *name, struct sockaddr_in6 *sin6) FAST_FUNC;
 /* These return malloced string */
 char *INET_rresolve(struct sockaddr_in *s_in, int numeric, uint32_t netmask) FAST_FUNC;
 char *INET6_rresolve(struct sockaddr_in6 *sin6, int numeric) FAST_FUNC;
+
+POP_SAVED_FUNCTION_VISIBILITY
+
+#endif
index 3b7eea2..9e3c184 100644 (file)
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/socket.h>
-#if defined __FreeBSD__
-# include <netinet/in.h>
-# include <arpa/inet.h>
-#endif
 #include <sys/stat.h>
 #include <sys/time.h>
 #include <sys/types.h>
 /* Try to pull in PATH_MAX */
 #include <limits.h>
 #include <sys/param.h>
-#ifndef PATH_MAX
-# define PATH_MAX 256
-#endif
-
-#ifndef BUFSIZ
-# define BUFSIZ 4096
-#endif
-
 #ifdef HAVE_MNTENT_H
 #include <mntent.h>
 #endif
-
 #ifdef HAVE_SYS_STATFS_H
 #include <sys/statfs.h>
 #endif
-
 #if ENABLE_SELINUX
 #include <selinux/selinux.h>
 #include <selinux/context.h>
 #include <selinux/flask.h>
 #include <selinux/av_permissions.h>
 #endif
-
 #if ENABLE_LOCALE_SUPPORT
 # include <locale.h>
 #else
 # define setlocale(x,y) ((void)0)
 #endif
-
 #ifdef DMALLOC
 # include <dmalloc.h>
 #endif
-
 #include <pwd.h>
 #include <grp.h>
 #if ENABLE_FEATURE_SHADOWPASSWDS
 #  include <shadow.h>
 # endif
 #endif
+#if defined __FreeBSD__
+# include <netinet/in.h>
+# include <arpa/inet.h>
+#elif defined __APPLE__
+# include <netinet/in.h>
+#else
+# include <arpa/inet.h>
+# if !defined(__socklen_t_defined) && !defined(_SOCKLEN_T_DECLARED)
+/* We #define socklen_t *after* includes, otherwise we get
+ * typedef redefinition errors from system headers
+ * (in case "is it defined already" detection above failed)
+ */
+#  define socklen_t bb_socklen_t
+   typedef unsigned socklen_t;
+# endif
+#endif
+
 
 /* Some libc's forget to declare these, do it ourself */
 
@@ -121,6 +121,12 @@ struct sysinfo {
        char _f[20 - 2 * sizeof(long) - sizeof(int)]; /* Padding: libc5 uses this.. */
 };
 int sysinfo(struct sysinfo* info);
+#ifndef PATH_MAX
+# define PATH_MAX 256
+#endif
+#ifndef BUFSIZ
+# define BUFSIZ 4096
+#endif
 
 
 /* Make all declarations hidden (-fvisibility flag only affects definitions) */
index c34a46e..b58b149 100644 (file)
 } while (0)
 #endif
 
-/* ---- Networking ------------------------------------------ */
-
-#ifndef __APPLE__
-# include <arpa/inet.h>
-# if !defined(__socklen_t_defined) && !defined(_SOCKLEN_T_DECLARED)
-#  define socklen_t bb_socklen_t
-typedef int socklen_t;
-# endif
-#else
-# include <netinet/in.h>
-#endif
-
 /* ---- Compiler dependent settings ------------------------- */
 
 #if (defined __digital__ && defined __unix__) \
index 25ef740..7ab044e 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef UNICODE_H
 #define UNICODE_H 1
 
+PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
+
 enum {
        UNICODE_UNKNOWN = 0,
        UNICODE_OFF = 1,
@@ -79,4 +81,6 @@ int iswpunct(wint_t wc) FAST_FUNC;
 
 #endif /* FEATURE_ASSUME_UNICODE */
 
+POP_SAVED_FUNCTION_VISIBILITY
+
 #endif
index 1e960d4..1a56c1c 100644 (file)
@@ -36,8 +36,8 @@
 #include <sys/types.h>
 #include <netinet/if_ether.h>
 #endif
-#include "inet_common.h"
 #include "libbb.h"
+#include "inet_common.h"
 
 #if ENABLE_FEATURE_IFCONFIG_SLIP
 # include <net/if_slip.h>
index b64d24a..0d5a0f9 100644 (file)
@@ -33,8 +33,8 @@
 
 #include <net/if.h>
 #include <net/if_arp.h>
-#include "inet_common.h"
 #include "libbb.h"
+#include "inet_common.h"
 
 
 #if ENABLE_FEATURE_HWIB