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