FreeTDS API
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 extern "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
51 typedef 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
65 int tds_socket_init(void);
66 #define INITSOCKET() tds_socket_init()
67 void 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__
81 typedef 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)
197 typedef int TDS_SYS_SOCKET;
198 #define INVALID_SOCKET -1
199 #define TDS_IS_SOCKET_INVALID(s) ((s) < 0)
200 #else
201 typedef 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_ */