FreeTDS API
Loading...
Searching...
No Matches
sysdep_private.h
1/* FreeTDS - Library of routines accessing Sybase and Microsoft databases
2 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Brian Bruns
3 * Copyright (C) 2010 Frediano Ziglio
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
19 */
20
21#ifndef _tds_sysdep_private_h_
22#define _tds_sysdep_private_h_
23
24#define TDS_ADDITIONAL_SPACE 16
25
26#ifdef MSG_NOSIGNAL
27# define TDS_NOSIGNAL MSG_NOSIGNAL
28#else
29# define TDS_NOSIGNAL 0L
30#endif
31
32#ifdef __cplusplus
33#define TDS_EXTERN_C extern "C"
34#else
35#define TDS_EXTERN_C
36#endif
37
38#ifdef __INCvxWorksh
39#include <ioLib.h> /* for FIONBIO */
40#endif /* __INCvxWorksh */
41
42#if defined(DOS32X)
43#define READSOCKET(a,b,c) recv((a), (b), (c), TDS_NOSIGNAL)
44#define WRITESOCKET(a,b,c) send((a), (b), (c), TDS_NOSIGNAL)
45#define CLOSESOCKET(a) closesocket((a))
46#define IOCTLSOCKET(a,b,c) ioctlsocket((a), (b), (char*)(c))
47#define SOCKLEN_T int
48#define select select_s
49typedef int pid_t;
50#define strcasecmp stricmp
51#define strncasecmp strnicmp
52/* TODO this has nothing to do with ip ... */
53#define getpid() _gethostid()
54#endif /* defined(DOS32X) */
55
56#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(_WIN64)
57#include <freetds/windows.h>
58#define READSOCKET(a,b,c) recv((a), (char *) (b), (c), TDS_NOSIGNAL)
59#define WRITESOCKET(a,b,c) send((a), (const char *) (b), (c), TDS_NOSIGNAL)
60#define CLOSESOCKET(a) closesocket((a))
61#define IOCTLSOCKET(a,b,c) ioctlsocket((a), (b), (c))
62#define SOCKLEN_T int
63TDS_EXTERN_C int tds_socket_init(void);
64#define INITSOCKET() tds_socket_init()
65TDS_EXTERN_C void tds_socket_done(void);
66#define DONESOCKET() tds_socket_done()
67#define NETDB_REENTRANT 1 /* BSD-style netdb interface is reentrant */
68
69#define TDSSOCK_EINTR WSAEINTR
70#define TDSSOCK_EINPROGRESS WSAEWOULDBLOCK
71#define TDSSOCK_ETIMEDOUT WSAETIMEDOUT
72#define TDSSOCK_WOULDBLOCK(e) ((e)==WSAEWOULDBLOCK)
73#define TDSSOCK_ECONNRESET WSAECONNRESET
74#define sock_errno WSAGetLastError()
75#define set_sock_errno(err) WSASetLastError(err)
76#define sock_strerror(n) tds_prwsaerror(n)
77#define sock_strerror_free(s) tds_prwsaerror_free(s)
78#ifndef __MINGW32__
79typedef DWORD pid_t;
80#endif
81#undef strcasecmp
82#define strcasecmp stricmp
83#undef strncasecmp
84#define strncasecmp strnicmp
85#if defined(HAVE__SNPRINTF) && !defined(HAVE_SNPRINTF)
86#define snprintf _snprintf
87#endif
88
89#ifndef WIN32
90#define WIN32 1
91#endif
92
93#if defined(_WIN64) && !defined(WIN64)
94#define WIN64 1
95#endif
96
97#define TDS_SDIR_SEPARATOR "\\"
98
99/* use macros to use new style names */
100#if defined(__MSVCRT__) || defined(_MSC_VER)
101/* Use API as always present and not causing problems */
102#undef getpid
103#define getpid() GetCurrentProcessId()
104#define strdup(s) _strdup(s)
105#define unlink(f) _unlink(f)
106#define putenv(s) _putenv(s)
107#undef fileno
108#define fileno(f) _fileno(f)
109#undef close
110#define close(f) _close(f)
111#undef open
112#define open(fn,...) _open(fn,__VA_ARGS__)
113#undef dup2
114#define dup2(o,n) _dup2(o,n)
115#define stricmp(s1,s2) _stricmp(s1,s2)
116#define strnicmp(s1,s2,n) _strnicmp(s1,s2,n)
117#endif
118
119#endif /* defined(WIN32) || defined(_WIN32) || defined(__WIN32__) */
120
121#ifndef sock_errno
122#define sock_errno errno
123#endif
124
125#ifndef set_sock_errno
126#define set_sock_errno(err) do { errno = (err); } while(0)
127#endif
128
129#ifndef sock_strerror
130#define sock_strerror(n) strerror(n)
131#define sock_strerror_free(s) do {} while(0)
132#endif
133
134#ifndef TDSSOCK_EINTR
135#define TDSSOCK_EINTR EINTR
136#endif
137
138#ifndef TDSSOCK_EINPROGRESS
139#define TDSSOCK_EINPROGRESS EINPROGRESS
140#endif
141
142#ifndef TDSSOCK_ETIMEDOUT
143#define TDSSOCK_ETIMEDOUT ETIMEDOUT
144#endif
145
146#ifndef TDSSOCK_WOULDBLOCK
147# if defined(EWOULDBLOCK) && EAGAIN != EWOULDBLOCK
148# define TDSSOCK_WOULDBLOCK(e) ((e)==EAGAIN||(e)==EWOULDBLOCK)
149# else
150# define TDSSOCK_WOULDBLOCK(e) ((e)==EAGAIN)
151# endif
152#endif
153
154#ifndef TDSSOCK_ECONNRESET
155#define TDSSOCK_ECONNRESET ECONNRESET
156#endif
157
158#ifndef INITSOCKET
159#define INITSOCKET() 0
160#endif /* !INITSOCKET */
161
162#ifndef DONESOCKET
163#define DONESOCKET() do { } while(0)
164#endif /* !DONESOCKET */
165
166#ifndef READSOCKET
167# ifdef MSG_NOSIGNAL
168# define READSOCKET(s,b,l) recv((s), (b), (l), MSG_NOSIGNAL)
169# else
170# define READSOCKET(s,b,l) read((s), (b), (l))
171# endif
172#endif /* !READSOCKET */
173
174#ifndef WRITESOCKET
175# ifdef MSG_NOSIGNAL
176# define WRITESOCKET(s,b,l) send((s), (b), (l), MSG_NOSIGNAL)
177# else
178# define WRITESOCKET(s,b,l) write((s), (b), (l))
179# endif
180#endif /* !WRITESOCKET */
181
182#ifndef CLOSESOCKET
183#define CLOSESOCKET(s) close((s))
184#endif /* !CLOSESOCKET */
185
186#ifndef IOCTLSOCKET
187#define IOCTLSOCKET(s,b,l) ioctl((s), (b), (l))
188#endif /* !IOCTLSOCKET */
189
190#ifndef SOCKLEN_T
191# define SOCKLEN_T socklen_t
192#endif
193
194#if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32)
195typedef int TDS_SYS_SOCKET;
196#define INVALID_SOCKET -1
197#define TDS_IS_SOCKET_INVALID(s) ((s) < 0)
198#else
199typedef SOCKET TDS_SYS_SOCKET;
200#define TDS_IS_SOCKET_INVALID(s) ((s) == INVALID_SOCKET)
201#endif
202
203#define tds_accept accept
204#define tds_getpeername getpeername
205#define tds_getsockopt getsockopt
206#define tds_getsockname getsockname
207#define tds_recvfrom recvfrom
208
209#if defined(__hpux__) && SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
210# if HAVE__XPG_ACCEPT
211# undef tds_accept
212# define tds_accept _xpg_accept
213# elif HAVE___ACCEPT
214# undef tds_accept
215# define tds_accept __accept
216# endif
217# if HAVE__XPG_GETPEERNAME
218# undef tds_getpeername
219# define tds_getpeername _xpg_getpeername
220# elif HAVE___GETPEERNAME
221# undef tds_getpeername
222# define tds_getpeername __getpeername
223# endif
224# if HAVE__XPG_GETSOCKOPT
225# undef tds_getsockopt
226# define tds_getsockopt _xpg_getsockopt
227# elif HAVE___GETSOCKOPT
228# undef tds_getsockopt
229# define tds_getsockopt __getsockopt
230# endif
231# if HAVE__XPG_GETSOCKNAME
232# undef tds_getsockname
233# define tds_getsockname _xpg_getsockname
234# elif HAVE___GETSOCKNAME
235# undef tds_getsockname
236# define tds_getsockname __getsockname
237# endif
238# if HAVE__XPG_RECVFROM
239# undef tds_recvfrom
240# define tds_recvfrom _xpg_recvfrom
241# elif HAVE___RECVFROM
242# undef tds_recvfrom
243# define tds_recvfrom __recvfrom
244# endif
245#endif
246
247#ifndef TDS_SDIR_SEPARATOR
248#define TDS_SDIR_SEPARATOR "/"
249#endif /* !TDS_SDIR_SEPARATOR */
250
251#ifdef HAVE_STDINT_H
252#include <stdint.h>
253#endif
254
255#ifdef HAVE_INTTYPES_H
256#include <inttypes.h>
257#endif
258
259#ifndef PRId64
260#define PRId64 TDS_I64_PREFIX "d"
261#endif
262#ifndef PRIu64
263#define PRIu64 TDS_I64_PREFIX "u"
264#endif
265#ifndef PRIx64
266#define PRIx64 TDS_I64_PREFIX "x"
267#endif
268
269#ifndef UINT64_C
270# if SIZEOF_INT >= 8
271# define UINT64_C(c) c ## U
272# define INT64_C(c) c
273# elif SIZEOF_LONG >= 8
274# define UINT64_C(c) c ## UL
275# define INT64_C(c) c ## L
276# elif SIZEOF_LONG_LONG >= 8
277# define UINT64_C(c) c ## ULL
278# define INT64_C(c) c ## LL
279# elif SIZEOF___INT64 >= 8
280# define UINT64_C(c) c ## i64
281# define INT64_C(c) c ## ui64
282# else
283# error Unable to understand how to define 64 bit constants
284# endif
285#endif
286
287#include <freetds/sysdep_types.h>
288
289#endif /* _tds_sysdep_private_h_ */