summaryrefslogtreecommitdiff
path: root/win/inspircd_win32wrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'win/inspircd_win32wrapper.h')
-rw-r--r--win/inspircd_win32wrapper.h98
1 files changed, 47 insertions, 51 deletions
diff --git a/win/inspircd_win32wrapper.h b/win/inspircd_win32wrapper.h
index d7ceb73aa..a6ca0da6e 100644
--- a/win/inspircd_win32wrapper.h
+++ b/win/inspircd_win32wrapper.h
@@ -19,18 +19,16 @@
*/
+#pragma once
+
/* Windows Port
Wrapper Functions/Definitions
By Burlex */
-
-#ifndef INSPIRCD_WIN32WRAPPER_H
-#define INSPIRCD_WIN32WRAPPER_H
-
/*
* Starting with PSAPI version 2 for Windows 7 and Windows Server 2008 R2, this function is defined as K32GetProcessMemoryInfo in Psapi.h and exported
* in Kernel32.lib and Kernel32.dll. However, you should always call this function as GetProcessMemoryInfo. To ensure correct resolution of symbols
* for programs that will run on earlier versions of Windows, add Psapi.lib to the TARGETLIBS macro and compile the program with PSAPI_VERSION=1.
- *
+ *
* We do this before anything to make sure it's done.
*/
#define PSAPI_VERSION 1
@@ -45,9 +43,6 @@
#define VC_EXTRALEAN
#define WIN32_LEAN_AND_MEAN
-/* They just have to be *different*, don't they. */
-#define PATH_MAX MAX_PATH
-
/* Macros for exporting symbols - dependant on what is being compiled */
#ifdef DLL_BUILD
@@ -74,6 +69,17 @@
#include <sys/stat.h>
#include <direct.h>
#include <process.h>
+#include <io.h>
+
+#define F_OK 0 /* test for existence of file */
+#define X_OK (1<<0) /* test for execute or search permission */
+#define W_OK (1<<1) /* test for write permission */
+#define R_OK (1<<2) /* test for read permission */
+
+// Windows defines these already.
+#undef ERROR
+#undef min
+#undef max
/* strcasecmp is not defined on windows by default */
#define strcasecmp _stricmp
@@ -81,36 +87,10 @@
typedef int ssize_t;
-/* Convert formatted (xxx.xxx.xxx.xxx) string to in_addr struct */
-CoreExport int insp_inet_pton(int af, const char * src, void * dst);
-
-/* Convert struct to formatted (xxx.xxx.xxx.xxx) string */
-CoreExport const char * insp_inet_ntop(int af, const void * src, char * dst, socklen_t cnt);
-
-/* inet_pton/ntop require at least NT 6.0 */
-#define inet_pton insp_inet_pton
-#define inet_ntop insp_inet_ntop
-
-/* Safe printf functions aren't defined in VC++ releases older than v14 */
-#if _MSC_VER <= 1800
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
-#endif
-
-/* Unix-style sleep (argument is in seconds) */
-__inline void sleep(int seconds) { Sleep(seconds * 1000); }
-
/* _popen, _pclose */
#define popen _popen
#define pclose _pclose
-/* IPV4 only convert string to address struct */
-__inline int inet_aton(const char *cp, struct in_addr *addr)
-{
- addr->s_addr = inet_addr(cp);
- return (addr->s_addr == INADDR_NONE) ? 0 : 1;
-};
-
/* getopt() wrapper */
#define no_argument 0
#define required_argument 1
@@ -139,14 +119,6 @@ struct DIR
bool first;
};
-#if _MSC_VER <= 1800
-struct timespec
-{
- time_t tv_sec;
- long tv_nsec;
-};
-#endif
-
CoreExport DIR * opendir(const char * path);
CoreExport dirent * readdir(DIR * handle);
CoreExport void closedir(DIR * handle);
@@ -181,18 +153,10 @@ CoreExport void closedir(DIR * handle);
// warning C4706: assignment within conditional expression
#pragma warning(disable:4706)
-// warning C4355: 'this' : used in base member initializer list
-// This warning is disabled by default since VC2012
-#if _MSC_VER < 1700
-#pragma warning(disable:4355)
-#endif
-
/* Shared memory allocation functions */
void * ::operator new(size_t iSize);
void ::operator delete(void * ptr);
-#define DISABLE_WRITEV
-
#include <exception>
class CWin32Exception : public std::exception
@@ -208,5 +172,37 @@ private:
DWORD dwErrorCode;
};
-#endif
+// Same value as EXIT_STATUS_FORK (EXIT_STATUS_FORK is unused on Windows)
+#define EXIT_STATUS_SERVICE 4
+
+// POSIX iovec
+struct iovec
+{
+ void* iov_base; // Starting address
+ size_t iov_len; // Number of bytes to transfer
+};
+
+// Windows WSABUF with POSIX field names
+struct WindowsIOVec
+{
+ // POSIX iovec has iov_base then iov_len, WSABUF in Windows has the fields in reverse order
+ u_long iov_len; // Number of bytes to transfer
+ char FAR* iov_base; // Starting address
+};
+inline ssize_t writev(int fd, const WindowsIOVec* iov, int count)
+{
+ DWORD sent;
+ int ret = WSASend(fd, reinterpret_cast<LPWSABUF>(const_cast<WindowsIOVec*>(iov)), count, &sent, 0, NULL, NULL);
+ if (ret == 0)
+ return sent;
+ return -1;
+}
+
+// This wrapper is just so we don't need to do #ifdef _WIN32 everywhere in the socket code. It is
+// not actually used and does not need to be the same size as sockaddr_un on UNIX systems.
+struct sockaddr_un
+{
+ ADDRESS_FAMILY sun_family;
+ char sun_path[6];
+};