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#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#ifdef _WIN32
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
63static inline int
64tds_socket_init(void)
65{
66 WSADATA wsadata;
67
68 return WSAStartup(MAKEWORD(2, 2), &wsadata);
69}
70
71static inline void
72tds_socket_done(void)
73{
74 WSACleanup();
75}
76#define NETDB_REENTRANT 1 /* BSD-style netdb interface is reentrant */
77
78#define TDSSOCK_EINTR WSAEINTR
79#define TDSSOCK_EINPROGRESS WSAEWOULDBLOCK
80#define TDSSOCK_ETIMEDOUT WSAETIMEDOUT
81#define TDSSOCK_WOULDBLOCK(e) ((e)==WSAEWOULDBLOCK)
82#define TDSSOCK_ECONNRESET WSAECONNRESET
83#define sock_errno WSAGetLastError()
84#define set_sock_errno(err) WSASetLastError(err)
85#define sock_strerror(n) tds_prwsaerror(n)
86#define sock_strerror_free(s) tds_prwsaerror_free(s)
87#ifndef __MINGW32__
88typedef DWORD pid_t;
89#endif
90#undef strcasecmp
91#define strcasecmp stricmp
92#undef strncasecmp
93#define strncasecmp strnicmp
94#if defined(HAVE__SNPRINTF) && !defined(HAVE_SNPRINTF)
95#define snprintf _snprintf
96#endif
97
98/* use macros to use new style names */
99#if defined(__MSVCRT__) || defined(_MSC_VER)
100/* Use API as always present and not causing problems */
101#undef getpid
102#define getpid() GetCurrentProcessId()
103#define strdup(s) _strdup(s)
104#define unlink(f) _unlink(f)
105#define putenv(s) _putenv(s)
106#undef fileno
107#define fileno(f) _fileno(f)
108#undef close
109#define close(f) _close(f)
110#undef open
111#define open(fn,...) _open(fn,__VA_ARGS__)
112#undef dup2
113#define dup2(o,n) _dup2(o,n)
114#define stricmp(s1,s2) _stricmp(s1,s2)
115#define strnicmp(s1,s2,n) _strnicmp(s1,s2,n)
116#endif
117
118#endif /* defined(_WIN32) */
119
120#ifndef sock_errno
121#define sock_errno errno
122#endif
123
124#ifndef set_sock_errno
125#define set_sock_errno(err) do { errno = (err); } while(0)
126#endif
127
128#ifndef sock_strerror
129#define sock_strerror(n) strerror(n)
130#define sock_strerror_free(s) do {} while(0)
131#endif
132
133#ifndef TDSSOCK_EINTR
134#define TDSSOCK_EINTR EINTR
135#endif
136
137#ifndef TDSSOCK_EINPROGRESS
138#define TDSSOCK_EINPROGRESS EINPROGRESS
139#endif
140
141#ifndef TDSSOCK_ETIMEDOUT
142#define TDSSOCK_ETIMEDOUT ETIMEDOUT
143#endif
144
145#ifndef TDSSOCK_WOULDBLOCK
146# if defined(EWOULDBLOCK) && EAGAIN != EWOULDBLOCK
147# define TDSSOCK_WOULDBLOCK(e) ((e)==EAGAIN||(e)==EWOULDBLOCK)
148# else
149# define TDSSOCK_WOULDBLOCK(e) ((e)==EAGAIN)
150# endif
151#endif
152
153#ifndef TDSSOCK_ECONNRESET
154#define TDSSOCK_ECONNRESET ECONNRESET
155#endif
156
157#ifndef _WIN32
158static inline int
159tds_socket_init(void)
160{
161 return 0;
162}
163
164static inline void
165tds_socket_done(void)
166{
167}
168#endif
169
170#ifndef READSOCKET
171# ifdef MSG_NOSIGNAL
172# define READSOCKET(s,b,l) recv((s), (b), (l), MSG_NOSIGNAL)
173# else
174# define READSOCKET(s,b,l) read((s), (b), (l))
175# endif
176#endif /* !READSOCKET */
177
178#ifndef WRITESOCKET
179# ifdef MSG_NOSIGNAL
180# define WRITESOCKET(s,b,l) send((s), (b), (l), MSG_NOSIGNAL)
181# else
182# define WRITESOCKET(s,b,l) write((s), (b), (l))
183# endif
184#endif /* !WRITESOCKET */
185
186#ifndef CLOSESOCKET
187#define CLOSESOCKET(s) close((s))
188#endif /* !CLOSESOCKET */
189
190#ifndef IOCTLSOCKET
191#define IOCTLSOCKET(s,b,l) ioctl((s), (b), (l))
192#endif /* !IOCTLSOCKET */
193
194#ifndef SOCKLEN_T
195# define SOCKLEN_T socklen_t
196#endif
197
198#ifndef _WIN32
199typedef int TDS_SYS_SOCKET;
200#define INVALID_SOCKET -1
201#define TDS_IS_SOCKET_INVALID(s) ((s) < 0)
202#else
203typedef SOCKET TDS_SYS_SOCKET;
204#define TDS_IS_SOCKET_INVALID(s) ((s) == INVALID_SOCKET)
205#endif
206
207#define tds_accept accept
208#define tds_getpeername getpeername
209#define tds_getsockopt getsockopt
210#define tds_getsockname getsockname
211#define tds_recvfrom recvfrom
212
213#if defined(__hpux__) && SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
214# if HAVE__XPG_ACCEPT
215# undef tds_accept
216# define tds_accept _xpg_accept
217# elif HAVE___ACCEPT
218# undef tds_accept
219# define tds_accept __accept
220# endif
221# if HAVE__XPG_GETPEERNAME
222# undef tds_getpeername
223# define tds_getpeername _xpg_getpeername
224# elif HAVE___GETPEERNAME
225# undef tds_getpeername
226# define tds_getpeername __getpeername
227# endif
228# if HAVE__XPG_GETSOCKOPT
229# undef tds_getsockopt
230# define tds_getsockopt _xpg_getsockopt
231# elif HAVE___GETSOCKOPT
232# undef tds_getsockopt
233# define tds_getsockopt __getsockopt
234# endif
235# if HAVE__XPG_GETSOCKNAME
236# undef tds_getsockname
237# define tds_getsockname _xpg_getsockname
238# elif HAVE___GETSOCKNAME
239# undef tds_getsockname
240# define tds_getsockname __getsockname
241# endif
242# if HAVE__XPG_RECVFROM
243# undef tds_recvfrom
244# define tds_recvfrom _xpg_recvfrom
245# elif HAVE___RECVFROM
246# undef tds_recvfrom
247# define tds_recvfrom __recvfrom
248# endif
249#endif
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 ## ui64
281# define INT64_C(c) c ## i64
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 /* _tdsguard_gbdINUKdHN7rAOavGyKkWw_ */