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 your 'random' device if you have one. 81 * My default, we will try to read this file */ 82 #define DEVRANDOM "/dev/urandom" 83 #endif 84 85 #if defined(VXWORKS) 86 # define NO_SYS_PARAM_H 87 # define NO_CHMOD 88 # define NO_SYSLOG 89 #endif 90 91 #if defined(__MWERKS__) && defined(macintosh) 92 # if macintosh==1 93 # ifndef MAC_OS_GUSI_SOURCE 94 # define MAC_OS_pre_X 95 # define NO_SYS_TYPES_H 96 typedef long ssize_t; 97 # endif 98 # define NO_SYS_PARAM_H 99 # define NO_CHMOD 100 # define NO_SYSLOG 101 # undef DEVRANDOM 102 # define GETPID_IS_MEANINGLESS 103 # endif 104 #endif 105 106 /******************************************************************** 107 The Microsoft section 108 ********************************************************************/ 109 /* The following is used becaue of the small stack in some 110 * Microsoft operating systems */ 111 #if defined(WIN16) || defined(MSDOS) 112 # define MS_STATIC static 113 #else 114 # define MS_STATIC 115 #endif 116 117 #if defined(_WIN32) && !defined(WIN32) && !defined(__CYGWIN32__) && !defined(_UWIN) 118 # define WIN32 119 #endif 120 121 #if (defined(WIN32) || defined(WIN16)) && !defined(__CYGWIN32__) && !defined(_UWIN) 122 # ifndef WINDOWS 123 # define WINDOWS 124 # endif 125 # ifndef MSDOS 126 # define MSDOS 127 # endif 128 #endif 129 130 #if defined(MSDOS) && !defined(GETPID_IS_MEANINGLESS) 131 # define GETPID_IS_MEANINGLESS 132 #endif 133 134 #ifdef WIN32 135 #define get_last_sys_error() GetLastError() 136 #define clear_sys_error() SetLastError(0) 137 #if !defined(WINNT) 138 #define WIN_CONSOLE_BUG 139 #endif 140 #else 141 #define get_last_sys_error() errno 142 #define clear_sys_error() errno=0 143 #endif 144 145 #if defined(WINDOWS) && !defined(__CYGWIN32__) && !defined(_UWIN) 146 147 #define get_last_socket_error() WSAGetLastError() 148 #define clear_socket_error() WSASetLastError(0) 149 #define readsocket(s,b,n) recv((s),(b),(n),0) 150 #define writesocket(s,b,n) send((s),(b),(n),0) 151 #define EADDRINUSE WSAEADDRINUSE 152 #elif defined(MAC_OS_pre_X) 153 #define get_last_socket_error() errno 154 #define clear_socket_error() errno=0 155 #define closesocket(s) MacSocket_close(s) 156 #define readsocket(s,b,n) MacSocket_recv((s),(b),(n),true) 157 #define writesocket(s,b,n) MacSocket_send((s),(b),(n)) 158 #elif defined(VMS) 159 #define get_last_socket_error() errno 160 #define clear_socket_error() errno=0 161 #define ioctlsocket(a,b,c) ioctl(a,b,c) 162 #define closesocket(s) close(s) 163 #define readsocket(s,b,n) recv((s),(b),(n),0) 164 #define writesocket(s,b,n) send((s),(b),(n),0) 165 #else 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) read((s),(b),(n)) 171 #define writesocket(s,b,n) write((s),(b),(n)) 172 #endif 173 174 #ifdef WIN16 175 # define NO_FP_API 176 # define MS_CALLBACK _far _loadds 177 # define MS_FAR _far 178 #else 179 # define MS_CALLBACK 180 # define MS_FAR 181 #endif 182 183 #ifdef NO_STDIO 184 # define NO_FP_API 185 #endif 186 187 #if (defined(WINDOWS) || defined(MSDOS)) && !defined(__CYGWIN32__) && !defined(_UWIN) 188 189 # ifndef S_IFDIR 190 # define S_IFDIR _S_IFDIR 191 # endif 192 193 # ifndef S_IFMT 194 # define S_IFMT _S_IFMT 195 # endif 196 197 # if !defined(WINNT) 198 # define NO_SYSLOG 199 # endif 200 # define NO_DIRENT 201 202 # ifdef WINDOWS 203 # include <windows.h> 204 # include <stddef.h> 205 # include <errno.h> 206 # include <string.h> 207 # include <malloc.h> 208 # endif 209 # include <io.h> 210 # include <fcntl.h> 211 212 # define ssize_t long 213 214 # if defined (__BORLANDC__) 215 # define _setmode setmode 216 # define _O_TEXT O_TEXT 217 # define _O_BINARY O_BINARY 218 # define _int64 __int64 219 # define _kbhit kbhit 220 # endif 221 222 # if defined(WIN16) && !defined(MONOLITH) && defined(SSLEAY) && defined(_WINEXITNOPERSIST) 223 # define EXIT(n) { if (n == 0) _wsetexit(_WINEXITNOPERSIST); return(n); } 224 # else 225 # define EXIT(n) return(n); 226 # endif 227 # define LIST_SEPARATOR_CHAR ';' 228 # ifndef X_OK 229 # define X_OK 0 230 # endif 231 # ifndef W_OK 232 # define W_OK 2 233 # endif 234 # ifndef R_OK 235 # define R_OK 4 236 # endif 237 # define OPENSSL_CONF "openssl.cnf" 238 # define SSLEAY_CONF OPENSSL_CONF 239 # define NUL_DEV "nul" 240 # define RFILE ".rnd" 241 # define DEFAULT_HOME "C:" 242 243 #else /* The non-microsoft world world */ 244 245 # if defined(__VMS) && !defined(VMS) 246 # define VMS 1 247 # endif 248 249 # ifdef VMS 250 /* some programs don't include stdlib, so exit() and others give implicit 251 function warnings */ 252 # include <stdlib.h> 253 # if defined(__DECC) 254 # include <unistd.h> 255 # else 256 # include <unixlib.h> 257 # endif 258 # define OPENSSL_CONF "openssl.cnf" 259 # define SSLEAY_CONF OPENSSL_CONF 260 # define RFILE ".rnd" 261 # define LIST_SEPARATOR_CHAR ',' 262 # define NUL_DEV "NLA0:" 263 /* We need to do this since VMS has the following coding on status codes: 264 265 Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ... 266 The important thing to know is that odd numbers are considered 267 good, while even ones are considered errors. 268 Bits 3-15: actual status number 269 Bits 16-27: facility number. 0 is considered "unknown" 270 Bits 28-31: control bits. If bit 28 is set, the shell won't try to 271 output the message (which, for random codes, just looks ugly) 272 273 So, what we do here is to change 0 to 1 to get the default success status, 274 and everything else is shifted up to fit into the status number field, and 275 the status is tagged as an error, which I believe is what is wanted here. 276 -- Richard Levitte 277 */ 278 # if !defined(MONOLITH) || defined(OPENSSL_C) 279 # define EXIT(n) do { int __VMS_EXIT = n; \ 280 if (__VMS_EXIT == 0) \ 281 __VMS_EXIT = 1; \ 282 else \ 283 __VMS_EXIT = (n << 3) | 2; \ 284 __VMS_EXIT |= 0x10000000; \ 285 exit(__VMS_EXIT); \ 286 return(__VMS_EXIT); } while(0) 287 # else 288 # define EXIT(n) return(n) 289 # endif 290 # define NO_SYS_PARAM_H 291 # else 292 /* !defined VMS */ 293 # ifdef MPE 294 # define NO_SYS_PARAM_H 295 # endif 296 # ifdef OPENSSL_UNISTD 297 # include OPENSSL_UNISTD 298 # else 299 # include <unistd.h> 300 # endif 301 # ifndef NO_SYS_TYPES_H 302 # include <sys/types.h> 303 # endif 304 # if defined(NeXT) || defined(NEWS4) 305 # define pid_t int /* pid_t is missing on NEXTSTEP/OPENSTEP 306 * (unless when compiling with -D_POSIX_SOURCE, 307 * which doesn't work for us) */ 308 # define ssize_t int /* ditto */ 309 # endif 310 # ifdef NEWS4 /* setvbuf is missing on mips-sony-bsd */ 311 # define setvbuf(a, b, c, d) setbuffer((a), (b), (d)) 312 typedef unsigned long clock_t; 313 # endif 314 315 # define OPENSSL_CONF "openssl.cnf" 316 # define SSLEAY_CONF OPENSSL_CONF 317 # define RFILE ".rnd" 318 # define LIST_SEPARATOR_CHAR ':' 319 # define NUL_DEV "/dev/null" 320 # ifndef MONOLITH 321 # define EXIT(n) exit(n); return(n) 322 # else 323 # define EXIT(n) return(n) 324 # endif 325 # endif 326 327 # define SSLeay_getpid() getpid() 328 329 #endif 330 331 332 /*************/ 333 334 #ifdef USE_SOCKETS 335 # if defined(WINDOWS) || defined(MSDOS) 336 /* windows world */ 337 338 # ifdef NO_SOCK 339 # define SSLeay_Write(a,b,c) (-1) 340 # define SSLeay_Read(a,b,c) (-1) 341 # define SHUTDOWN(fd) close(fd) 342 # define SHUTDOWN2(fd) close(fd) 343 # else 344 # include <winsock.h> 345 extern HINSTANCE _hInstance; 346 # define SSLeay_Write(a,b,c) send((a),(b),(c),0) 347 # define SSLeay_Read(a,b,c) recv((a),(b),(c),0) 348 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); } 349 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket(fd); } 350 # endif 351 352 # elif defined(MAC_OS_pre_X) 353 354 # include "MacSocket.h" 355 # define SSLeay_Write(a,b,c) MacSocket_send((a),(b),(c)) 356 # define SSLeay_Read(a,b,c) MacSocket_recv((a),(b),(c),true) 357 # define SHUTDOWN(fd) MacSocket_close(fd) 358 # define SHUTDOWN2(fd) MacSocket_close(fd) 359 360 # else 361 362 # ifndef NO_SYS_PARAM_H 363 # include <sys/param.h> 364 # endif 365 # ifdef VXWORKS 366 # include <time.h> 367 # elif !defined(MPE) 368 # include <sys/time.h> /* Needed under linux for FD_XXX */ 369 # endif 370 371 # include <netdb.h> 372 # if defined(VMS) && !defined(__DECC) 373 # include <socket.h> 374 # include <in.h> 375 # include <inet.h> 376 # else 377 # include <sys/socket.h> 378 # ifdef FILIO_H 379 # include <sys/filio.h> /* Added for FIONBIO under unixware */ 380 # endif 381 # include <netinet/in.h> 382 # include <arpa/inet.h> 383 # endif 384 385 # if defined(NeXT) || defined(_NEXT_SOURCE) 386 # include <sys/fcntl.h> 387 # include <sys/types.h> 388 # endif 389 390 # ifdef AIX 391 # include <sys/select.h> 392 # endif 393 394 # ifdef __QNX__ 395 # include <sys/select.h> 396 # endif 397 398 # if defined(sun) 399 # include <sys/filio.h> 400 # else 401 # ifndef VMS 402 # include <sys/ioctl.h> 403 # else 404 /* ioctl is only in VMS > 7.0 and when socketshr is not used */ 405 # if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000) 406 # include <sys/ioctl.h> 407 # endif 408 # endif 409 # endif 410 411 # ifdef VMS 412 # include <unixio.h> 413 # if defined(TCPIP_TYPE_SOCKETSHR) 414 # include <socketshr.h> 415 # endif 416 # endif 417 418 # define SSLeay_Read(a,b,c) read((a),(b),(c)) 419 # define SSLeay_Write(a,b,c) write((a),(b),(c)) 420 # define SHUTDOWN(fd) { shutdown((fd),0); closesocket((fd)); } 421 # define SHUTDOWN2(fd) { shutdown((fd),2); closesocket((fd)); } 422 # define INVALID_SOCKET (-1) 423 # endif 424 #endif 425 426 #if defined(__ultrix) 427 # ifndef ssize_t 428 # define ssize_t int 429 # endif 430 #endif 431 432 #if defined(sun) && !defined(__svr4__) && !defined(__SVR4) 433 /* include headers first, so our defines don't break it */ 434 #include <stdlib.h> 435 #include <string.h> 436 /* bcopy can handle overlapping moves according to SunOS 4.1.4 manpage */ 437 # define memmove(s1,s2,n) bcopy((s2),(s1),(n)) 438 # define strtoul(s,e,b) ((unsigned long int)strtol((s),(e),(b))) 439 extern char *sys_errlist[]; extern int sys_nerr; 440 # define strerror(errnum) \ 441 (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum]) 442 #endif 443 444 /***********************************************/ 445 446 /* do we need to do this for getenv. 447 * Just define getenv for use under windows */ 448 449 #ifdef WIN16 450 /* How to do this needs to be thought out a bit more.... */ 451 /*char *GETENV(char *); 452 #define Getenv GETENV*/ 453 #define Getenv getenv 454 #else 455 #define Getenv getenv 456 #endif 457 458 #define DG_GCC_BUG /* gcc < 2.6.3 on DGUX */ 459 460 #ifdef sgi 461 #define IRIX_CC_BUG /* all version of IRIX I've tested (4.* 5.*) */ 462 #endif 463 #ifdef SNI 464 #define IRIX_CC_BUG /* CDS++ up to V2.0Bsomething suffered from the same bug.*/ 465 #endif 466 467 #ifdef NO_MD2 468 #define MD2_Init MD2Init 469 #define MD2_Update MD2Update 470 #define MD2_Final MD2Final 471 #define MD2_DIGEST_LENGTH 16 472 #endif 473 #ifdef NO_MD5 474 #define MD5_Init MD5Init 475 #define MD5_Update MD5Update 476 #define MD5_Final MD5Final 477 #define MD5_DIGEST_LENGTH 16 478 #endif 479 480 #ifdef __cplusplus 481 } 482 #endif 483 484 #endif 485 486