Annotation of embedaddon/php/ext/mysqlnd/mysqlnd_portability.h, revision 1.1
1.1 ! misho 1: /* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
! 2: This file is public domain and comes with NO WARRANTY of any kind */
! 3:
! 4: /*
! 5: Parts of the original, which are not applicable to mysqlnd have been removed.
! 6:
! 7: With small modifications, mostly casting but adding few more macros by
! 8: Andrey Hristov <andrey@mysql.com> . The additions are in the public domain and
! 9: were added to improve the header file, to get it more consistent.
! 10: */
! 11:
! 12: #ifndef MYSQLND_PORTABILITY_H
! 13: #define MYSQLND_PORTABILITY_H
! 14:
! 15:
! 16:
! 17: /* Comes from global.h as OFFSET, renamed to STRUCT_OFFSET */
! 18: #define STRUCT_OFFSET(t, f) ((size_t)(char *)&((t *)0)->f)
! 19:
! 20: #ifndef __attribute
! 21: #if !defined(__GNUC__)
! 22: #define __attribute(A)
! 23: #endif
! 24: #endif
! 25:
! 26: #ifdef __CYGWIN__
! 27: /* We use a Unix API, so pretend it's not Windows */
! 28: #undef WIN
! 29: #undef WIN32
! 30: #undef _WIN
! 31: #undef _WIN32
! 32: #undef _WIN64
! 33: #undef __WIN__
! 34: #undef __WIN32__
! 35: #endif /* __CYGWIN__ */
! 36:
! 37: #if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)
! 38: # include "ext/mysqlnd/config-win.h"
! 39: #else
! 40: # include <ext/mysqlnd/php_mysqlnd_config.h>
! 41: #endif /* _WIN32... */
! 42:
! 43: #if __STDC_VERSION__ < 199901L && !defined(atoll)
! 44: /* "inline" is a keyword */
! 45: #define atoll atol
! 46: #endif
! 47:
! 48:
! 49: #ifdef HAVE_SYS_TYPES_H
! 50: #include <sys/types.h>
! 51: #endif
! 52:
! 53: #ifdef HAVE_STDINT_H
! 54: #include <stdint.h>
! 55: #endif
! 56:
! 57: #if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG)
! 58: #define _LONG_LONG 1 /* For AIX string library */
! 59: #endif
! 60:
! 61:
! 62: /* Go around some bugs in different OS and compilers */
! 63: #if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H)
! 64: #include <sys/stream.h> /* HPUX 10.20 defines ulong here. UGLY !!! */
! 65: #define HAVE_ULONG
! 66: #endif
! 67:
! 68:
! 69: #if SIZEOF_LONG_LONG > 4
! 70: #define HAVE_LONG_LONG 1
! 71: #endif
! 72:
! 73:
! 74: /* Typdefs for easyier portability */
! 75: #ifndef HAVE_INT8_T
! 76: #ifndef HAVE_INT8
! 77: typedef signed char int8_t; /* Signed integer >= 8 bits */
! 78: #else
! 79: typedef int8 int8_t; /* Signed integer >= 8 bits */
! 80: #endif
! 81: #endif
! 82:
! 83: #ifndef HAVE_UINT8_T
! 84: #ifndef HAVE_UINT8
! 85: typedef unsigned char uint8_t; /* Unsigned integer >= 8 bits */
! 86: #else
! 87: typedef uint8 uint8_t; /* Signed integer >= 8 bits */
! 88: #endif
! 89: #endif
! 90:
! 91: #ifndef HAVE_INT16_T
! 92: #ifndef HAVE_INT16
! 93: typedef signed short int16_t; /* Signed integer >= 16 bits */
! 94: #else
! 95: typedef int16 int16_t; /* Signed integer >= 16 bits */
! 96: #endif
! 97: #endif
! 98:
! 99: #ifndef HAVE_UINT16_T
! 100: #ifndef HAVE_UINT16
! 101: typedef unsigned short uint16_t; /* Signed integer >= 16 bits */
! 102: #else
! 103: typedef uint16 uint16_t; /* Signed integer >= 16 bits */
! 104: #endif
! 105: #endif
! 106:
! 107:
! 108: #ifndef HAVE_INT32_T
! 109: #ifdef HAVE_INT32
! 110: typedef int32 int32_t;
! 111: #elif SIZEOF_INT == 4
! 112: typedef signed int int32_t;
! 113: #elif SIZEOF_LONG == 4
! 114: typedef signed long int32_t;
! 115: #else
! 116: error "Neither int nor long is of 4 bytes width"
! 117: #endif
! 118: #endif /* HAVE_INT32_T */
! 119:
! 120: #ifndef HAVE_UINT32_T
! 121: #ifdef HAVE_UINT32
! 122: typedef uint32 uint32_t;
! 123: #elif SIZEOF_INT == 4
! 124: typedef unsigned int uint32_t;
! 125: #elif SIZEOF_LONG == 4
! 126: typedef unsigned long uint32_t;
! 127: #else
! 128: #error "Neither int nor long is of 4 bytes width"
! 129: #endif
! 130: #endif /* HAVE_UINT32_T */
! 131:
! 132: #ifndef HAVE_INT64_T
! 133: #ifdef HAVE_INT64
! 134: typedef int64 int64_t;
! 135: #elif SIZEOF_INT == 8
! 136: typedef signed int int64_t;
! 137: #elif SIZEOF_LONG == 8
! 138: typedef signed long int64_t;
! 139: #elif SIZEOF_LONG_LONG == 8
! 140: #ifdef PHP_WIN32
! 141: typedef __int64 int64_t;
! 142: #else
! 143: typedef signed long long int64_t;
! 144: #endif
! 145: #else
! 146: #error "Neither int nor long nor long long is of 8 bytes width"
! 147: #endif
! 148: #endif /* HAVE_INT64_T */
! 149:
! 150: #ifndef HAVE_UINT64_T
! 151: #ifdef HAVE_UINT64
! 152: typedef uint64 uint64_t;
! 153: #elif SIZEOF_INT == 8
! 154: typedef unsigned int uint64_t;
! 155: #elif SIZEOF_LONG == 8
! 156: typedef unsigned long uint64_t;
! 157: #elif SIZEOF_LONG_LONG == 8
! 158: #ifdef PHP_WIN32
! 159: typedef unsigned __int64 uint64_t;
! 160: #else
! 161: typedef unsigned long long uint64_t;
! 162: #endif
! 163: #else
! 164: #error "Neither int nor long nor long long is of 8 bytes width"
! 165: #endif
! 166: #endif /* HAVE_INT64_T */
! 167:
! 168:
! 169: #ifdef PHP_WIN32
! 170: #define MYSQLND_LLU_SPEC "%I64u"
! 171: #define MYSQLND_LL_SPEC "%I64d"
! 172: #define MYSQLND_SZ_T_SPEC "%Id"
! 173: #ifndef L64
! 174: #define L64(x) x##i64
! 175: #endif
! 176: #else
! 177:
! 178: #if __i386__
! 179: #define MYSQLND_LL_SPEC "%lli"
! 180: #define MYSQLND_LLU_SPEC "%llu"
! 181: #endif
! 182:
! 183: #if __ia64__
! 184: #define MYSQLND_LL_SPEC "%li"
! 185: #define MYSQLND_LLU_SPEC "%lu"
! 186: #endif
! 187:
! 188: #if __powerpc64__ || __ppc64__
! 189: #define MYSQLND_LL_SPEC "%li"
! 190: #define MYSQLND_LLU_SPEC "%lu"
! 191: #endif
! 192:
! 193: #if (__powerpc__ || __ppc__ ) && !(__powerpc64__ || __ppc64__)
! 194: #define MYSQLND_LL_SPEC "%lli"
! 195: #define MYSQLND_LLU_SPEC "%llu"
! 196: #endif
! 197:
! 198: #if __x86_64__
! 199: #define MYSQLND_LL_SPEC "%li"
! 200: #define MYSQLND_LLU_SPEC "%lu"
! 201: #endif
! 202:
! 203: #if __s390x__
! 204: #define MYSQLND_LL_SPEC "%li"
! 205: #define MYSQLND_LLU_SPEC "%lu"
! 206: #endif
! 207:
! 208: #if __s390__ && !__s390x__
! 209: #define MYSQLND_LL_SPEC "%lli"
! 210: #define MYSQLND_LLU_SPEC "%llu"
! 211: #endif
! 212:
! 213: #ifdef _AIX
! 214: #define MYSQLND_LL_SPEC "%lli"
! 215: #define MYSQLND_LLU_SPEC "%llu"
! 216: #endif
! 217:
! 218: #ifndef MYSQLND_LL_SPEC
! 219: #if SIZEOF_LONG == 8
! 220: #define MYSQLND_LL_SPEC "%li"
! 221: #elif SIZEOF_LONG == 4
! 222: #define MYSQLND_LL_SPEC "%lli"
! 223: #endif
! 224: #endif
! 225:
! 226: #ifndef MYSQLND_LLU_SPEC
! 227: #if SIZEOF_LONG == 8
! 228: #define MYSQLND_LLU_SPEC "%lu"
! 229: #elif SIZEOF_LONG == 4
! 230: #define MYSQLND_LLU_SPEC "%llu"
! 231: #endif
! 232: #endif /* MYSQLND_LLU_SPEC*/
! 233:
! 234:
! 235: #define MYSQLND_SZ_T_SPEC "%zd"
! 236: #ifndef L64
! 237: #define L64(x) x##LL
! 238: #endif
! 239: #endif
! 240:
! 241:
! 242: #define int1store(T,A) do { *((int8_t*) (T)) = (A); } while(0)
! 243: #define uint1korr(A) (*(((uint8_t*)(A))))
! 244:
! 245: /* Bit values are sent in reverted order of bytes, compared to normal !!! */
! 246: #define bit_uint2korr(A) ((uint16_t) (((uint16_t) (((unsigned char*) (A))[1])) +\
! 247: ((uint16_t) (((unsigned char*) (A))[0]) << 8)))
! 248: #define bit_uint3korr(A) ((uint32_t) (((uint32_t) (((unsigned char*) (A))[2])) +\
! 249: (((uint32_t) (((unsigned char*) (A))[1])) << 8) +\
! 250: (((uint32_t) (((unsigned char*) (A))[0])) << 16)))
! 251: #define bit_uint4korr(A) ((uint32_t) (((uint32_t) (((unsigned char*) (A))[3])) +\
! 252: (((uint32_t) (((unsigned char*) (A))[2])) << 8) +\
! 253: (((uint32_t) (((unsigned char*) (A))[1])) << 16) +\
! 254: (((uint32_t) (((unsigned char*) (A))[0])) << 24)))
! 255: #define bit_uint5korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[4])) +\
! 256: (((uint32_t) (((unsigned char*) (A))[3])) << 8) +\
! 257: (((uint32_t) (((unsigned char*) (A))[2])) << 16) +\
! 258: (((uint32_t) (((unsigned char*) (A))[1])) << 24)) +\
! 259: (((uint64_t) (((unsigned char*) (A))[0])) << 32))
! 260: #define bit_uint6korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[5])) +\
! 261: (((uint32_t) (((unsigned char*) (A))[4])) << 8) +\
! 262: (((uint32_t) (((unsigned char*) (A))[3])) << 16) +\
! 263: (((uint32_t) (((unsigned char*) (A))[2])) << 24)) +\
! 264: (((uint64_t) (((uint32_t) (((unsigned char*) (A))[1])) +\
! 265: (((uint32_t) (((unsigned char*) (A))[0]) << 8)))) <<\
! 266: 32))
! 267: #define bit_uint7korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[6])) +\
! 268: (((uint32_t) (((unsigned char*) (A))[5])) << 8) +\
! 269: (((uint32_t) (((unsigned char*) (A))[4])) << 16) +\
! 270: (((uint32_t) (((unsigned char*) (A))[3])) << 24)) +\
! 271: (((uint64_t) (((uint32_t) (((unsigned char*) (A))[2])) +\
! 272: (((uint32_t) (((unsigned char*) (A))[1])) << 8) +\
! 273: (((uint32_t) (((unsigned char*) (A))[0])) << 16))) <<\
! 274: 32))
! 275: #define bit_uint8korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[7])) +\
! 276: (((uint32_t) (((unsigned char*) (A))[6])) << 8) +\
! 277: (((uint32_t) (((unsigned char*) (A))[5])) << 16) +\
! 278: (((uint32_t) (((unsigned char*) (A))[4])) << 24)) +\
! 279: (((uint64_t) (((uint32_t) (((unsigned char*) (A))[3])) +\
! 280: (((uint32_t) (((unsigned char*) (A))[2])) << 8) +\
! 281: (((uint32_t) (((unsigned char*) (A))[1])) << 16) +\
! 282: (((uint32_t) (((unsigned char*) (A))[0])) << 24))) <<\
! 283: 32))
! 284:
! 285:
! 286: /*
! 287: ** Define-funktions for reading and storing in machine independent format
! 288: ** (low byte first)
! 289: */
! 290:
! 291: /* Optimized store functions for Intel x86, non-valid for WIN64. __i386__ is GCC */
! 292: #if defined(__i386__) && !defined(_WIN64)
! 293: #define sint2korr(A) (*((int16_t *) (A)))
! 294: #define sint3korr(A) ((int32_t) ((((zend_uchar) (A)[2]) & 128) ? \
! 295: (((uint32_t) 255L << 24) | \
! 296: (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
! 297: (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
! 298: ((uint32_t) (zend_uchar) (A)[0])) : \
! 299: (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
! 300: (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
! 301: ((uint32_t) (zend_uchar) (A)[0])))
! 302: #define sint4korr(A) (*((long *) (A)))
! 303:
! 304: #define uint2korr(A) (*((uint16_t *) (A)))
! 305: #define uint3korr(A) (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\
! 306: (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
! 307: (((uint32_t) ((zend_uchar) (A)[2])) << 16))
! 308: #define uint4korr(A) (*((unsigned long *) (A)))
! 309:
! 310:
! 311:
! 312: #define uint8korr(A) (*((uint64_t *) (A)))
! 313: #define sint8korr(A) (*((int64_t *) (A)))
! 314: #define int2store(T,A) *((uint16_t*) (T))= (uint16_t) (A)
! 315: #define int3store(T,A) { \
! 316: *(T)= (zend_uchar) ((A));\
! 317: *(T+1)=(zend_uchar) (((uint32_t) (A) >> 8));\
! 318: *(T+2)=(zend_uchar) (((A) >> 16)); }
! 319: #define int4store(T,A) *((long *) (T))= (long) (A)
! 320: #define int5store(T,A) { \
! 321: *((zend_uchar *)(T))= (zend_uchar)((A));\
! 322: *(((zend_uchar *)(T))+1)=(zend_uchar) (((A) >> 8));\
! 323: *(((zend_uchar *)(T))+2)=(zend_uchar) (((A) >> 16));\
! 324: *(((zend_uchar *)(T))+3)=(zend_uchar) (((A) >> 24)); \
! 325: *(((zend_uchar *)(T))+4)=(zend_uchar) (((A) >> 32)); }
! 326:
! 327: /* From Andrey Hristov, based on int5store() */
! 328: #define int6store(T,A) { \
! 329: *(((zend_uchar *)(T)))= (zend_uchar)((A));\
! 330: *(((zend_uchar *)(T))+1))=(zend_uchar) (((A) >> 8));\
! 331: *(((zend_uchar *)(T))+2))=(zend_uchar) (((A) >> 16));\
! 332: *(((zend_uchar *)(T))+3))=(zend_uchar) (((A) >> 24)); \
! 333: *(((zend_uchar *)(T))+4))=(zend_uchar) (((A) >> 32)); \
! 334: *(((zend_uchar *)(T))+5))=(zend_uchar) (((A) >> 40)); }
! 335:
! 336: #define int8store(T,A) *((uint64_t *) (T))= (uint64_t) (A)
! 337:
! 338: typedef union {
! 339: double v;
! 340: long m[2];
! 341: } float8get_union;
! 342: #define float8get(V,M) { ((float8get_union *)&(V))->m[0] = *((long*) (M)); \
! 343: ((float8get_union *)&(V))->m[1] = *(((long*) (M))+1); }
! 344: #define float8store(T,V) { *((long *) (T)) = ((float8get_union *)&(V))->m[0]; \
! 345: *(((long *) (T))+1) = ((float8get_union *)&(V))->m[1]; }
! 346: #define float4get(V,M) { *((float *) &(V)) = *((float*) (M)); }
! 347: /* From Andrey Hristov based on float8get */
! 348: #define floatget(V,M) memcpy((char*) &(V),(char*) (M),sizeof(float))
! 349: #endif /* __i386__ */
! 350:
! 351:
! 352: /* If we haven't defined sint2korr, which is because the platform is not x86 or it's WIN64 */
! 353: #ifndef sint2korr
! 354: #define sint2korr(A) (int16_t) (((int16_t) ((zend_uchar) (A)[0])) +\
! 355: ((int16_t) ((int16_t) (A)[1]) << 8))
! 356: #define sint3korr(A) ((int32_t) ((((zend_uchar) (A)[2]) & 128) ? \
! 357: (((uint32_t) 255L << 24) | \
! 358: (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
! 359: (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
! 360: ((uint32_t) (zend_uchar) (A)[0])) : \
! 361: (((uint32_t) (zend_uchar) (A)[2]) << 16) |\
! 362: (((uint32_t) (zend_uchar) (A)[1]) << 8) | \
! 363: ((uint32_t) (zend_uchar) (A)[0])))
! 364: #define sint4korr(A) (int32_t) (((int32_t) ((zend_uchar) (A)[0])) +\
! 365: (((int32_t) ((zend_uchar) (A)[1]) << 8)) +\
! 366: (((int32_t) ((zend_uchar) (A)[2]) << 16)) +\
! 367: (((int32_t) ((int16_t) (A)[3]) << 24)))
! 368:
! 369: #define sint8korr(A) (int64_t) uint8korr(A)
! 370: #define uint2korr(A) (uint16_t) (((uint16_t) ((zend_uchar) (A)[0])) +\
! 371: ((uint16_t) ((zend_uchar) (A)[1]) << 8))
! 372: #define uint3korr(A) (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\
! 373: (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
! 374: (((uint32_t) ((zend_uchar) (A)[2])) << 16))
! 375: #define uint4korr(A) (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\
! 376: (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
! 377: (((uint32_t) ((zend_uchar) (A)[2])) << 16) +\
! 378: (((uint32_t) ((zend_uchar) (A)[3])) << 24))
! 379:
! 380: #define uint8korr(A) ((uint64_t)(((uint32_t) ((zend_uchar) (A)[0])) +\
! 381: (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\
! 382: (((uint32_t) ((zend_uchar) (A)[2])) << 16) +\
! 383: (((uint32_t) ((zend_uchar) (A)[3])) << 24)) +\
! 384: (((uint64_t) (((uint32_t) ((zend_uchar) (A)[4])) +\
! 385: (((uint32_t) ((zend_uchar) (A)[5])) << 8) +\
! 386: (((uint32_t) ((zend_uchar) (A)[6])) << 16) +\
! 387: (((uint32_t) ((zend_uchar) (A)[7])) << 24))) << 32))
! 388:
! 389:
! 390: #define int2store(T,A) do { uint32_t def_temp= (uint32_t) (A) ;\
! 391: *((zend_uchar*) (T)) = (zend_uchar)(def_temp); \
! 392: *((zend_uchar*) (T+1)) = (zend_uchar)((def_temp >> 8)); } while (0)
! 393: #define int3store(T,A) do { /*lint -save -e734 */\
! 394: *(((char *)(T))) = (char) ((A));\
! 395: *(((char *)(T))+1) = (char) (((A) >> 8));\
! 396: *(((char *)(T))+2) = (char) (((A) >> 16)); \
! 397: /*lint -restore */} while (0)
! 398: #define int4store(T,A) do { \
! 399: *(((char *)(T))) = (char) ((A));\
! 400: *(((char *)(T))+1) = (char) (((A) >> 8));\
! 401: *(((char *)(T))+2) = (char) (((A) >> 16));\
! 402: *(((char *)(T))+3) = (char) (((A) >> 24)); } while (0)
! 403: #define int5store(T,A) do { \
! 404: *(((char *)(T))) = (char)((A));\
! 405: *(((char *)(T))+1) = (char)(((A) >> 8));\
! 406: *(((char *)(T))+2) = (char)(((A) >> 16));\
! 407: *(((char *)(T))+3) = (char)(((A) >> 24)); \
! 408: *(((char *)(T))+4) = (char)(((A) >> 32)); } while (0)
! 409: /* Based on int5store() from Andrey Hristov */
! 410: #define int6store(T,A) do { \
! 411: *(((char *)(T))) = (char)((A));\
! 412: *(((char *)(T))+1) = (char)(((A) >> 8));\
! 413: *(((char *)(T))+2) = (char)(((A) >> 16));\
! 414: *(((char *)(T))+3) = (char)(((A) >> 24)); \
! 415: *(((char *)(T))+4) = (char)(((A) >> 32)); \
! 416: *(((char *)(T))+5) = (char)(((A) >> 40)); } while (0)
! 417: #define int8store(T,A) { uint32_t def_temp= (uint32_t) (A), def_temp2= (uint32_t) ((A) >> 32); \
! 418: int4store((T),def_temp); \
! 419: int4store((T+4),def_temp2); \
! 420: }
! 421: #ifdef WORDS_BIGENDIAN
! 422: #define float4get(V,M) do { float def_temp;\
! 423: ((char*) &def_temp)[0] = (M)[3];\
! 424: ((char*) &def_temp)[1] = (M)[2];\
! 425: ((char*) &def_temp)[2] = (M)[1];\
! 426: ((char*) &def_temp)[3] = (M)[0];\
! 427: (V)=def_temp; } while (0)
! 428: #define float8store(T,V) do { \
! 429: *(((char *)(T))) = (char) ((char *) &(V))[7];\
! 430: *(((char *)(T))+1) = (char) ((char *) &(V))[6];\
! 431: *(((char *)(T))+2) = (char) ((char *) &(V))[5];\
! 432: *(((char *)(T))+3) = (char) ((char *) &(V))[4];\
! 433: *(((char *)(T))+4) = (char) ((char *) &(V))[3];\
! 434: *(((char *)(T))+5) = (char) ((char *) &(V))[2];\
! 435: *(((char *)(T))+6) = (char) ((char *) &(V))[1];\
! 436: *(((char *)(T))+7) = (char) ((char *) &(V))[0]; } while (0)
! 437:
! 438: #define float8get(V,M) do { double def_temp;\
! 439: ((char*) &def_temp)[0] = (M)[7];\
! 440: ((char*) &def_temp)[1] = (M)[6];\
! 441: ((char*) &def_temp)[2] = (M)[5];\
! 442: ((char*) &def_temp)[3] = (M)[4];\
! 443: ((char*) &def_temp)[4] = (M)[3];\
! 444: ((char*) &def_temp)[5] = (M)[2];\
! 445: ((char*) &def_temp)[6] = (M)[1];\
! 446: ((char*) &def_temp)[7] = (M)[0];\
! 447: (V) = def_temp; \
! 448: } while (0)
! 449: #else
! 450: #define float4get(V,M) memcpy((char*) &(V),(char*) (M),sizeof(float))
! 451:
! 452: #if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
! 453: #define float8store(T,V) do { \
! 454: *(((char *)(T)))= ((char *) &(V))[4];\
! 455: *(((char *)(T))+1)=(char) ((char *) &(V))[5];\
! 456: *(((char *)(T))+2)=(char) ((char *) &(V))[6];\
! 457: *(((char *)(T))+3)=(char) ((char *) &(V))[7];\
! 458: *(((char *)(T))+4)=(char) ((char *) &(V))[0];\
! 459: *(((char *)(T))+5)=(char) ((char *) &(V))[1];\
! 460: *(((char *)(T))+6)=(char) ((char *) &(V))[2];\
! 461: *(((char *)(T))+7)=(char) ((char *) &(V))[3];} while (0)
! 462: #define float8get(V,M) do { double def_temp;\
! 463: ((char*) &def_temp)[0]=(M)[4];\
! 464: ((char*) &def_temp)[1]=(M)[5];\
! 465: ((char*) &def_temp)[2]=(M)[6];\
! 466: ((char*) &def_temp)[3]=(M)[7];\
! 467: ((char*) &def_temp)[4]=(M)[0];\
! 468: ((char*) &def_temp)[5]=(M)[1];\
! 469: ((char*) &def_temp)[6]=(M)[2];\
! 470: ((char*) &def_temp)[7]=(M)[3];\
! 471: (V) = def_temp; } while (0)
! 472: #endif /* __FLOAT_WORD_ORDER */
! 473:
! 474: #endif /* WORDS_BIGENDIAN */
! 475:
! 476: #endif /* sint2korr */
! 477: /* To here if the platform is not x86 or it's WIN64 */
! 478:
! 479:
! 480: /* Define-funktions for reading and storing in machine format from/to
! 481: short/long to/from some place in memory V should be a (not
! 482: register) variable, M is a pointer to byte */
! 483:
! 484: #ifndef float8get
! 485:
! 486: #ifdef WORDS_BIGENDIAN
! 487: #define float8get(V,M) memcpy((char*) &(V),(char*) (M), sizeof(double))
! 488: #define float8store(T,V) memcpy((char*) (T),(char*) &(V), sizeof(double))
! 489: #else
! 490: #define float8get(V,M) memcpy((char*) &(V),(char*) (M),sizeof(double))
! 491: #define float8store(T,V) memcpy((char*) (T),(char*) &(V),sizeof(double))
! 492: #endif /* WORDS_BIGENDIAN */
! 493:
! 494: #endif /* float8get */
! 495:
! 496: #endif /* MYSQLND_PORTABILITY_H */
! 497:
! 498:
! 499: /*
! 500: * Local variables:
! 501: * tab-width: 4
! 502: * c-basic-offset: 4
! 503: * End:
! 504: * vim600: noet sw=4 ts=4 fdm=marker
! 505: * vim<600: noet sw=4 ts=4
! 506: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>