Actions
Bug #1053
closedmaster-2013-12-02: util-byte.h: Solaris doesn't have swap16/32/64
Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
Affected Versions:
Effort:
Difficulty:
Label:
Description
Requires OS_SOLARIS definition from https://redmine.openinfosecfoundation.org/issues/1051
Checking for i86/SPARC:
--- util-byte.h.orig 2013-12-03 14:31:30.327775209 +1100
+++ util-byte.h 2013-12-03 14:42:09.574001791 +1100
@@ -64,6 +64,34 @@
| (((x) & 0x0000000000ff0000ull) << 24) \
| (((x) & 0x000000000000ff00ull) << 40) \
| (((x) & 0x00000000000000ffull) << 56))
+#elif OS_SOLARIS
+# define bswap_8(x) ((x) & 0xff)
+# if !defined(__i386) && !defined(__amd64)
+# define SCByteSwap16(x) ((bswap_8(x) << 8) | bswap_8((x) >> 8))
+# define SCByteSwap32(x) (((uint32_t)(x) << 24) | \
+ (((uint32_t)(x) << 8) & 0xff0000) | \
+ (((uint32_t)(x) >> 8) & 0xff00) | \
+ ((uint32_t)(x) >> 24))
+# else /* x86 */
+# define SCByteSwap16(x) htons(x)
+# define SCByteSwap32(x) htonl(x)
+# endif /* !__i386 && !__amd64 */
+# if defined(_LP64) || defined(_LONGLONG_TYPE)
+# if (!defined(__i386) && !defined(__amd64))
+# define SCByteSwap64(x) (((uint64_t)(x) << 56) | \
+ (((uint64_t)(x) << 40) & 0xff000000000000ULL) | \
+ (((uint64_t)(x) << 24) & 0xff0000000000ULL) | \
+ (((uint64_t)(x) << 8) & 0xff00000000ULL) | \
+ (((uint64_t)(x) >> 8) & 0xff000000ULL) | \
+ (((uint64_t)(x) >> 24) & 0xff0000ULL) | \
+ (((uint64_t)(x) >> 40) & 0xff00ULL) | \
+ ((uint64_t)(x) >> 56))
+# else /* x86 */
+# define SCByteSwap64(x) htonll(x)
+# endif /* !__i386 && !__amd64 */
+# else /* no uint64_t */
+# define SCByteSwap64(x) ((SCByteSwap32(x) << 32) | SCByteSwap32((x) >> 32))
+# endif
#else
#include <byteswap.h>
#define SCByteSwap16(x) bswap_16(x)
Actions