1/* FreeTDS - Library of routines accessing Sybase and Microsoft databases 2 * Copyright (C) 1998-2011 Brian Bruns 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Boston, MA 02111-1307, USA. 18 */ 19 20#ifndef _tds_sysdep_public_h_ 21#define _tds_sysdep_public_h_ 22 23/* 24 * This file is publicly installed. 25 * MUST not include config.h 26 */ 27 28#if (!defined(_MSC_VER) && defined(__cplusplus) && __cplusplus >= 201103L) || \ 29 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) 30# include <stdint.h> 31#elif (defined(__sun) && defined(__SVR4)) || defined(__hpux) 32# include <inttypes.h> 33#else 34typedef signed char int8_t; /* 8-bit int */ 35typedef unsigned char uint8_t; /* 8-bit int */ 36/* 37 * This is where platform-specific changes need to be made. 38 */ 39# if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) 40# include <winsock2.h> 41# include <ws2tcpip.h> 42# include <windows.h> 43 typedef signed short int16_t; /* 16-bit int */ 44 typedef unsigned short uint16_t; /* 16-bit int */ 45 typedef signed int int32_t; /* 32-bit int */ 46 typedef unsigned int uint32_t; /* 32-bit int */ 47 typedef signed __int64 int64_t; /* 64-bit int */ 48 typedef unsigned __int64 uint64_t; /* 64-bit int */ 49# if !defined(WIN64) && !defined(_WIN64) 50 typedef signed int intptr_t; /* 32-bit int */ 51 typedef unsigned int uintptr_t; /* 32-bit int */ 52# else 53 typedef signed __int64 intptr_t; /* 64-bit int */ 54 typedef unsigned __int64 uintptr_t; /* 64-bit int */ 55# endif 56# else /* defined(WIN32) || defined(_WIN32) || defined(__WIN32__) */ 57 typedef signed @tds_sysdep_int16_type@ int16_t; /* 16-bit int */ 58 typedef unsigned @tds_sysdep_int16_type@ uint16_t; /* 16-bit int */ 59 typedef signed @tds_sysdep_int32_type@ int32_t; /* 32-bit int */ 60 typedef unsigned @tds_sysdep_int32_type@ uint32_t; /* 32-bit int */ 61 typedef signed @tds_sysdep_int64_type@ int64_t; /* 64-bit int */ 62 typedef unsigned @tds_sysdep_int64_type@ uint64_t; /* 64-bit int */ 63 typedef signed @tds_sysdep_intptr_type@ intptr_t; 64 typedef unsigned @tds_sysdep_intptr_type@ uintptr_t; 65# endif 66#endif 67 68#include <float.h> 69 70/* try to understand float sizes using float.h constants */ 71#if FLT_RADIX == 2 72# if FLT_MANT_DIG == 24 && FLT_MAX_EXP == 128 73# define tds_sysdep_real32_type float /* 32-bit real */ 74# elif DBL_MANT_DIG == 24 && DBL_MAX_EXP == 128 75# define tds_sysdep_real32_type double /* 32-bit real */ 76# elif LDBL_MANT_DIG == 24 && LDBL_MAX_EXP == 128 77# define tds_sysdep_real32_type long double /* 32-bit real */ 78# endif 79# if FLT_MANT_DIG == 53 && FLT_MAX_EXP == 1024 80# define tds_sysdep_real64_type float /* 64-bit real */ 81# elif DBL_MANT_DIG == 53 && DBL_MAX_EXP == 1024 82# define tds_sysdep_real64_type double /* 64-bit real */ 83# elif LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 84# define tds_sysdep_real64_type long double /* 64-bit real */ 85# endif 86# if !defined(tds_sysdep_real32_type) || !defined(tds_sysdep_real64_type) 87# error Some float type was not found! 88# endif 89#else 90# if FLT_DIG == 6 && FLT_MAX_10_EXP == 38 91# define tds_sysdep_real32_type float /* 32-bit real */ 92# elif DBL_DIG == 6 && DBL_MAX_10_EXP == 38 93# define tds_sysdep_real32_type double /* 32-bit real */ 94# elif LDBL_DIG == 6 && LDBL_MAX_10_EXP == 38 95# define tds_sysdep_real32_type long double /* 32-bit real */ 96# endif 97# if FLT_DIG == 15 && FLT_MAX_10_EXP == 308 98# define tds_sysdep_real64_type float /* 64-bit real */ 99# elif DBL_DIG == 15 && DBL_MAX_10_EXP == 308 100# define tds_sysdep_real64_type double /* 64-bit real */ 101# elif LDBL_DIG == 15 && LDBL_MAX_10_EXP == 308 102# define tds_sysdep_real64_type long double /* 64-bit real */ 103# endif 104#endif 105 106/* fall back to configure.ac types */ 107#ifndef tds_sysdep_real32_type 108#define tds_sysdep_real32_type @tds_sysdep_real32_type@ /* 32-bit real */ 109#endif /* !tds_sysdep_real32_type */ 110 111#ifndef tds_sysdep_real64_type 112#define tds_sysdep_real64_type @tds_sysdep_real64_type@ /* 64-bit real */ 113#endif /* !tds_sysdep_real64_type */ 114 115#if !defined(MSDBLIB) && !defined(SYBDBLIB) 116@dblib_define@ 117#endif 118#if defined(MSDBLIB) && defined(SYBDBLIB) 119#error MSDBLIB and SYBDBLIB cannot both be defined 120#endif 121 122#endif /* _tds_sysdep_public_h_ */ 123