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>