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