]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
gmputil: use MSF/LSF in import/export functions dependant on host byte order
authorPatrick McHardy <kaber@trash.net>
Sat, 12 Apr 2014 08:40:08 +0000 (10:40 +0200)
committerPatrick McHardy <kaber@trash.net>
Sat, 12 Apr 2014 08:55:26 +0000 (10:55 +0200)
For data of byteorder BYTEORDER_HOST_ENDIAN we need to set the word order
dependant on the host byte order.

Signed-off-by: Patrick McHardy <kaber@trash.net>
include/gmputil.h
src/gmputil.c

index 88be697aaece004cd13d9e95296e3ffd7554df17..63eb0ba91315f548de8388f58bafb458f75c7e16 100644 (file)
@@ -2,12 +2,21 @@
 #define NFTABLES_GMPUTIL_H
 
 #include <gmp.h>
+#include <asm/byteorder.h>
 
 enum mpz_word_order {
        MPZ_MSWF                = 1,
        MPZ_LSWF                = -1,
 };
 
+#ifdef __LITTLE_ENDIAN_BITFIELD
+#define MPZ_HWO        MPZ_LSWF
+#elif defined(__BIG_ENDIAN_BITFIELD)
+#define MPZ_HWO MPZ_MSWF
+#else
+#error "byteorder undefined"
+#endif
+
 enum mpz_byte_order {
        MPZ_BIG_ENDIAN          = 1,
        MPZ_HOST_ENDIAN         = 0,
index f34c077eea048611551579f77ca68209ca65113b..cb4644578de8fb34abb30a26ff7b94cfd5255045 100644 (file)
@@ -98,20 +98,23 @@ void *mpz_export_data(void *data, const mpz_t op,
                      enum byteorder byteorder,
                      unsigned int len)
 {
+       enum mpz_word_order order;
        enum mpz_byte_order endian;
 
        switch (byteorder) {
        case BYTEORDER_BIG_ENDIAN:
        default:
+               order = MPZ_MSWF;
                endian = MPZ_BIG_ENDIAN;
                break;
        case BYTEORDER_HOST_ENDIAN:
+               order = MPZ_HWO;
                endian = MPZ_HOST_ENDIAN;
                break;
        }
 
        memset(data, 0, len);
-       mpz_export(data, NULL, MPZ_MSWF, len, endian, 0, op);
+       mpz_export(data, NULL, order, len, endian, 0, op);
        return data;
 }
 
@@ -129,7 +132,7 @@ void mpz_import_data(mpz_t rop, const void *data,
                endian = MPZ_BIG_ENDIAN;
                break;
        case BYTEORDER_HOST_ENDIAN:
-               order  = MPZ_LSWF;
+               order  = MPZ_HWO;
                endian = MPZ_HOST_ENDIAN;
                break;
        }