From fe77bc5c8e9eed86c93b26d43d89e1b83d3f889c Mon Sep 17 00:00:00 2001 From: Evan Miller Date: Wed, 14 Jul 2021 09:33:24 -0400 Subject: [PATCH] Remove uses of ntohl --- configure.ac | 2 -- include/mdbfakeglib.h | 16 +--------------- src/libmdb/file.c | 25 ++++++++++++------------- src/libmdb/write.c | 19 +++++++++++++------ 4 files changed, 26 insertions(+), 36 deletions(-) diff --git a/configure.ac b/configure.ac index c52c9f9..6603ffc 100644 --- a/configure.ac +++ b/configure.ac @@ -90,8 +90,6 @@ AC_SUBST(LFLAGS) CFLAGS="$CFLAGS -Wall -Werror" AS_CASE([$host], [*mingw*|*cygwin*], [LDFLAGS="$LDFLAGS -no-undefined"], []) -AS_CASE([$host], - [*mingw*], [LDFLAGS="$LDFLAGS -lWs2_32"], []) dnl Fuzz testing diff --git a/include/mdbfakeglib.h b/include/mdbfakeglib.h index 3044cd8..c09c314 100644 --- a/include/mdbfakeglib.h +++ b/include/mdbfakeglib.h @@ -26,13 +26,6 @@ #include #include -// for ntohl -#ifdef _WIN32 -#include -#else -#include -#endif - typedef uint16_t guint16; typedef uint32_t guint32; typedef uint64_t guint64; @@ -132,14 +125,7 @@ typedef struct GOptionContext { #define TRUE 1 #define FALSE 0 -#define GUINT16_FROM_LE(l) (uint16_t)l -#define GUINT32_FROM_LE(l) (uint32_t)l -#define GUINT64_FROM_LE(l) (uint64_t)l -#define GINT32_FROM_LE(l) (uint32_t)l -#define GINT32_FROM_BE(l) (int32_t)ntohl(l) -#define GUINT32_SWAP_LE_BE(l) (uint32_t)ntohl(l) -#define GINT32_TO_LE(l) (int32_t)l -#define GINT32_TO_BE(l) (int32_t)ntohl(l) +#define GUINT32_SWAP_LE_BE(l) __builtin_bswap32((uint32_t)(l)) /* string functions */ void *g_memdup(const void *src, size_t len); diff --git a/src/libmdb/file.c b/src/libmdb/file.c index b4cb5cc..25b49c8 100644 --- a/src/libmdb/file.c +++ b/src/libmdb/file.c @@ -405,9 +405,8 @@ unsigned char mdb_pg_get_byte(MdbHandle *mdb, int offset) int mdb_get_int16(void *buf, int offset) { - guint16 l; - memcpy(&l, (char*)buf + offset, 2); - return (int)GUINT16_FROM_LE(l); + unsigned char *u8_buf = (unsigned char *)buf + offset; + return u8_buf[0] + (u8_buf[1] << 8); } int mdb_pg_get_int16(MdbHandle *mdb, int offset) { @@ -418,15 +417,13 @@ int mdb_pg_get_int16(MdbHandle *mdb, int offset) long mdb_get_int32_msb(void *buf, int offset) { - gint32 l; - memcpy(&l, (char*)buf + offset, 4); - return (long)GINT32_FROM_BE(l); + unsigned char *u8_buf = (unsigned char *)buf + offset; + return (u8_buf[0] << 24) + (u8_buf[1] << 16) + (u8_buf[2] << 8) + u8_buf[3]; } long mdb_get_int32(void *buf, int offset) { - gint32 l; - memcpy(&l, (char*)buf + offset, 4); - return (long)GINT32_FROM_LE(l); + unsigned char *u8_buf = (unsigned char *)buf + offset; + return u8_buf[0] + (u8_buf[1] << 8) + (u8_buf[2] << 16) + (u8_buf[3] << 24); } long mdb_pg_get_int32(MdbHandle *mdb, int offset) { @@ -438,8 +435,8 @@ long mdb_pg_get_int32(MdbHandle *mdb, int offset) float mdb_get_single(void *buf, int offset) { union {guint32 g; float f;} f; - memcpy(&f, (char*)buf + offset, 4); - f.g = GUINT32_FROM_LE(f.g); + unsigned char *u8_buf = (unsigned char *)buf + offset; + f.g = u8_buf[0] + (u8_buf[1] << 8) + (u8_buf[2] << 16) + (u8_buf[3] << 24); return f.f; } float mdb_pg_get_single(MdbHandle *mdb, int offset) @@ -452,8 +449,10 @@ float mdb_pg_get_single(MdbHandle *mdb, int offset) double mdb_get_double(void *buf, int offset) { union {guint64 g; double d;} d; - memcpy(&d, (char*)buf + offset, 8); - d.g = GUINT64_FROM_LE(d.g); + unsigned char *u8_buf = (unsigned char *)buf + offset; + d.g = u8_buf[0] + (u8_buf[1] << 8) + (u8_buf[2] << 16) + (u8_buf[3] << 24) + + ((guint64)u8_buf[4] << 32) + ((guint64)u8_buf[5] << 40) + + ((guint64)u8_buf[6] << 48) + ((guint64)u8_buf[7] << 56); return d.d; } double mdb_pg_get_double(MdbHandle *mdb, int offset) diff --git a/src/libmdb/write.c b/src/libmdb/write.c index 6ae073a..44a48f2 100644 --- a/src/libmdb/write.c +++ b/src/libmdb/write.c @@ -26,8 +26,9 @@ static int mdb_add_row_to_leaf_pg(MdbTableDef *table, MdbIndex *idx, MdbIndexPag void mdb_put_int16(void *buf, guint32 offset, guint32 value) { - value = GINT32_TO_LE(value); - memcpy((char*)buf + offset, &value, 2); + unsigned char *u8_buf = (unsigned char *)buf + offset; + u8_buf[0] = (value & 0xFF); + u8_buf[1] = (value >> 8) & 0xFF; } void _mdb_put_int16(void *buf, guint32 offset, guint32 value) @@ -40,8 +41,11 @@ __attribute__((alias("mdb_put_int16"))); void mdb_put_int32(void *buf, guint32 offset, guint32 value) { - value = GINT32_TO_LE(value); - memcpy((char*)buf + offset, &value, 4); + unsigned char *u8_buf = (unsigned char *)buf + offset; + u8_buf[0] = (value & 0xFF); + u8_buf[1] = (value >> 8) & 0xFF; + u8_buf[2] = (value >> 16) & 0xFF; + u8_buf[3] = (value >> 24) & 0xFF; } void _mdb_put_int32(void *buf, guint32 offset, guint32 value) @@ -54,8 +58,11 @@ __attribute__((alias("mdb_put_int32"))); void mdb_put_int32_msb(void *buf, guint32 offset, guint32 value) { - value = GINT32_TO_BE(value); - memcpy((char*)buf + offset, &value, 4); + unsigned char *u8_buf = (unsigned char *)buf + offset; + u8_buf[3] = (value & 0xFF); + u8_buf[2] = (value >> 8) & 0xFF; + u8_buf[1] = (value >> 16) & 0xFF; + u8_buf[0] = (value >> 24) & 0xFF; } void _mdb_put_int32_mdb(void *buf, guint32 offset, guint32 value)