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