FreeTDS API
include
freetds
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
56
typedef
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
70
static
inline
int
71
tds_socket_init(
void
)
72
{
73
WSADATA wsadata;
74
75
return
WSAStartup(MAKEWORD(2, 2), &wsadata);
76
}
77
78
static
inline
void
79
tds_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__
95
typedef
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
167
static
inline
int
168
tds_socket_init(
void
)
169
{
170
return
0;
171
}
172
173
static
inline
void
174
tds_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
208
typedef
int
TDS_SYS_SOCKET;
209
#define INVALID_SOCKET -1
210
#define TDS_IS_SOCKET_INVALID(s) ((s) < 0)
211
#else
212
typedef
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_ */
Generated by
1.8.13