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 typedef long ssize_t; 103 # endif 104 # define NO_SYS_PARAM_H 105 # define NO_CHMOD 106 # define NO_SYSLOG 107 # undef DEVRANDOM 108 # define GETPID_IS_MEANINGLESS 109 # endif 110 #endif 111 112 /******************************************************************** 113 The Microsoft section 114 ********************************************************************/ 115 /* The following is used becaue of the small stack in some 116 * Microsoft operating systems */ 117 #if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYSNAME_WIN32) 118 # define MS_STATIC static 119 #else 120 # define MS_STATIC 121 #endif 122 123 #if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) 124 # define WIN32 125 #endif 126 #if defined(OPENSSL_SYS_WIN16) && !defined(WIN16) 127 # define WIN16 128 #endif 129 #if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) 130 # define WINDOWS 131 #endif 132 #if defined(OPENSSL_SYS_MSDOS) && !defined(MSDOS) 133 # define MSDOS 134 #endif 135 136 #if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS) 137 # define GETPID_IS_MEANINGLESS 138 #endif 139 140 #ifdef WIN32 141 #define get_last_sys_error() GetLastError() 142 #define clear_sys_error() SetLastError(0) 143 #if !defined(WINNT) 144 #define WIN_CONSOLE_BUG 145 #endif 146 #else 147 #define get_last_sys_error() errno 148 #define clear_sys_error() errno=0 149 #endif 150 151 #if defined(WINDOWS) 152 #define get_last_socket_error() WSAGetLastError() 153 #define clear_socket_error() WSASetLastError(0) 154 #define readsocket(s,b,n) recv((s),(b),(n),0) 155 #define writesocket(s,b,n) send((s),(b),(n),0) 156 #elif defined(__DJGPP__) 157 #define WATT32 158 #define get_last_socket_error() errno 159 #define clear_socket_error() errno=0 160 #define closesocket(s) close_s(s) 161 #define readsocket(s,b,n) read_s(s,b,n) 162 #define writesocket(s,b,n) send(s,b,n,0) 163 #elif defined(MAC_OS_pre_X) 164 #define get_last_socket_error() errno 165 #define clear_socket_error() errno=0 166 #define closesocket(s) MacSocket_close(s) 167 #define readsocket(s,b,n) MacSocket_recv((s),(b),(n),true) 168 #define writesocket(s,b,n) MacSocket_send((s),(b),(n)) 169 #elif defined(OPENSSL_SYS_VMS) 170 #define get_last_socket_error() errno 171 #define clear_socket_error() errno=0 172 #define ioctlsocket(a,b,c) ioctl(a,b,c) 173 #define closesocket(s) close(s) 174 #define readsocket(s,b,n) recv((s),(b),(n),0) 175 #define writesocket(s,b,n) send((s),(b),(n),0) 176 #elif defined(OPENSSL_SYS_VXWORKS) 177 #define get_last_socket_error() errno 178 #define clear_socket_error() errno=0 179 #define ioctlsocket(a,b,c) ioctl((a),(b),(int)(c)) 180 #define closesocket(s) close(s) 181 #define readsocket(s,b,n) read((s),(b),(n)) 182 #define writesocket(s,b,n) write((s),(char *)(b),(n)) 183 #elif defined(OPENSSL_SYS_NETWARE) 184 #if defined(NETWARE_BSDSOCK) 185 #define get_last_socket_error() errno 186 #define clear_socket_error() errno=0 187 #define closesocket(s) close(s) 188 #define ioctlsocket(a,b,c) ioctl(a,b,c) 189 #if defined(NETWARE_LIBC) 190 #define readsocket(s,b,n) recv((s),(b),(n),0) 191 #define writesocket(s,b,n) send((s),(b),(n),0) 192 #else 193 #define readsocket(s,b,n) recv((s),(char*)(b),(n),0) 194 #define writesocket(s,b,n) send((s),(char*)(b),(n),0) 195 #endif 196 #else 197 #define get_last_socket_error() WSAGetLastError() 198 #define clear_socket_error() WSASetLastError(0) 199 #define readsocket(s,b,n) recv((s),(b),(n),0) 200 #define writesocket(s,b,n) send((s),(b),(n),0) 201 #endif 202 #else 203 #define get_last_socket_error() errno 204 #define clear_socket_error() errno=0 205 #define ioctlsocket(a,b,c) ioctl(a,b,c) 206 #define closesocket(s) close(s) 207 #define readsocket(s,b,n) read((s),(b),(n)) 208 #define writesocket(s,b,n) write((s),(b),(n)) 209 #endif 210 211 #ifdef WIN16 212 # define MS_CALLBACK _far _loadds 213 # define MS_FAR _far 214 #else 215 # define MS_CALLBACK 216 # define MS_FAR 217 #endif 218 219 #ifdef OPENSSL_NO_STDIO 220 # undef OPENSSL_NO_FP_API 221 # define OPENSSL_NO_FP_API 222 #endif 223 224 #if (defined(WINDOWS) || defined(MSDOS)) 225 226 # ifdef __DJGPP__ 227 # include <unistd.h> 228 # include <sys/stat.h> 229 # include <sys/socket.h> 230 # include <tcp.h> 231 # include <netdb.h> 232 # define _setmode setmode 233 # define _O_TEXT O_TEXT 234 # define _O_BINARY O_BINARY 235 # undef DEVRANDOM 236 # define DEVRANDOM "/dev/urandom\x24" 237 # endif /* __DJGPP__ */ 238 239 # ifndef S_IFDIR 240 # define S_IFDIR _S_IFDIR 241 # endif 242 243 # ifndef S_IFMT 244 # define S_IFMT _S_IFMT 245 # endif 246 247 # if !defined(WINNT) && !defined(__DJGPP__) 248 # define NO_SYSLOG 249 # endif 250 # define NO_DIRENT 251 252 # ifdef WINDOWS 253 # if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) 254 /* 255 * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." 256 * Most notably we ought to check for availability of each specific 257 * routine with GetProcAddress() and/or quard NT-specific calls with 258 * GetVersion() < 0x80000000. One can argue that in latter "or" case 259 * we ought to /DELAYLOAD some .DLLs in order to protect ourselves 260 * against run-time link errors. This doesn't seem to be necessary, 261 * because it turned out that already Windows 95, first non-NT Win32 262 * implementation, is equipped with at least NT 3.51 stubs, dummy 263 * routines with same name, but which do nothing. Meaning that it's 264 * apparently appropriate to guard generic NT calls with GetVersion 265 * alone, while NT 4.0 and above calls ought to be additionally 266 * checked upon with GetProcAddress. 267 */ 268 # define _WIN32_WINNT 0x0400 269 # endif 270 # include <windows.h> 271 # include <stdio.h> 272 # include <stddef.h> 273 # include <errno.h> 274 # include <string.h> 275 # ifdef _WIN64 276 # define strlen(s) _strlen31(s) 277 /* cut strings to 2GB */ 278 static unsigned int _strlen31(const char *str) 279 { 280 unsigned int len=0; 281 while (*str && len<0x80000000U) str++, len++; 282 return len&0x7FFFFFFF; 283 } 284 # endif 285 # include <malloc.h> 286 # if defined(_MSC_VER) && _MSC_VER<=1200 && defined(_MT) && defined(isspace) 287 /* compensate for bug in VC6 ctype.h */ 288 # undef isspace 289 # undef isdigit 290 # undef isalnum 291 # undef isupper 292 # undef isxdigit 293 # endif 294 # if defined(_MSC_VER) && !defined(_DLL) && defined(stdin) 295 # if _MSC_VER>=1300 296 # undef stdin 297 # undef stdout 298 # undef stderr 299 FILE *__iob_func(); 300 # define stdin (&__iob_func()[0]) 301 # define stdout (&__iob_func()[1]) 302 # define stderr (&__iob_func()[2]) 303 # elif defined(I_CAN_LIVE_WITH_LNK4049) 304 # undef stdin 305 # undef stdout 306 # undef stderr 307 /* pre-1300 has __p__iob(), but it's available only in msvcrt.lib, 308 * or in other words with /MD. Declaring implicit import, i.e. 309 * with _imp_ prefix, works correctly with all compiler options, 310 * but without /MD results in LINK warning LNK4049: 311 * 'locally defined symbol "__iob" imported'. 312 */ 313 extern FILE *_imp___iob; 314 # define stdin (&_imp___iob[0]) 315 # define stdout (&_imp___iob[1]) 316 # define stderr (&_imp___iob[2]) 317 # endif 318 # endif 319 # endif 320 # include <io.h> 321 # include <fcntl.h> 322 323 # ifdef OPENSSL_SYS_WINCE 324 # include <winsock_extras.h> 325 # endif 326 327 # define ssize_t long 328 329 # if defined (__BORLANDC__) 330 # define _setmode setmode 331 # define _O_TEXT O_TEXT 332 # define _O_BINARY O_BINARY 333 # define _int64 __int64 334 # define _kbhit kbhit 335 # endif 336 337 # if defined(WIN16) && defined(SSLEAY) && defined(_WINEXITNOPERSIST) 338 # define EXIT(n) _wsetexit(_WINEXITNOPERSIST) 339 # define OPENSSL_EXIT(n) do { if (n == 0) EXIT(n); return(n); } while(0) 340 # else 341 # define EXIT(n) exit(n) 342 # endif 343 # define LIST_SEPARATOR_CHAR ';' 344 # ifndef X_OK 345 # define X_OK 0 346 # endif 347 # ifndef W_OK 348 # define W_OK 2 349 # endif 350 # ifndef R_OK 351 # define R_OK 4 352 # endif 353 # define OPENSSL_CONF "openssl.cnf" 354 # define SSLEAY_CONF OPENSSL_CONF 355 # define NUL_DEV "nul" 356 # define RFILE ".rnd" 357 # ifdef OPENSSL_SYS_WINCE 358 # define DEFAULT_HOME "" 359 # else 360 # define DEFAULT_HOME "C:" 361 # endif 362 363 #else /* The non-microsoft world world */ 364 365 # ifdef OPENSSL_SYS_VMS 366 # define VMS 1 367 /* some programs don't include stdlib, so exit() and others give implicit 368 function warnings */ 369 # include <stdlib.h> 370 # if defined(__DECC) 371 # include <unistd.h> 372 # else 373 # include <unixlib.h> 374 # endif 375 # define OPENSSL_CONF "openssl.cnf" 376 # define SSLEAY_CONF OPENSSL_CONF 377 # define RFILE ".rnd" 378 # define LIST_SEPARATOR_CHAR ',' 379 # define NUL_DEV "NLA0:" 380 /* We don't have any well-defined random devices on VMS, yet... */ 381 # undef DEVRANDOM 382 /* We need to do this since VMS has the following coding on status codes: 383 384 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... 385 The important thing to know is that odd numbers are considered 386 good, while even ones are considered errors. 387 Bits 3-15: actual status number 388 Bits 16-27: facility number. 0 is considered "unknown" 389 Bits 28-31: control bits. If bit 28 is set, the shell won't try to 390 output the message (which, for random codes, just looks ugly) 391 392 So, what we do here is to change 0 to 1 to get the default success status, 393 and everything else is shifted up to fit into the status number field, and 394 the status is tagged as an error, which I believe is what is wanted here. 395 -- Richard Levitte 396 */ 397 # define EXIT(n) do { int __VMS_EXIT = n; \ 398 if (__VMS_EXIT == 0) \ 399 __VMS_EXIT = 1; \ 400 else \ 401 __VMS_EXIT = (n << 3) | 2; \ 402 __VMS_EXIT |= 0x10000000; \ 403 exit(__VMS_EXIT); } while(0) 404 # define NO_SYS_PARAM_H 405 406 # elif defined(OPENSSL_SYS_NETWARE) 407 # include <fcntl.h> 408 # include <unistd.h> 409 # define NO_SYS_TYPES_H 410 # undef DEVRANDOM 411 # ifdef NETWARE_CLIB 412 # define getpid GetThreadID 413 extern int GetThreadID(void); 414 /* # include <conio.h> */ 415 extern int kbhit(void); 416 extern void delay(unsigned milliseconds); 417 # else 418 # include <screen.h> 419 # endif 420 # define NO_SYSLOG 421 # define _setmode setmode 422 # define _kbhit kbhit 423 # define _O_TEXT O_TEXT 424 # define _O_BINARY O_BINARY 425 # define OPENSSL_CONF "openssl.cnf" 426 # define SSLEAY_CONF OPENSSL_CONF 427 # define RFILE ".rnd" 428 # define LIST_SEPARATOR_CHAR ';' 429 # define EXIT(n) { if (n) printf("ERROR: %d\n", (int)n); exit(n); } 430 431 # else 432 /* !defined VMS */ 433 # ifdef OPENSSL_SYS_MPE 434 # define NO_SYS_PARAM_H 435 # endif 436 # ifdef OPENSSL_UNISTD 437 # include OPENSSL_UNISTD 438 # else 439 # include <unistd.h> 440 # endif 441 # ifndef NO_SYS_TYPES_H 442 # include <sys/types.h> 443 # endif 444 # if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) 445 # define pid_t int /* pid_t is missing on NEXTSTEP/OPENSTEP 446 * (unless when compiling with -D_POSIX_SOURCE, 447 * which doesn't work for us) */ 448 # endif 449 # if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS) 450 # define ssize_t int /* ditto */ 451 # endif 452 # ifdef OPENSSL_SYS_NEWS4 /* setvbuf is missing on mips-sony-bsd */ 453 # define setvbuf(a, b, c, d) setbuffer((a), (b), (d)) 454 typedef unsigned long clock_t; 455 # endif 456 457 # define OPENSSL_CONF "openssl.cnf" 458 # define SSLEAY_CONF OPENSSL_CONF 459 # define RFILE ".rnd" 460 # define LIST_SEPARATOR_CHAR ':' 461 # define NUL_DEV "/dev/null" 462 # define EXIT(n) exit(n) 463 # endif 464 465 # define SSLeay_getpid() getpid() 466 467 #endif 468 469 470 /*************/ 471 472 #ifdef USE_SOCKETS 473 # if defined(WINDOWS) || defined(MSDOS) 474 /* windows world */ 475 476 # ifdef OPENSSL_NO_SOCK 477 # define SSLeay_Write(a,b,c) (-1) 478 # define SSLeay_Read(a,b,c) (-1) 479 # define SHUTDOWN(fd) close(fd) 480 # define SHUTDOWN2(fd) close(fd) 481 # elif !defined(__DJGPP__) 482 # include <winsock.h> 483 extern HINSTANCE _hInstance; 484 # ifdef _WIN64 485 /* 486 * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because 487 * the value constitutes an index in per-process table of limited size 488 * and not a real pointer. 489 */ 490 # define socket(d,t,p) ((int)socket(d,t,p)) 491 # define accept(s,f,l) ((int)accept(s,f,l)) 492 # endif 493 # define SSLeay_Write(a,b,c) send((a),(b),(c),0) 494 # define SSLeay_Read(a,b,c) recv((a),(b),(c),0) 495 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); } 496 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); } 497 # else 498 # define SSLeay_Write(a,b,c) write_s(a,b,c,0) 499 # define SSLeay_Read(a,b,c) read_s(a,b,c) 500 # define SHUTDOWN(fd) close_s(fd) 501 # define SHUTDOWN2(fd) close_s(fd) 502 # endif 503 504 # elif defined(MAC_OS_pre_X) 505 506 # include "MacSocket.h" 507 # define SSLeay_Write(a,b,c) MacSocket_send((a),(b),(c)) 508 # define SSLeay_Read(a,b,c) MacSocket_recv((a),(b),(c),true) 509 # define SHUTDOWN(fd) MacSocket_close(fd) 510 # define SHUTDOWN2(fd) MacSocket_close(fd) 511 512 # elif defined(OPENSSL_SYS_NETWARE) 513 /* NetWare uses the WinSock2 interfaces by default, but can be configured for BSD 514 */ 515 # if defined(NETWARE_BSDSOCK) 516 # include <sys/socket.h> 517 # include <netinet/in.h> 518 # include <sys/time.h> 519 # if defined(NETWARE_CLIB) 520 # include <sys/bsdskt.h> 521 # else 522 # include <sys/select.h> 523 # endif 524 # define INVALID_SOCKET (int)(~0) 525 # else 526 # include <novsock2.h> 527 # endif 528 # define SSLeay_Write(a,b,c) send((a),(b),(c),0) 529 # define SSLeay_Read(a,b,c) recv((a),(b),(c),0) 530 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); } 531 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); } 532 533 # else 534 535 # ifndef NO_SYS_PARAM_H 536 # include <sys/param.h> 537 # endif 538 # ifdef OPENSSL_SYS_VXWORKS 539 # include <time.h> 540 # elif !defined(OPENSSL_SYS_MPE) 541 # include <sys/time.h> /* Needed under linux for FD_XXX */ 542 # endif 543 544 # include <netdb.h> 545 # if defined(OPENSSL_SYS_VMS_NODECC) 546 # include <socket.h> 547 # include <in.h> 548 # include <inet.h> 549 # else 550 # include <sys/socket.h> 551 # ifdef FILIO_H 552 # include <sys/filio.h> /* Added for FIONBIO under unixware */ 553 # endif 554 # include <netinet/in.h> 555 # include <arpa/inet.h> 556 # endif 557 558 # if defined(NeXT) || defined(_NEXT_SOURCE) 559 # include <sys/fcntl.h> 560 # include <sys/types.h> 561 # endif 562 563 # ifdef OPENSSL_SYS_AIX 564 # include <sys/select.h> 565 # endif 566 567 # ifdef __QNX__ 568 # include <sys/select.h> 569 # endif 570 571 # if defined(sun) 572 # include <sys/filio.h> 573 # else 574 # ifndef VMS 575 # include <sys/ioctl.h> 576 # else 577 /* ioctl is only in VMS > 7.0 and when socketshr is not used */ 578 # if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000) 579 # include <sys/ioctl.h> 580 # endif 581 # endif 582 # endif 583 584 # ifdef VMS 585 # include <unixio.h> 586 # if defined(TCPIP_TYPE_SOCKETSHR) 587 # include <socketshr.h> 588 # endif 589 # endif 590 591 # define SSLeay_Read(a,b,c) read((a),(b),(c)) 592 # define SSLeay_Write(a,b,c) write((a),(b),(c)) 593 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket((fd)); } 594 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket((fd)); } 595 # ifndef INVALID_SOCKET 596 # define INVALID_SOCKET (-1) 597 # endif /* INVALID_SOCKET */ 598 # endif 599 #endif 600 601 #if defined(__ultrix) 602 # ifndef ssize_t 603 # define ssize_t int 604 # endif 605 #endif 606 607 #if defined(sun) && !defined(__svr4__) && !defined(__SVR4) 608 /* include headers first, so our defines don't break it */ 609 #include <stdlib.h> 610 #include <string.h> 611 /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */ 612 # define memmove(s1,s2,n) bcopy((s2),(s1),(n)) 613 # define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b))) 614 extern char *sys_errlist[]; extern int sys_nerr; 615 # define strerror(errnum) \ 616 (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum]) 617 /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */ 618 #include "crypto/o_str.h" 619 # define memcmp OPENSSL_memcmp 620 #endif 621 622 #ifndef OPENSSL_EXIT 623 # if defined(MONOLITH) && !defined(OPENSSL_C) 624 # define OPENSSL_EXIT(n) return(n) 625 # else 626 # define OPENSSL_EXIT(n) do { EXIT(n); return(n); } while(0) 627 # endif 628 #endif 629 630 /***********************************************/ 631 632 /* do we need to do this for getenv. 633 * Just define getenv for use under windows */ 634 635 #ifdef WIN16 636 /* How to do this needs to be thought out a bit more.... */ 637 /*char *GETENV(char *); 638 #define Getenv GETENV*/ 639 #define Getenv getenv 640 #else 641 #define Getenv getenv 642 #endif 643 644 #define DG_GCC_BUG /* gcc < 2.6.3 on DGUX */ 645 646 #ifdef sgi 647 #define IRIX_CC_BUG /* all version of IRIX I've tested (4.* 5.*) */ 648 #endif 649 #ifdef OPENSSL_SYS_SNI 650 #define IRIX_CC_BUG /* CDS++ up to V2.0Bsomething suffered from the same bug.*/ 651 #endif 652 653 #if defined(OPENSSL_SYS_WINDOWS) 654 # define strcasecmp _stricmp 655 # define strncasecmp _strnicmp 656 #elif defined(OPENSSL_SYS_VMS) 657 /* VMS below version 7.0 doesn't have strcasecmp() */ 658 # include "o_str.h" 659 # define strcasecmp OPENSSL_strcasecmp 660 # define strncasecmp OPENSSL_strncasecmp 661 # define OPENSSL_IMPLEMENTS_strncasecmp 662 #elif defined(OPENSSL_SYS_OS2) && defined(__EMX__) 663 # define strcasecmp stricmp 664 # define strncasecmp strnicmp 665 #elif defined(OPENSSL_SYS_NETWARE) 666 # include <string.h> 667 # if defined(NETWARE_CLIB) 668 # define strcasecmp stricmp 669 # define strncasecmp strnicmp 670 # endif /* NETWARE_CLIB */ 671 #endif 672 673 #if defined(OPENSSL_SYS_OS2) && defined(__EMX__) 674 # include <io.h> 675 # include <fcntl.h> 676 # define NO_SYSLOG 677 #endif 678 679 /* vxworks */ 680 #if defined(OPENSSL_SYS_VXWORKS) 681 #include <ioLib.h> 682 #include <tickLib.h> 683 #include <sysLib.h> 684 685 #define TTY_STRUCT int 686 687 #define sleep(a) taskDelay((a) * sysClkRateGet()) 688 689 #include <vxWorks.h> 690 #include <sockLib.h> 691 #include <taskLib.h> 692 693 #define getpid taskIdSelf 694 695 /* NOTE: these are implemented by helpers in database app! 696 * if the database is not linked, we need to implement them 697 * elswhere */ 698 struct hostent *gethostbyname(const char *name); 699 struct hostent *gethostbyaddr(const char *addr, int length, int type); 700 struct servent *getservbyname(const char *name, const char *proto); 701 702 #endif 703 /* end vxworks */ 704 705 #ifdef __cplusplus 706 } 707 #endif 708 709 #endif 710 711