Magic byteorder fix from Marcus
diff --git a/ChangeLog b/ChangeLog
index c45b827..31644ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2006-08-03 Marcus Meissner <meissner@suse.de>
+
+ * m4/byteorder.m4: byteorder fixes.
+
2007-07-30 Richard Low <richard@wentnet.com>
* src/ptp-pack.c: fix up array packing
diff --git a/m4/byteorder.m4 b/m4/byteorder.m4
index 1f7563d..18c403a 100644
--- a/m4/byteorder.m4
+++ b/m4/byteorder.m4
@@ -32,12 +32,10 @@
dnl Create a header file that defines extended byte swapping macros
AC_DEFUN([AC_NEED_BYTEORDER_H],
[
-changequote(, )dnl
-ac_dir=`echo $1|sed 's%/[^/][^/]*$%%'`
-changequote([, ])dnl
+ac_dir=`AS_DIRNAME(["$1"])`
if test "$ac_dir" != "$1" && test "$ac_dir" != .; then
# The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
+ test ! -d "$ac_dir" && AS_MKDIR_P(["$ac_dir"])
fi
# We're only interested in the target CPU, but it's not always set
@@ -236,6 +234,7 @@
#define htole32(x) swap32(x)
#define le16toh(x) swap16(x)
#define le32toh(x) swap32(x)
+#define le64toh(x) swap64(x)
#define htobe64(x) (x)
#define be64toh(x) (x)
@@ -244,6 +243,7 @@
#define HTOLE32(x) (x) = htole32(x)
#define LE16TOH(x) (x) = le16toh(x)
#define LE32TOH(x) (x) = le32toh(x)
+#define LE64TOH(x) (x) = le64toh(x)
#define HTOBE64(x) (void) (x)
#define BE64TOH(x) (void) (x)
@@ -322,12 +322,14 @@
/* Non-optimized but portable macros */
#define be16atoh(x) ((uint16_t)(((x)[0]<<8)|(x)[1]))
#define be32atoh(x) ((uint32_t)(((x)[0]<<24)|((x)[1]<<16)|((x)[2]<<8)|(x)[3]))
-#define be64atoh(x) ((uint64_t)(((x)[0]<<56)|((x)[1]<<48)|((x)[2]<<40)| \\
- ((x)[3]<<32)|((x)[4]<<24)|((x)[5]<<16)|((x)[6]<<8)|(x)[7]))
+#define be64atoh_x(x,off,shift) (((uint64_t)((x)[off]))<<shift)
+#define be64atoh(x) ((uint64_t)(be64atoh_x(x,0,56)|be64atoh_x(x,1,48)|be64atoh_x(x,2,40)| \\
+ be64atoh_x(x,3,32)|be64atoh_x(x,4,24)|be64atoh_x(x,5,16)|be64atoh_x(x,6,8)|((x)[7])))
#define le16atoh(x) ((uint16_t)(((x)[1]<<8)|(x)[0]))
#define le32atoh(x) ((uint32_t)(((x)[3]<<24)|((x)[2]<<16)|((x)[1]<<8)|(x)[0]))
-#define le64atoh(x) ((uint64_t)(((x)[7]<<56)|((x)[6]<<48)|((x)[5]<<40)| \\
- ((x)[4]<<32)|((x)[3]<<24)|((x)[2]<<16)|((x)[1]<<8)|(x)[0]))
+#define le64atoh_x(x,off,shift) (((uint64_t)(x)[off])<<shift)
+#define le64atoh(x) ((uint64_t)(le64atoh_x(x,7,56)|le64atoh_x(x,6,48)|le64atoh_x(x,5,40)| \\
+ le64atoh_x(x,4,32)|le64atoh_x(x,3,24)|le64atoh_x(x,2,16)|le64atoh_x(x,1,8)|((x)[0])))
#define htobe16a(a,x) (a)[0]=(uint8_t)((x)>>8), (a)[1]=(uint8_t)(x)
#define htobe32a(a,x) (a)[0]=(uint8_t)((x)>>24), (a)[1]=(uint8_t)((x)>>16), \\