X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=e_os.h;h=78753de970802f7900abd5b4933ecf7e6d64aa24;hp=cf76632b1e07c025bed8154db81da8e3aa110189;hb=67475a7ed773212f9209d307493b33e40ae96cda;hpb=e476f9421288aedee52a65ec813c7683ff0ccf5f diff --git a/e_os.h b/e_os.h index cf76632b1e..78753de970 100644 --- a/e_os.h +++ b/e_os.h @@ -123,9 +123,6 @@ extern "C" { #if defined(OPENSSL_SYS_WIN32) && !defined(WIN32) # define WIN32 #endif -#if defined(OPENSSL_SYS_WIN16) && !defined(WIN16) -# define WIN16 -#endif #if defined(OPENSSL_SYS_WINDOWS) && !defined(WINDOWS) # define WINDOWS #endif @@ -182,10 +179,18 @@ extern "C" { #define readsocket(s,b,n) read((s),(b),(n)) #define writesocket(s,b,n) write((s),(char *)(b),(n)) #elif defined(OPENSSL_SYS_NETWARE) +#if defined(NETWARE_BSDSOCK) +#define get_last_socket_error() errno +#define clear_socket_error() errno=0 +#define closesocket(s) close(s) +#define readsocket(s,b,n) recv((s),(b),(n),0) +#define writesocket(s,b,n) send((s),(b),(n),0) +#else #define get_last_socket_error() WSAGetLastError() #define clear_socket_error() WSASetLastError(0) #define readsocket(s,b,n) recv((s),(b),(n),0) #define writesocket(s,b,n) send((s),(b),(n),0) +#endif #else #define get_last_socket_error() errno #define clear_socket_error() errno=0 @@ -195,7 +200,7 @@ extern "C" { #define writesocket(s,b,n) write((s),(b),(n)) #endif -#ifdef WIN16 +#ifdef WIN16 /* never the case */ # define MS_CALLBACK _far _loadds # define MS_FAR _far #else @@ -219,6 +224,8 @@ extern "C" { # define _setmode setmode # define _O_TEXT O_TEXT # define _O_BINARY O_BINARY +# undef DEVRANDOM +# define DEVRANDOM "/dev/urandom\x24" # endif /* __DJGPP__ */ # ifndef S_IFDIR @@ -235,34 +242,56 @@ extern "C" { # define NO_DIRENT # ifdef WINDOWS -# ifndef _WIN32_WINNT +# if !defined(_WIN32_WCE) && !defined(_WIN32_WINNT) /* * Defining _WIN32_WINNT here in e_os.h implies certain "discipline." * Most notably we ought to check for availability of each specific - * routine with GetProcAddress() and/or quard NT-specific calls with + * routine with GetProcAddress() and/or guard NT-specific calls with * GetVersion() < 0x80000000. One can argue that in latter "or" case * we ought to /DELAYLOAD some .DLLs in order to protect ourselves * against run-time link errors. This doesn't seem to be necessary, * because it turned out that already Windows 95, first non-NT Win32 * implementation, is equipped with at least NT 3.51 stubs, dummy * routines with same name, but which do nothing. Meaning that it's - * apparently appropriate to guard generic NT calls with GetVersion - * alone, while NT 4.0 and above calls ought to be additionally - * checked upon with GetProcAddress. + * apparently sufficient to guard "vanilla" NT calls with GetVersion + * alone, while NT 4.0 and above interfaces ought to be linked with + * GetProcAddress at run-time. */ # define _WIN32_WINNT 0x0400 # endif +# if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT) + /* + * Just like defining _WIN32_WINNT including winsock2.h implies + * certain "discipline" for maintaing [broad] binary compatibility. + * As long as structures are invariant among Winsock versions, + * it's sufficient to check for specific Winsock2 API availability + * at run-time [DSO_global_lookup is recommended]... + */ +# include +# include + /* yes, they have to be #included prior */ +# endif # include # include # include # include +# ifdef _WIN64 +# define strlen(s) _strlen31(s) +/* cut strings to 2GB */ +static unsigned int _strlen31(const char *str) + { + unsigned int len=0; + while (*str && len<0x80000000U) str++, len++; + return len&0x7FFFFFFF; + } +# endif # include # endif # include # include # ifdef OPENSSL_SYS_WINCE -# include +# define OPENSSL_NO_POSIX_IO # endif # define ssize_t long @@ -275,12 +304,7 @@ extern "C" { # define _kbhit kbhit # endif -# if defined(WIN16) && defined(SSLEAY) && defined(_WINEXITNOPERSIST) -# define EXIT(n) _wsetexit(_WINEXITNOPERSIST) -# define OPENSSL_EXIT(n) do { if (n == 0) EXIT(n); return(n); } while(0) -# else -# define EXIT(n) exit(n) -# endif +# define EXIT(n) exit(n) # define LIST_SEPARATOR_CHAR ';' # ifndef X_OK # define X_OK 0 @@ -388,6 +412,10 @@ extern "C" { # define setvbuf(a, b, c, d) setbuffer((a), (b), (d)) typedef unsigned long clock_t; # endif +# ifdef OPENSSL_SYS_WIN32_CYGWIN +# include +# include +# endif # define OPENSSL_CONF "openssl.cnf" # define SSLEAY_CONF OPENSSL_CONF @@ -414,8 +442,25 @@ extern "C" { # define SHUTDOWN(fd) close(fd) # define SHUTDOWN2(fd) close(fd) # elif !defined(__DJGPP__) +# if defined(_WIN32_WCE) && _WIN32_WCE<410 +# define getservbyname _masked_declaration_getservbyname +# endif # include -extern HINSTANCE _hInstance; +# ifdef getservbyname +# undef getservbyname + /* this is used to be wcecompat/include/winsock_extras.h */ + struct servent* PASCAL getservbyname(const char*,const char*); +# endif + +# ifdef _WIN64 +/* + * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because + * the value constitutes an index in per-process table of limited size + * and not a real pointer. + */ +# define socket(d,t,p) ((int)socket(d,t,p)) +# define accept(s,f,l) ((int)accept(s,f,l)) +# endif # define SSLeay_Write(a,b,c) send((a),(b),(c),0) # define SSLeay_Read(a,b,c) recv((a),(b),(c),0) # define SHUTDOWN(fd) { shutdown((fd),0); closesocket(fd); } @@ -436,11 +481,15 @@ extern HINSTANCE _hInstance; # define SHUTDOWN2(fd) MacSocket_close(fd) # elif defined(OPENSSL_SYS_NETWARE) - /* NetWare uses the WinSock2 interfaces + /* NetWare uses the WinSock2 interfaces by default, but can be configured for BSD */ -# if defined(NETWARE_CLIB) -# include -# elif defined(NETWARE_LIBC) +# if defined(NETWARE_BSDSOCK) +# include +# include +# include +# include +# define INVALID_SOCKET (int)(~0) +# else # include # endif # define SSLeay_Write(a,b,c) send((a),(b),(c),0) @@ -532,6 +581,9 @@ extern HINSTANCE _hInstance; extern char *sys_errlist[]; extern int sys_nerr; # define strerror(errnum) \ (((errnum)<0 || (errnum)>=sys_nerr) ? NULL : sys_errlist[errnum]) + /* Being signed SunOS 4.x memcpy breaks ASN1_OBJECT table lookup */ +#include "crypto/o_str.h" +# define memcmp OPENSSL_memcmp #endif #ifndef OPENSSL_EXIT @@ -544,18 +596,6 @@ extern char *sys_errlist[]; extern int sys_nerr; /***********************************************/ -/* do we need to do this for getenv. - * Just define getenv for use under windows */ - -#ifdef WIN16 -/* How to do this needs to be thought out a bit more.... */ -/*char *GETENV(char *); -#define Getenv GETENV*/ -#define Getenv getenv -#else -#define Getenv getenv -#endif - #define DG_GCC_BUG /* gcc < 2.6.3 on DGUX */ #ifdef sgi