OLD | NEW |
| (Empty) |
1 /* e_os.h */ | |
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | |
3 * All rights reserved. | |
4 * | |
5 * This package is an SSL implementation written | |
6 * by Eric Young (eay@cryptsoft.com). | |
7 * The implementation was written so as to conform with Netscapes SSL. | |
8 * | |
9 * This library is free for commercial and non-commercial use as long as | |
10 * the following conditions are aheared to. The following conditions | |
11 * apply to all code found in this distribution, be it the RC4, RSA, | |
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation | |
13 * included with this distribution is covered by the same copyright terms | |
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). | |
15 * | |
16 * Copyright remains Eric Young's, and as such any Copyright notices in | |
17 * the code are not to be removed. | |
18 * If this package is used in a product, Eric Young should be given attribution | |
19 * as the author of the parts of the library used. | |
20 * This can be in the form of a textual message at program startup or | |
21 * in documentation (online or textual) provided with the package. | |
22 * | |
23 * Redistribution and use in source and binary forms, with or without | |
24 * modification, are permitted provided that the following conditions | |
25 * are met: | |
26 * 1. Redistributions of source code must retain the copyright | |
27 * notice, this list of conditions and the following disclaimer. | |
28 * 2. Redistributions in binary form must reproduce the above copyright | |
29 * notice, this list of conditions and the following disclaimer in the | |
30 * documentation and/or other materials provided with the distribution. | |
31 * 3. All advertising materials mentioning features or use of this software | |
32 * must display the following acknowledgement: | |
33 * "This product includes cryptographic software written by | |
34 * Eric Young (eay@cryptsoft.com)" | |
35 * The word 'cryptographic' can be left out if the rouines from the library | |
36 * being used are not cryptographic related :-). | |
37 * 4. If you include any Windows specific code (or a derivative thereof) from | |
38 * the apps directory (application code) you must include an acknowledgement: | |
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | |
40 * | |
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | |
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
51 * SUCH DAMAGE. | |
52 * | |
53 * The licence and distribution terms for any publically available version or | |
54 * derivative of this code cannot be changed. i.e. this code cannot simply be | |
55 * copied and put under another distribution licence | |
56 * [including the GNU Public Licence.] | |
57 */ | |
58 | |
59 #ifndef HEADER_E_OS_H | |
60 #define HEADER_E_OS_H | |
61 | |
62 #include <openssl/opensslconf.h> | |
63 | |
64 #include <openssl/e_os2.h> | |
65 /* <openssl/e_os2.h> contains what we can justify to make visible | |
66 * to the outside; this file e_os.h is not part of the exported | |
67 * interface. */ | |
68 | |
69 #ifdef __cplusplus | |
70 extern "C" { | |
71 #endif | |
72 | |
73 /* Used to checking reference counts, most while doing perl5 stuff :-) */ | |
74 #ifdef REF_PRINT | |
75 #undef REF_PRINT | |
76 #define REF_PRINT(a,b) fprintf(stderr,"%08X:%4d:%s\n",(int)b,b->references,a) | |
77 #endif | |
78 | |
79 #ifndef DEVRANDOM | |
80 /* set this to a comma-separated list of 'random' device files to try out. | |
81 * My default, we will try to read at least one of these files */ | |
82 #define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom" | |
83 #endif | |
84 #ifndef DEVRANDOM_EGD | |
85 /* set this to a comma-seperated list of 'egd' sockets to try out. These | |
86 * sockets will be tried in the order listed in case accessing the device files | |
87 * listed in DEVRANDOM did not return enough entropy. */ | |
88 #define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/
entropy" | |
89 #endif | |
90 | |
91 #if defined(OPENSSL_SYS_VXWORKS) | |
92 # define NO_SYS_PARAM_H | |
93 # define NO_CHMOD | |
94 # define NO_SYSLOG | |
95 #endif | |
96 | |
97 #if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) | |
98 # if macintosh==1 | |
99 # ifndef MAC_OS_GUSI_SOURCE | |
100 # define MAC_OS_pre_X | |
101 # define NO_SYS_TYPES_H | |
102 # endif | |
103 # define NO_SYS_PARAM_H | |
104 # define NO_CHMOD | |
105 # define NO_SYSLOG | |
106 # undef DEVRANDOM | |
107 # define GETPID_IS_MEANINGLESS | |
108 # endif | |
109 #endif | |
110 | |
111 /******************************************************************** | |
112 The Microsoft section | |
113 ********************************************************************/ | |
114 /* The following is used because of the small stack in some | |
115 * Microsoft operating systems */ | |
116 #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYSNAME_WIN32) | |
117 # define MS_STATIC static | |
118 #else | |
119 # define MS_STATIC | |
120 #endif | |
121 | |
122 #if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) | |
123 # define WIN32 | |
124 #endif | |
125 #if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) | |
126 # define WINDOWS | |
127 #endif | |
128 #if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS) | |
129 # define MSDOS | |
130 #endif | |
131 | |
132 #if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS) | |
133 # define GETPID_IS_MEANINGLESS | |
134 #endif | |
135 | |
136 #ifdef WIN32 | |
137 #define get_last_sys_error() GetLastError() | |
138 #define clear_sys_error() SetLastError(0) | |
139 #if !defined(WINNT) | |
140 #define WIN_CONSOLE_BUG | |
141 #endif | |
142 #else | |
143 #define get_last_sys_error() errno | |
144 #define clear_sys_error() errno=0 | |
145 #endif | |
146 | |
147 #if defined(WINDOWS) | |
148 #define get_last_socket_error() WSAGetLastError() | |
149 #define clear_socket_error() WSASetLastError(0) | |
150 #define readsocket(s,b,n) recv((s),(b),(n),0) | |
151 #define writesocket(s,b,n) send((s),(b),(n),0) | |
152 #elif defined(__DJGPP__) | |
153 #define WATT32 | |
154 #define get_last_socket_error() errno | |
155 #define clear_socket_error() errno=0 | |
156 #define closesocket(s) close_s(s) | |
157 #define readsocket(s,b,n) read_s(s,b,n) | |
158 #define writesocket(s,b,n) send(s,b,n,0) | |
159 #elif defined(MAC_OS_pre_X) | |
160 #define get_last_socket_error() errno | |
161 #define clear_socket_error() errno=0 | |
162 #define closesocket(s) MacSocket_close(s) | |
163 #define readsocket(s,b,n) MacSocket_recv((s),(b),(n),true) | |
164 #define writesocket(s,b,n) MacSocket_send((s),(b),(n)) | |
165 #elif defined(OPENSSL_SYS_VMS) | |
166 #define get_last_socket_error() errno | |
167 #define clear_socket_error() errno=0 | |
168 #define ioctlsocket(a,b,c) ioctl(a,b,c) | |
169 #define closesocket(s) close(s) | |
170 #define readsocket(s,b,n) recv((s),(b),(n),0) | |
171 #define writesocket(s,b,n) send((s),(b),(n),0) | |
172 #elif defined(OPENSSL_SYS_VXWORKS) | |
173 #define get_last_socket_error() errno | |
174 #define clear_socket_error() errno=0 | |
175 #define ioctlsocket(a,b,c) ioctl((a),(b),(int)(c)) | |
176 #define closesocket(s) close(s) | |
177 #define readsocket(s,b,n) read((s),(b),(n)) | |
178 #define writesocket(s,b,n) write((s),(char *)(b),(n)) | |
179 #elif defined(OPENSSL_SYS_BEOS_R5) | |
180 #define get_last_socket_error() errno | |
181 #define clear_socket_error() errno=0 | |
182 #define FIONBIO SO_NONBLOCK | |
183 #define ioctlsocket(a,b,c) setsockopt((a),SOL_SOCKET,(b),(c),size
of(*(c))) | |
184 #define readsocket(s,b,n) recv((s),(b),(n),0) | |
185 #define writesocket(s,b,n) send((s),(b),(n),0) | |
186 #elif defined(OPENSSL_SYS_NETWARE) | |
187 #if defined(NETWARE_BSDSOCK) | |
188 #define get_last_socket_error() errno | |
189 #define clear_socket_error() errno=0 | |
190 #define closesocket(s) close(s) | |
191 #define ioctlsocket(a,b,c) ioctl(a,b,c) | |
192 #if defined(NETWARE_LIBC) | |
193 #define readsocket(s,b,n) recv((s),(b),(n),0) | |
194 #define writesocket(s,b,n) send((s),(b),(n),0) | |
195 #else | |
196 #define readsocket(s,b,n) recv((s),(char*)(b),(n),0) | |
197 #define writesocket(s,b,n) send((s),(char*)(b),(n),0) | |
198 #endif | |
199 #else | |
200 #define get_last_socket_error() WSAGetLastError() | |
201 #define clear_socket_error() WSASetLastError(0) | |
202 #define readsocket(s,b,n) recv((s),(b),(n),0) | |
203 #define writesocket(s,b,n) send((s),(b),(n),0) | |
204 #endif | |
205 #else | |
206 #define get_last_socket_error() errno | |
207 #define clear_socket_error() errno=0 | |
208 #define ioctlsocket(a,b,c) ioctl(a,b,c) | |
209 #define closesocket(s) close(s) | |
210 #define readsocket(s,b,n) read((s),(b),(n)) | |
211 #define writesocket(s,b,n) write((s),(b),(n)) | |
212 #endif | |
213 | |
214 #ifdef WIN16 /* never the case */ | |
215 # define MS_CALLBACK _far _loadds | |
216 # define MS_FAR _far | |
217 #else | |
218 # define MS_CALLBACK | |
219 # define MS_FAR | |
220 #endif | |
221 | |
222 #ifdef OPENSSL_NO_STDIO | |
223 # undef OPENSSL_NO_FP_API | |
224 # define OPENSSL_NO_FP_API | |
225 #endif | |
226 | |
227 #if (defined(WINDOWS) || defined(MSDOS)) | |
228 | |
229 # ifdef __DJGPP__ | |
230 # include <unistd.h> | |
231 # include <sys/stat.h> | |
232 # include <sys/socket.h> | |
233 # include <tcp.h> | |
234 # include <netdb.h> | |
235 # define _setmode setmode | |
236 # define _O_TEXT O_TEXT | |
237 # define _O_BINARY O_BINARY | |
238 # undef DEVRANDOM | |
239 # define DEVRANDOM "/dev/urandom\x24" | |
240 # endif /* __DJGPP__ */ | |
241 | |
242 # ifndef S_IFDIR | |
243 # define S_IFDIR _S_IFDIR | |
244 # endif | |
245 | |
246 # ifndef S_IFMT | |
247 # define S_IFMT _S_IFMT | |
248 # endif | |
249 | |
250 # if !defined(WINNT) && !defined(__DJGPP__) | |
251 # define NO_SYSLOG | |
252 # endif | |
253 # define NO_DIRENT | |
254 | |
255 # ifdef WINDOWS | |
256 # if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) | |
257 /* | |
258 * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." | |
259 * Most notably we ought to check for availability of each specific | |
260 * routine with GetProcAddress() and/or guard NT-specific calls with | |
261 * GetVersion() < 0x80000000. One can argue that in latter "or" case | |
262 * we ought to /DELAYLOAD some .DLLs in order to protect ourselves | |
263 * against run-time link errors. This doesn't seem to be necessary, | |
264 * because it turned out that already Windows 95, first non-NT Win32 | |
265 * implementation, is equipped with at least NT 3.51 stubs, dummy | |
266 * routines with same name, but which do nothing. Meaning that it's | |
267 * apparently sufficient to guard "vanilla" NT calls with GetVersion | |
268 * alone, while NT 4.0 and above interfaces ought to be linked with | |
269 * GetProcAddress at run-time. | |
270 */ | |
271 # define _WIN32_WINNT 0x0400 | |
272 # endif | |
273 # if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT) | |
274 /* | |
275 * Just like defining _WIN32_WINNT including winsock2.h implies | |
276 * certain "discipline" for maintaining [broad] binary compatibility. | |
277 * As long as structures are invariant among Winsock versions, | |
278 * it's sufficient to check for specific Winsock2 API availability | |
279 * at run-time [DSO_global_lookup is recommended]... | |
280 */ | |
281 # include <winsock2.h> | |
282 # include <ws2tcpip.h> | |
283 /* yes, they have to be #included prior to <windows.h> */ | |
284 # endif | |
285 # include <windows.h> | |
286 # include <stdio.h> | |
287 # include <stddef.h> | |
288 # include <errno.h> | |
289 # include <string.h> | |
290 # ifdef _WIN64 | |
291 # define strlen(s) _strlen31(s) | |
292 /* cut strings to 2GB */ | |
293 static unsigned int _strlen31(const char *str) | |
294 { | |
295 unsigned int len=0; | |
296 while (*str && len<0x80000000U) str++, len++; | |
297 return len&0x7FFFFFFF; | |
298 } | |
299 # endif | |
300 # include <malloc.h> | |
301 # if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace) | |
302 /* compensate for bug in VC6 ctype.h */ | |
303 # undef isspace | |
304 # undef isdigit | |
305 # undef isalnum | |
306 # undef isupper | |
307 # undef isxdigit | |
308 # endif | |
309 # if defined(_MSC_VER) && !defined(_DLL) && defined(stdin) | |
310 # if _MSC_VER>=1300 | |
311 # undef stdin | |
312 # undef stdout | |
313 # undef stderr | |
314 FILE *__iob_func(); | |
315 # define stdin (&__iob_func()[0]) | |
316 # define stdout (&__iob_func()[1]) | |
317 # define stderr (&__iob_func()[2]) | |
318 # elif defined(I_CAN_LIVE_WITH_LNK4049) | |
319 # undef stdin | |
320 # undef stdout | |
321 # undef stderr | |
322 /* pre-1300 has __p__iob(), but it's available only in msvcrt.lib, | |
323 * or in other words with /MD. Declaring implicit import, i.e. | |
324 * with _imp_ prefix, works correctly with all compiler options, | |
325 * but without /MD results in LINK warning LNK4049: | |
326 * 'locally defined symbol "__iob" imported'. | |
327 */ | |
328 extern FILE *_imp___iob; | |
329 # define stdin (&_imp___iob[0]) | |
330 # define stdout (&_imp___iob[1]) | |
331 # define stderr (&_imp___iob[2]) | |
332 # endif | |
333 # endif | |
334 # endif | |
335 # include <io.h> | |
336 # include <fcntl.h> | |
337 | |
338 # ifdef OPENSSL_SYS_WINCE | |
339 # define OPENSSL_NO_POSIX_IO | |
340 # endif | |
341 | |
342 # if defined (__BORLANDC__) | |
343 # define _setmode setmode | |
344 # define _O_TEXT O_TEXT | |
345 # define _O_BINARY O_BINARY | |
346 # define _int64 __int64 | |
347 # define _kbhit kbhit | |
348 # endif | |
349 | |
350 # define EXIT(n) exit(n) | |
351 # define LIST_SEPARATOR_CHAR ';' | |
352 # ifndef X_OK | |
353 # define X_OK 0 | |
354 # endif | |
355 # ifndef W_OK | |
356 # define W_OK 2 | |
357 # endif | |
358 # ifndef R_OK | |
359 # define R_OK 4 | |
360 # endif | |
361 # define OPENSSL_CONF "openssl.cnf" | |
362 # define SSLEAY_CONF OPENSSL_CONF | |
363 # define NUL_DEV "nul" | |
364 # define RFILE ".rnd" | |
365 # ifdef OPENSSL_SYS_WINCE | |
366 # define DEFAULT_HOME "" | |
367 # else | |
368 # define DEFAULT_HOME "C:" | |
369 # endif | |
370 | |
371 #else /* The non-microsoft world */ | |
372 | |
373 # ifdef OPENSSL_SYS_VMS | |
374 # define VMS 1 | |
375 /* some programs don't include stdlib, so exit() and others give implicit | |
376 function warnings */ | |
377 # include <stdlib.h> | |
378 # if defined(__DECC) | |
379 # include <unistd.h> | |
380 # else | |
381 # include <unixlib.h> | |
382 # endif | |
383 # define OPENSSL_CONF "openssl.cnf" | |
384 # define SSLEAY_CONF OPENSSL_CONF | |
385 # define RFILE ".rnd" | |
386 # define LIST_SEPARATOR_CHAR ',' | |
387 # define NUL_DEV "NLA0:" | |
388 /* We don't have any well-defined random devices on VMS, yet... */ | |
389 # undef DEVRANDOM | |
390 /* We need to do this since VMS has the following coding on status codes: | |
391 | |
392 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... | |
393 The important thing to know is that odd numbers are considered | |
394 good, while even ones are considered errors. | |
395 Bits 3-15: actual status number | |
396 Bits 16-27: facility number. 0 is considered "unknown" | |
397 Bits 28-31: control bits. If bit 28 is set, the shell won't try to | |
398 output the message (which, for random codes, just looks ugly) | |
399 | |
400 So, what we do here is to change 0 to 1 to get the default success status, | |
401 and everything else is shifted up to fit into the status number field, and | |
402 the status is tagged as an error, which I believe is what is wanted here. | |
403 -- Richard Levitte | |
404 */ | |
405 # define EXIT(n) do { int __VMS_EXIT = n; \ | |
406 if (__VMS_EXIT == 0) \ | |
407 __VMS_EXIT = 1; \ | |
408 else \ | |
409 __VMS_EXIT = (n << 3) | 2; \ | |
410 __VMS_EXIT |= 0x10000000; \ | |
411 exit(__VMS_EXIT); } while(0) | |
412 # define NO_SYS_PARAM_H | |
413 | |
414 # elif defined(OPENSSL_SYS_NETWARE) | |
415 # include <fcntl.h> | |
416 # include <unistd.h> | |
417 # define NO_SYS_TYPES_H | |
418 # undef DEVRANDOM | |
419 # ifdef NETWARE_CLIB | |
420 # define getpid GetThreadID | |
421 extern int GetThreadID(void); | |
422 /* # include <conio.h> */ | |
423 extern int kbhit(void); | |
424 # else | |
425 # include <screen.h> | |
426 # endif | |
427 # define NO_SYSLOG | |
428 # define _setmode setmode | |
429 # define _kbhit kbhit | |
430 # define _O_TEXT O_TEXT | |
431 # define _O_BINARY O_BINARY | |
432 # define OPENSSL_CONF "openssl.cnf" | |
433 # define SSLEAY_CONF OPENSSL_CONF | |
434 # define RFILE ".rnd" | |
435 # define LIST_SEPARATOR_CHAR ';' | |
436 # define EXIT(n) { if (n) printf("ERROR: %d\n", (int)n); exit(n); } | |
437 | |
438 # else | |
439 /* !defined VMS */ | |
440 # ifdef OPENSSL_SYS_MPE | |
441 # define NO_SYS_PARAM_H | |
442 # endif | |
443 # ifdef OPENSSL_UNISTD | |
444 # include OPENSSL_UNISTD | |
445 # else | |
446 # include <unistd.h> | |
447 # endif | |
448 # ifndef NO_SYS_TYPES_H | |
449 # include <sys/types.h> | |
450 # endif | |
451 # if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) | |
452 # define pid_t int /* pid_t is missing on NEXTSTEP/OPENSTEP | |
453 * (unless when compiling with -D_POSIX_SOURCE, | |
454 * which doesn't work for us) */ | |
455 # endif | |
456 # ifdef OPENSSL_SYS_NEWS4 /* setvbuf is missing on mips-sony-bsd */ | |
457 # define setvbuf(a, b, c, d) setbuffer((a), (b), (d)) | |
458 typedef unsigned long clock_t; | |
459 # endif | |
460 # ifdef OPENSSL_SYS_WIN32_CYGWIN | |
461 # include <io.h> | |
462 # include <fcntl.h> | |
463 # endif | |
464 | |
465 # define OPENSSL_CONF "openssl.cnf" | |
466 # define SSLEAY_CONF OPENSSL_CONF | |
467 # define RFILE ".rnd" | |
468 # define LIST_SEPARATOR_CHAR ':' | |
469 # define NUL_DEV "/dev/null" | |
470 # define EXIT(n) exit(n) | |
471 # endif | |
472 | |
473 # define SSLeay_getpid() getpid() | |
474 | |
475 #endif | |
476 | |
477 | |
478 /*************/ | |
479 | |
480 #ifdef USE_SOCKETS | |
481 # if defined(WINDOWS) || defined(MSDOS) | |
482 /* windows world */ | |
483 | |
484 # ifdef OPENSSL_NO_SOCK | |
485 # define SSLeay_Write(a,b,c) (-1) | |
486 # define SSLeay_Read(a,b,c) (-1) | |
487 # define SHUTDOWN(fd) close(fd) | |
488 # define SHUTDOWN2(fd) close(fd) | |
489 # elif !defined(__DJGPP__) | |
490 # if defined(_WIN32_WCE) && _WIN32_WCE<410 | |
491 # define getservbyname _masked_declaration_getservbyname | |
492 # endif | |
493 # if !defined(IPPROTO_IP) | |
494 /* winsock[2].h was included already? */ | |
495 # include <winsock.h> | |
496 # endif | |
497 # ifdef getservbyname | |
498 # undef getservbyname | |
499 /* this is used to be wcecompat/include/winsock_extras.h */ | |
500 struct servent* PASCAL getservbyname(const char*,const char*); | |
501 # endif | |
502 | |
503 # ifdef _WIN64 | |
504 /* | |
505 * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because | |
506 * the value constitutes an index in per-process table of limited size | |
507 * and not a real pointer. | |
508 */ | |
509 # define socket(d,t,p) ((int)socket(d,t,p)) | |
510 # define accept(s,f,l) ((int)accept(s,f,l)) | |
511 # endif | |
512 # define SSLeay_Write(a,b,c) send((a),(b),(c),0) | |
513 # define SSLeay_Read(a,b,c) recv((a),(b),(c),0) | |
514 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); } | |
515 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); } | |
516 # else | |
517 # define SSLeay_Write(a,b,c) write_s(a,b,c,0) | |
518 # define SSLeay_Read(a,b,c) read_s(a,b,c) | |
519 # define SHUTDOWN(fd) close_s(fd) | |
520 # define SHUTDOWN2(fd) close_s(fd) | |
521 # endif | |
522 | |
523 # elif defined(MAC_OS_pre_X) | |
524 | |
525 # include "MacSocket.h" | |
526 # define SSLeay_Write(a,b,c) MacSocket_send((a),(b),(c)) | |
527 # define SSLeay_Read(a,b,c) MacSocket_recv((a),(b),(c),true) | |
528 # define SHUTDOWN(fd) MacSocket_close(fd) | |
529 # define SHUTDOWN2(fd) MacSocket_close(fd) | |
530 | |
531 # elif defined(OPENSSL_SYS_NETWARE) | |
532 /* NetWare uses the WinSock2 interfaces by default, but can be configur
ed for BSD | |
533 */ | |
534 # if defined(NETWARE_BSDSOCK) | |
535 # include <sys/socket.h> | |
536 # include <netinet/in.h> | |
537 # include <sys/time.h> | |
538 # if defined(NETWARE_CLIB) | |
539 # include <sys/bsdskt.h> | |
540 # else | |
541 # include <sys/select.h> | |
542 # endif | |
543 # define INVALID_SOCKET (int)(~0) | |
544 # else | |
545 # include <novsock2.h> | |
546 # endif | |
547 # define SSLeay_Write(a,b,c) send((a),(b),(c),0) | |
548 # define SSLeay_Read(a,b,c) recv((a),(b),(c),0) | |
549 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); } | |
550 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); } | |
551 | |
552 # else | |
553 | |
554 # ifndef NO_SYS_PARAM_H | |
555 # include <sys/param.h> | |
556 # endif | |
557 # ifdef OPENSSL_SYS_VXWORKS | |
558 # include <time.h> | |
559 # elif !defined(OPENSSL_SYS_MPE) | |
560 # include <sys/time.h> /* Needed under linux for FD_XXX */ | |
561 # endif | |
562 | |
563 # include <netdb.h> | |
564 # if defined(OPENSSL_SYS_VMS_NODECC) | |
565 # include <socket.h> | |
566 # include <in.h> | |
567 # include <inet.h> | |
568 # else | |
569 # include <sys/socket.h> | |
570 # ifdef FILIO_H | |
571 # include <sys/filio.h> /* Added for FIONBIO under unixware */ | |
572 # endif | |
573 # include <netinet/in.h> | |
574 # if !defined(OPENSSL_SYS_BEOS_R5) | |
575 # include <arpa/inet.h> | |
576 # endif | |
577 # endif | |
578 | |
579 # if defined(NeXT) || defined(_NEXT_SOURCE) | |
580 # include <sys/fcntl.h> | |
581 # include <sys/types.h> | |
582 # endif | |
583 | |
584 # ifdef OPENSSL_SYS_AIX | |
585 # include <sys/select.h> | |
586 # endif | |
587 | |
588 # ifdef __QNX__ | |
589 # include <sys/select.h> | |
590 # endif | |
591 | |
592 # if defined(sun) | |
593 # include <sys/filio.h> | |
594 # else | |
595 # ifndef VMS | |
596 # include <sys/ioctl.h> | |
597 # else | |
598 /* ioctl is only in VMS > 7.0 and when socketshr is not used */ | |
599 # if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER >
70000000) | |
600 # include <sys/ioctl.h> | |
601 # endif | |
602 # endif | |
603 # endif | |
604 | |
605 # ifdef VMS | |
606 # include <unixio.h> | |
607 # if defined(TCPIP_TYPE_SOCKETSHR) | |
608 # include <socketshr.h> | |
609 # endif | |
610 # endif | |
611 | |
612 # define SSLeay_Read(a,b,c) read((a),(b),(c)) | |
613 # define SSLeay_Write(a,b,c) write((a),(b),(c)) | |
614 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket((fd)); } | |
615 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket((fd)); } | |
616 # ifndef INVALID_SOCKET | |
617 # define INVALID_SOCKET (-1) | |
618 # endif /* INVALID_SOCKET */ | |
619 # endif | |
620 | |
621 /* Some IPv6 implementations are broken, disable them in known bad | |
622 * versions. | |
623 */ | |
624 # if !defined(OPENSSL_USE_IPV6) | |
625 # if defined(AF_INET6) && !defined(OPENSSL_SYS_BEOS_BONE) && !defined(NETWARE
_CLIB) | |
626 # define OPENSSL_USE_IPV6 1 | |
627 # else | |
628 # define OPENSSL_USE_IPV6 0 | |
629 # endif | |
630 # endif | |
631 | |
632 #endif | |
633 | |
634 #if defined(sun) && !defined(__svr4__) && !defined(__SVR4) | |
635 /* include headers first, so our defines don't break it */ | |
636 #include <stdlib.h> | |
637 #include <string.h> | |
638 /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */ | |
639 # define memmove(s1,s2,n) bcopy((s2),(s1),(n)) | |
640 # define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b))) | |
641 extern char *sys_errlist[]; extern int sys_nerr; | |
642 # define strerror(errnum) \ | |
643 (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum]) | |
644 /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */ | |
645 #include "crypto/o_str.h" | |
646 # define memcmp OPENSSL_memcmp | |
647 #endif | |
648 | |
649 #ifndef OPENSSL_EXIT | |
650 # if defined(MONOLITH) && !defined(OPENSSL_C) | |
651 # define OPENSSL_EXIT(n) return(n) | |
652 # else | |
653 # define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0) | |
654 # endif | |
655 #endif | |
656 | |
657 /***********************************************/ | |
658 | |
659 #define DG_GCC_BUG /* gcc < 2.6.3 on DGUX */ | |
660 | |
661 #ifdef sgi | |
662 #define IRIX_CC_BUG /* all version of IRIX I've tested (4.* 5.*) */ | |
663 #endif | |
664 #ifdef OPENSSL_SYS_SNI | |
665 #define IRIX_CC_BUG /* CDS++ up to V2.0Bsomething suffered from the same bug
.*/ | |
666 #endif | |
667 | |
668 #if defined(OPENSSL_SYS_WINDOWS) | |
669 # define strcasecmp _stricmp | |
670 # define strncasecmp _strnicmp | |
671 #elif defined(OPENSSL_SYS_VMS) | |
672 /* VMS below version 7.0 doesn't have strcasecmp() */ | |
673 # include "o_str.h" | |
674 # define strcasecmp OPENSSL_strcasecmp | |
675 # define strncasecmp OPENSSL_strncasecmp | |
676 # define OPENSSL_IMPLEMENTS_strncasecmp | |
677 #elif defined(OPENSSL_SYS_OS2) && defined(__EMX__) | |
678 # define strcasecmp stricmp | |
679 # define strncasecmp strnicmp | |
680 #elif defined(OPENSSL_SYS_NETWARE) | |
681 # include <string.h> | |
682 # if defined(NETWARE_CLIB) | |
683 # define strcasecmp stricmp | |
684 # define strncasecmp strnicmp | |
685 # endif /* NETWARE_CLIB */ | |
686 #endif | |
687 | |
688 #if defined(OPENSSL_SYS_OS2) && defined(__EMX__) | |
689 # include <io.h> | |
690 # include <fcntl.h> | |
691 # define NO_SYSLOG | |
692 #endif | |
693 | |
694 /* vxworks */ | |
695 #if defined(OPENSSL_SYS_VXWORKS) | |
696 #include <ioLib.h> | |
697 #include <tickLib.h> | |
698 #include <sysLib.h> | |
699 | |
700 #define TTY_STRUCT int | |
701 | |
702 #define sleep(a) taskDelay((a) * sysClkRateGet()) | |
703 | |
704 #include <vxWorks.h> | |
705 #include <sockLib.h> | |
706 #include <taskLib.h> | |
707 | |
708 #define getpid taskIdSelf | |
709 | |
710 /* NOTE: these are implemented by helpers in database app! | |
711 * if the database is not linked, we need to implement them | |
712 * elswhere */ | |
713 struct hostent *gethostbyname(const char *name); | |
714 struct hostent *gethostbyaddr(const char *addr, int length, int type); | |
715 struct servent *getservbyname(const char *name, const char *proto); | |
716 | |
717 #endif | |
718 /* end vxworks */ | |
719 | |
720 /* beos */ | |
721 #if defined(OPENSSL_SYS_BEOS_R5) | |
722 #define SO_ERROR 0 | |
723 #define NO_SYS_UN | |
724 #define IPPROTO_IP 0 | |
725 #include <OS.h> | |
726 #endif | |
727 | |
728 | |
729 #ifdef __cplusplus | |
730 } | |
731 #endif | |
732 | |
733 #endif | |
734 | |
OLD | NEW |