From d04b853800a8caf221ad79025d188d5ad9bf1ba7 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Mon, 24 Apr 2006 20:45:55 +0000 Subject: [PATCH] * Look for htons/htonl in netinet/in.h in addition to arpa/inet.h * Implement htons/htonl in common.h just in case. --- common.h | 34 ++++++++++++++++++++++++++++++++++ configure.ac | 2 +- cucul/font.c | 2 ++ tools/makefont.c | 2 ++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/common.h b/common.h index c72431d..8f2c25e 100644 --- a/common.h +++ b/common.h @@ -30,3 +30,37 @@ typedef long int intptr_t; typedef unsigned long int uintptr_t; #endif +#if !defined(HAVE_HTONS) && !defined(HAVE_NETINET_IN_H) +# if defined(HAVE_ENDIAN_H) +# include +# endif +static extern inline uint16_t htons(uint16_t x) +{ +#if defined(HAVE_ENDIAN_H) + if(__BYTE_ORDER == __BIG_ENDIAN) +#else + /* This is compile-time optimised with at least -O1 or -Os */ + uint32_t const dummy = 0x12345678; + if(*(uint8_t const *)&dummy == 0x12) +#endif + return x; + else + return (x >> 8) | (x << 8); +} + +static extern inline uint32_t htonl(uint32_t x) +{ +#if defined(HAVE_ENDIAN_H) + if(__BYTE_ORDER == __BIG_ENDIAN) +#else + /* This is compile-time optimised with at least -O1 or -Os */ + uint32_t const dummy = 0x12345678; + if(*(uint8_t const *)&dummy == 0x12) +#endif + return x; + else + return (x >> 24) | ((x >> 8) & 0x0000ff00) + | ((x << 8) & 0x00ff0000) | (x << 24); +} +#endif + diff --git a/configure.ac b/configure.ac index 1f23d8e..b9429f4 100644 --- a/configure.ac +++ b/configure.ac @@ -61,7 +61,7 @@ dnl conditional builds AC_ARG_ENABLE(doc, [ --enable-doc build documentation (needs doxygen and LaTeX)]) -AC_CHECK_HEADERS(stdio.h stdarg.h signal.h sys/ioctl.h sys/time.h inttypes.h endian.h unistd.h arpa/inet.h) +AC_CHECK_HEADERS(stdio.h stdarg.h signal.h sys/ioctl.h sys/time.h inttypes.h endian.h unistd.h arpa/inet.h netinet/in.h) AC_CHECK_FUNCS(signal ioctl vsnprintf getenv putenv strcasecmp htons) AC_CHECK_FUNCS(usleep gettimeofday) diff --git a/cucul/font.c b/cucul/font.c index b9181da..a3fd72f 100644 --- a/cucul/font.c +++ b/cucul/font.c @@ -25,6 +25,8 @@ # endif # if defined(HAVE_ARPA_INET_H) # include +# elif defined(HAVE_NETINET_IN_H) +# include # endif # include # include diff --git a/tools/makefont.c b/tools/makefont.c index 1c83515..8793b59 100644 --- a/tools/makefont.c +++ b/tools/makefont.c @@ -23,6 +23,8 @@ #if defined(HAVE_ARPA_INET_H) # include +#elif defined(HAVE_NETINET_IN_H) +# include #endif #include