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
33extern "C"
34{
35#if 0
36}
37#endif
38#endif
39
40#ifdef __INCvxWorksh
41#include <ioLib.h> /* for FIONBIO */
42#endif /* __INCvxWorksh */
43
44#if defined(DOS32X)
45#define READSOCKET(a,b,c) recv((a), (b), (c), TDS_NOSIGNAL)
46#define WRITESOCKET(a,b,c) send((a), (b), (c), TDS_NOSIGNAL)
47#define CLOSESOCKET(a) closesocket((a))
48#define IOCTLSOCKET(a,b,c) ioctlsocket((a), (b), (char*)(c))
49#define SOCKLEN_T int
50#define select select_s
51typedef int pid_t;
52#define strcasecmp stricmp
53#define strncasecmp strnicmp
54/* TODO this has nothing to do with ip ... */
55#define getpid() _gethostid()
56#endif /* defined(DOS32X) */
57
58#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(_WIN64)
59#include <freetds/windows.h>
60#define READSOCKET(a,b,c) recv((a), (char *) (b), (c), TDS_NOSIGNAL)
61#define WRITESOCKET(a,b,c) send((a), (const char *) (b), (c), TDS_NOSIGNAL)
62#define CLOSESOCKET(a) closesocket((a))
63#define IOCTLSOCKET(a,b,c) ioctlsocket((a), (b), (c))
64#define SOCKLEN_T int
65int tds_socket_init(void);
66#define INITSOCKET() tds_socket_init()
67void tds_socket_done(void);
68#define DONESOCKET() tds_socket_done()
69#define NETDB_REENTRANT 1 /* BSD-style netdb interface is reentrant */
70
71#define TDSSOCK_EINTR WSAEINTR
72#define TDSSOCK_EINPROGRESS WSAEWOULDBLOCK
73#define TDSSOCK_ETIMEDOUT WSAETIMEDOUT
74#define TDSSOCK_WOULDBLOCK(e) ((e)==WSAEWOULDBLOCK)
75#define TDSSOCK_ECONNRESET WSAECONNRESET
76#define sock_errno WSAGetLastError()
77#define set_sock_errno(err) WSASetLastError(err)
78#define sock_strerror(n) tds_prwsaerror(n)
79#define sock_strerror_free(s) tds_prwsaerror_free(s)
80#ifndef __MINGW32__
81typedef DWORD pid_t;
82#endif
83#undef strcasecmp
84#define strcasecmp stricmp
85#undef strncasecmp
86#define strncasecmp strnicmp
87#if defined(HAVE__SNPRINTF) && !defined(HAVE_SNPRINTF)
88#define snprintf _snprintf
89#endif
90
91#ifndef WIN32
92#define WIN32 1
93#endif
94
95#if defined(_WIN64) && !defined(WIN64)
96#define WIN64 1
97#endif
98
99#define TDS_SDIR_SEPARATOR "\\"
100
101/* use macros to use new style names */
102#if defined(__MSVCRT__) || defined(_MSC_VER)
103/* Use API as always present and not causing problems */
104#undef getpid
105#define getpid() GetCurrentProcessId()
106#define strdup(s) _strdup(s)
107#define unlink(f) _unlink(f)
108#define putenv(s) _putenv(s)
109#undef fileno
110#define fileno(f) _fileno(f)
111#undef close
112#define close(f) _close(f)
113#undef open
114#define open(fn,...) _open(fn,__VA_ARGS__)
115#undef dup2
116#define dup2(o,n) _dup2(o,n)
117#define stricmp(s1,s2) _stricmp(s1,s2)
118#define strnicmp(s1,s2,n) _strnicmp(s1,s2,n)
119#endif
120
121#endif /* defined(WIN32) || defined(_WIN32) || defined(__WIN32__) */
122
123#ifndef sock_errno
124#define sock_errno errno
125#endif
126
127#ifndef set_sock_errno
128#define set_sock_errno(err) do { errno = (err); } while(0)
129#endif
130
131#ifndef sock_strerror
132#define sock_strerror(n) strerror(n)
133#define sock_strerror_free(s) do {} while(0)
134#endif
135
136#ifndef TDSSOCK_EINTR
137#define TDSSOCK_EINTR EINTR
138#endif
139
140#ifndef TDSSOCK_EINPROGRESS
141#define TDSSOCK_EINPROGRESS EINPROGRESS
142#endif
143
144#ifndef TDSSOCK_ETIMEDOUT
145#define TDSSOCK_ETIMEDOUT ETIMEDOUT
146#endif
147
148#ifndef TDSSOCK_WOULDBLOCK
149# if defined(EWOULDBLOCK) && EAGAIN != EWOULDBLOCK
150# define TDSSOCK_WOULDBLOCK(e) ((e)==EAGAIN||(e)==EWOULDBLOCK)
151# else
152# define TDSSOCK_WOULDBLOCK(e) ((e)==EAGAIN)
153# endif
154#endif
155
156#ifndef TDSSOCK_ECONNRESET
157#define TDSSOCK_ECONNRESET ECONNRESET
158#endif
159
160#ifndef INITSOCKET
161#define INITSOCKET() 0
162#endif /* !INITSOCKET */
163
164#ifndef DONESOCKET
165#define DONESOCKET() do { } while(0)
166#endif /* !DONESOCKET */
167
168#ifndef READSOCKET
169# ifdef MSG_NOSIGNAL
170# define READSOCKET(s,b,l) recv((s), (b), (l), MSG_NOSIGNAL)
171# else
172# define READSOCKET(s,b,l) read((s), (b), (l))
173# endif
174#endif /* !READSOCKET */
175
176#ifndef WRITESOCKET
177# ifdef MSG_NOSIGNAL
178# define WRITESOCKET(s,b,l) send((s), (b), (l), MSG_NOSIGNAL)
179# else
180# define WRITESOCKET(s,b,l) write((s), (b), (l))
181# endif
182#endif /* !WRITESOCKET */
183
184#ifndef CLOSESOCKET
185#define CLOSESOCKET(s) close((s))
186#endif /* !CLOSESOCKET */
187
188#ifndef IOCTLSOCKET
189#define IOCTLSOCKET(s,b,l) ioctl((s), (b), (l))
190#endif /* !IOCTLSOCKET */
191
192#ifndef SOCKLEN_T
193# define SOCKLEN_T socklen_t
194#endif
195
196#if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32)
197typedef int TDS_SYS_SOCKET;
198#define INVALID_SOCKET -1
199#define TDS_IS_SOCKET_INVALID(s) ((s) < 0)
200#else
201typedef SOCKET TDS_SYS_SOCKET;
202#define TDS_IS_SOCKET_INVALID(s) ((s) == INVALID_SOCKET)
203#endif
204
205#define tds_accept accept
206#define tds_getpeername getpeername
207#define tds_getsockopt getsockopt
208#define tds_getsockname getsockname
209#define tds_recvfrom recvfrom
210
211#if defined(__hpux__) && SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
212# if HAVE__XPG_ACCEPT
213# undef tds_accept
214# define tds_accept _xpg_accept
215# elif HAVE___ACCEPT
216# undef tds_accept
217# define tds_accept __accept
218# endif
219# if HAVE__XPG_GETPEERNAME
220# undef tds_getpeername
221# define tds_getpeername _xpg_getpeername
222# elif HAVE___GETPEERNAME
223# undef tds_getpeername
224# define tds_getpeername __getpeername
225# endif
226# if HAVE__XPG_GETSOCKOPT
227# undef tds_getsockopt
228# define tds_getsockopt _xpg_getsockopt
229# elif HAVE___GETSOCKOPT
230# undef tds_getsockopt
231# define tds_getsockopt __getsockopt
232# endif
233# if HAVE__XPG_GETSOCKNAME
234# undef tds_getsockname
235# define tds_getsockname _xpg_getsockname
236# elif HAVE___GETSOCKNAME
237# undef tds_getsockname
238# define tds_getsockname __getsockname
239# endif
240# if HAVE__XPG_RECVFROM
241# undef tds_recvfrom
242# define tds_recvfrom _xpg_recvfrom
243# elif HAVE___RECVFROM
244# undef tds_recvfrom
245# define tds_recvfrom __recvfrom
246# endif
247#endif
248
249#ifndef TDS_SDIR_SEPARATOR
250#define TDS_SDIR_SEPARATOR "/"
251#endif /* !TDS_SDIR_SEPARATOR */
252
253#ifdef HAVE_INTTYPES_H
254#include <inttypes.h>
255#endif
256
257#ifndef PRId64
258#define PRId64 TDS_I64_PREFIX "d"
259#endif
260#ifndef PRIu64
261#define PRIu64 TDS_I64_PREFIX "u"
262#endif
263#ifndef PRIx64
264#define PRIx64 TDS_I64_PREFIX "x"
265#endif
266
267#ifdef __cplusplus
268#if 0
269{
270#endif
271}
272#endif
273
274#endif /* _tds_sysdep_private_h_ */