diff --git a/cf/roken-frag.m4 b/cf/roken-frag.m4 index 452c4fd07..f22b43a5d 100644 --- a/cf/roken-frag.m4 +++ b/cf/roken-frag.m4 @@ -272,6 +272,14 @@ AC_FIND_FUNC_NO_LIBS(bswap32,, #include #endif],0) +AC_FIND_FUNC_NO_LIBS(bswap64,, +[#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_BSWAP_H +#include +#endif],0) + AC_FIND_FUNC_NO_LIBS(pidfile,util, [#ifdef HAVE_UTIL_H #include diff --git a/lib/roken/bswap.c b/lib/roken/bswap.c index 7f8c1c22b..b0c4248da 100644 --- a/lib/roken/bswap.c +++ b/lib/roken/bswap.c @@ -34,6 +34,23 @@ #include #include "roken.h" +#ifndef HAVE_BSWAP64 + +ROKEN_LIB_FUNCTION uint64_t ROKEN_LIB_CALL +bswap64 (uint64_t val) +{ + return + (val & 0xffULL) << 56 | + (val & 0xff00ULL) << 40 | + (val & 0xff0000ULL) << 24 | + (val & 0xff000000ULL) << 8 | + (val & 0xff00000000ULL) >> 8 | + (val & 0xff0000000000ULL) >> 24 | + (val & 0xff000000000000ULL) >> 40 | + (val & 0xff00000000000000ULL) >> 56 ; +} +#endif + #ifndef HAVE_BSWAP32 ROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index 910c79a46..e6b89277b 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -765,6 +765,11 @@ ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL pidfile (const char*); #endif #endif +#ifndef HAVE_BSWAP64 +#define bswap64 rk_bswap64 +ROKEN_LIB_FUNCTION uint64_t ROKEN_LIB_CALL bswap64(uint64_t); +#endif + #ifndef HAVE_BSWAP32 #define bswap32 rk_bswap32 ROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL bswap32(unsigned int); diff --git a/lib/roken/version-script.map b/lib/roken/version-script.map index 31c942cdc..ed2e16c4f 100644 --- a/lib/roken/version-script.map +++ b/lib/roken/version-script.map @@ -38,6 +38,7 @@ HEIMDAL_ROKEN_1.0 { rk_base64_encode; rk_bswap16; rk_bswap32; + rk_bswap64; rk_cgetent; rk_cgetstr; rk_cloexec;