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 */ 507