summaryrefslogtreecommitdiff
path: root/src/dbinc/db_swap.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2015-02-17 17:25:57 +0000
committer <>2015-03-17 16:26:24 +0000
commit780b92ada9afcf1d58085a83a0b9e6bc982203d1 (patch)
tree598f8b9fa431b228d29897e798de4ac0c1d3d970 /src/dbinc/db_swap.h
parent7a2660ba9cc2dc03a69ddfcfd95369395cc87444 (diff)
downloadberkeleydb-master.tar.gz
Imported from /home/lorry/working-area/delta_berkeleydb/db-6.1.23.tar.gz.HEADdb-6.1.23master
Diffstat (limited to 'src/dbinc/db_swap.h')
-rw-r--r--src/dbinc/db_swap.h88
1 files changed, 74 insertions, 14 deletions
diff --git a/src/dbinc/db_swap.h b/src/dbinc/db_swap.h
index 352ae227..06f4eb47 100644
--- a/src/dbinc/db_swap.h
+++ b/src/dbinc/db_swap.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 2012 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015 Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright (c) 1990, 1993, 1994
@@ -51,15 +51,26 @@ extern "C" {
#define M_64_SWAP(a) { \
u_int64_t _tmp; \
_tmp = (u_int64_t)a; \
- ((u_int8_t *)&a)[0] = ((u_int8_t *)&_tmp)[7]; \
- ((u_int8_t *)&a)[1] = ((u_int8_t *)&_tmp)[6]; \
- ((u_int8_t *)&a)[2] = ((u_int8_t *)&_tmp)[5]; \
- ((u_int8_t *)&a)[3] = ((u_int8_t *)&_tmp)[4]; \
- ((u_int8_t *)&a)[4] = ((u_int8_t *)&_tmp)[3]; \
- ((u_int8_t *)&a)[5] = ((u_int8_t *)&_tmp)[2]; \
- ((u_int8_t *)&a)[6] = ((u_int8_t *)&_tmp)[1]; \
- ((u_int8_t *)&a)[7] = ((u_int8_t *)&_tmp)[0]; \
+ ((u_int8_t *)&(a))[0] = ((u_int8_t *)&_tmp)[7]; \
+ ((u_int8_t *)&(a))[1] = ((u_int8_t *)&_tmp)[6]; \
+ ((u_int8_t *)&(a))[2] = ((u_int8_t *)&_tmp)[5]; \
+ ((u_int8_t *)&(a))[3] = ((u_int8_t *)&_tmp)[4]; \
+ ((u_int8_t *)&(a))[4] = ((u_int8_t *)&_tmp)[3]; \
+ ((u_int8_t *)&(a))[5] = ((u_int8_t *)&_tmp)[2]; \
+ ((u_int8_t *)&(a))[6] = ((u_int8_t *)&_tmp)[1]; \
+ ((u_int8_t *)&(a))[7] = ((u_int8_t *)&_tmp)[0]; \
}
+#undef P_64_COPYSWAP
+#define P_64_COPYSWAP(a, b) do { \
+ ((u_int8_t *)b)[0] = ((u_int8_t *)a)[7]; \
+ ((u_int8_t *)b)[1] = ((u_int8_t *)a)[6]; \
+ ((u_int8_t *)b)[2] = ((u_int8_t *)a)[5]; \
+ ((u_int8_t *)b)[3] = ((u_int8_t *)a)[4]; \
+ ((u_int8_t *)b)[4] = ((u_int8_t *)a)[3]; \
+ ((u_int8_t *)b)[5] = ((u_int8_t *)a)[2]; \
+ ((u_int8_t *)b)[6] = ((u_int8_t *)a)[1]; \
+ ((u_int8_t *)b)[7] = ((u_int8_t *)a)[0]; \
+} while (0)
#undef P_64_COPY
#define P_64_COPY(a, b) { \
((u_int8_t *)b)[0] = ((u_int8_t *)a)[0]; \
@@ -113,7 +124,7 @@ extern "C" {
P_32_COPYSWAP(&_tmp, a); \
} while (0)
#undef M_32_SWAP
-#define M_32_SWAP(a) P_32_SWAP(&a)
+#define M_32_SWAP(a) P_32_SWAP(&(a))
/*
* Little endian <==> big endian 16-bit swap macros.
@@ -139,8 +150,13 @@ extern "C" {
P_16_COPYSWAP(&_tmp, a); \
} while (0)
#undef M_16_SWAP
-#define M_16_SWAP(a) P_16_SWAP(&a)
+#define M_16_SWAP(a) P_16_SWAP(&(a))
+#undef SWAP64
+#define SWAP64(p) { \
+ P_64_SWAP(p); \
+ (p) += sizeof(u_int64_t); \
+}
#undef SWAP32
#define SWAP32(p) { \
P_32_SWAP(p); \
@@ -168,6 +184,25 @@ extern "C" {
P_32_SWAP(p); \
} while (0)
+#undef DB_NTOHLL_COPYIN
+#define DB_NTOHLL_COPYIN(env, i, p) do { \
+ u_int8_t *tmp; \
+ tmp = (u_int8_t *)&(i); \
+ if (F_ISSET(env, ENV_LITTLEENDIAN)) { \
+ tmp[7] = *p++; \
+ tmp[6] = *p++; \
+ tmp[5] = *p++; \
+ tmp[4] = *p++; \
+ tmp[3] = *p++; \
+ tmp[2] = *p++; \
+ tmp[1] = *p++; \
+ tmp[0] = *p++; \
+ } else { \
+ memcpy(&(i), p, sizeof(u_int64_t)); \
+ p = (u_int8_t *)p + sizeof(u_int64_t); \
+ } \
+} while (0)
+
#undef DB_NTOHL_COPYIN
#define DB_NTOHL_COPYIN(env, i, p) do { \
u_int8_t *tmp; \
@@ -178,7 +213,7 @@ extern "C" {
tmp[1] = *p++; \
tmp[0] = *p++; \
} else { \
- memcpy(&i, p, sizeof(u_int32_t)); \
+ memcpy(&(i), p, sizeof(u_int32_t)); \
p = (u_int8_t *)p + sizeof(u_int32_t); \
} \
} while (0)
@@ -191,11 +226,29 @@ extern "C" {
tmp[1] = *p++; \
tmp[0] = *p++; \
} else { \
- memcpy(&i, p, sizeof(u_int16_t)); \
+ memcpy(&(i), p, sizeof(u_int16_t)); \
p = (u_int8_t *)p + sizeof(u_int16_t); \
} \
} while (0)
+#undef DB_HTONLL_COPYOUT
+#define DB_HTONLL_COPYOUT(env, p, i) do { \
+ u_int8_t *tmp; \
+ tmp = (u_int8_t *)p; \
+ if (F_ISSET(env, ENV_LITTLEENDIAN)) { \
+ *tmp++ = ((u_int8_t *)&(i))[7]; \
+ *tmp++ = ((u_int8_t *)&(i))[6]; \
+ *tmp++ = ((u_int8_t *)&(i))[5]; \
+ *tmp++ = ((u_int8_t *)&(i))[4]; \
+ *tmp++ = ((u_int8_t *)&(i))[3]; \
+ *tmp++ = ((u_int8_t *)&(i))[2]; \
+ *tmp++ = ((u_int8_t *)&(i))[1]; \
+ *tmp++ = ((u_int8_t *)&(i))[0]; \
+ } else \
+ memcpy(p, &(i), sizeof(u_int64_t)); \
+ p = (u_int8_t *)p + sizeof(u_int64_t); \
+} while (0)
+
#undef DB_HTONL_COPYOUT
#define DB_HTONL_COPYOUT(env, p, i) do { \
u_int8_t *tmp; \
@@ -206,7 +259,7 @@ extern "C" {
*tmp++ = ((u_int8_t *)&(i))[1]; \
*tmp++ = ((u_int8_t *)&(i))[0]; \
} else \
- memcpy(p, &i, sizeof(u_int32_t)); \
+ memcpy(p, &(i), sizeof(u_int32_t)); \
p = (u_int8_t *)p + sizeof(u_int32_t); \
} while (0)
@@ -229,6 +282,13 @@ extern "C" {
*/
#define LOG_SWAPPED(env) !F_ISSET(env, ENV_LITTLEENDIAN)
+#define LOGCOPY_64(env, x, p) do { \
+ if (LOG_SWAPPED(env)) \
+ P_64_COPYSWAP((p), (x)); \
+ else \
+ memcpy((x), (p), sizeof(u_int64_t)); \
+} while (0)
+
#define LOGCOPY_32(env, x, p) do { \
if (LOG_SWAPPED(env)) \
P_32_COPYSWAP((p), (x)); \