Updated support for NetWare, submitted by Verdon Walker <VWalker@novell.com>.
[openssl.git] / e_os.h
diff --git a/e_os.h b/e_os.h
index 09774165ebbc27d6b34a09977d33aa3351173b03..54982cee0064383e1ddcf884af3440b039d079e9 100644 (file)
--- a/e_os.h
+++ b/e_os.h
@@ -181,6 +181,11 @@ extern "C" {
 #define closesocket(s)             close(s)
 #define readsocket(s,b,n)          read((s),(b),(n))
 #define writesocket(s,b,n)         write((s),(char *)(b),(n))
+#elif defined(OPENSSL_SYS_NETWARE)
+#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)
 #else
 #define get_last_socket_error()        errno
 #define clear_socket_error()   errno=0
@@ -230,6 +235,23 @@ extern "C" {
 #  define NO_DIRENT
 
 #  ifdef WINDOWS
+#    ifndef _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
+       * 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.
+       */
+#      define _WIN32_WINNT 0x0400
+#    endif
 #    include <windows.h>
 #    include <stddef.h>
 #    include <errno.h>
@@ -416,11 +438,7 @@ extern HINSTANCE _hInstance;
 #  elif defined(OPENSSL_SYS_NETWARE)
          /* NetWare uses the WinSock2 interfaces
          */
-#      if defined(NETWARE_CLIB)
-#        include <ws2nlm.h>
-#      elif defined(NETWARE_LIBC)
-#        include <novsock2.h>
-#      endif
+#      include <novsock2.h>
 #      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); }
@@ -551,6 +569,7 @@ extern char *sys_errlist[]; extern int sys_nerr;
 #  include "o_str.h"
 #  define strcasecmp OPENSSL_strcasecmp
 #  define strncasecmp OPENSSL_strncasecmp
+#  define OPENSSL_IMPLEMENTS_strncasecmp
 #elif defined(OPENSSL_SYS_OS2) && defined(__EMX__)
 #  define strcasecmp stricmp
 #  define strncasecmp strnicmp