summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/inspsocket.cpp2
-rw-r--r--win/inspircd_win32wrapper.cpp34
-rw-r--r--win/inspircd_win32wrapper.h11
3 files changed, 42 insertions, 5 deletions
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp
index 73f469a05..c63748eab 100644
--- a/src/inspsocket.cpp
+++ b/src/inspsocket.cpp
@@ -15,7 +15,9 @@
#include "socket.h"
#include "inspstring.h"
#include "socketengine.h"
+#ifndef WINDOWS
#include <sys/uio.h>
+#endif
BufferedSocket::BufferedSocket()
{
diff --git a/win/inspircd_win32wrapper.cpp b/win/inspircd_win32wrapper.cpp
index 223fb648e..eb73378f2 100644
--- a/win/inspircd_win32wrapper.cpp
+++ b/win/inspircd_win32wrapper.cpp
@@ -147,6 +147,30 @@ const char * dlerror()
return errormessage;
}
+ssize_t writev(int fd, const struct iovec* iov, int iovcnt)
+{
+ ssize_t ret;
+ size_t tot = 0;
+ int i;
+ char *buf, *p;
+
+ for(i = 0; i < iovcnt; ++i)
+ tot += iov[i].iov_len;
+ buf = (char*)malloc(tot);
+ if (tot != 0 && buf == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+ p = buf;
+ for (i = 0; i < iovcnt; ++i) {
+ memcpy (p, iov[i].iov_base, iov[i].iov_len);
+ p += iov[i].iov_len;
+ }
+ ret = send((SOCKET)fd, buf, tot, 0);
+ free (buf);
+ return ret;
+}
+
#define TRED FOREGROUND_RED | FOREGROUND_INTENSITY
#define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
@@ -415,7 +439,7 @@ void ClearConsole()
*/
void ChangeWindowsSpecificPointers()
{
- Instance->Logs->Log("win32",DEBUG,"Changing to windows specific pointer and functor set");
+ ServerInstance->Logs->Log("win32",DEBUG,"Changing to windows specific pointer and functor set");
}
DWORD WindowsForkStart()
@@ -504,14 +528,14 @@ void WindowsForkKillOwner()
if(!hProcess || !owner_processid)
{
printf("Could not open process id %u: %s.\n", owner_processid, dlerror());
- Instance->Exit(14);
+ ServerInstance->Exit(14);
}
// die die die
if(!TerminateProcess(hProcess, 0))
{
printf("Could not TerminateProcess(): %s\n", dlerror());
- Instance->Exit(14);
+ ServerInstance->Exit(14);
}
CloseHandle(hProcess);
@@ -522,7 +546,7 @@ bool ValidateDnsServer(ServerConfig* conf, const char* tag, const char* value, V
if (!*(data.GetString()))
{
std::string nameserver;
- conf->GetInstance()->Logs->Log("win32",DEFAULT,"WARNING: <dns:server> not defined, attempting to find working server in the registry...");
+ ServerInstance->Logs->Log("win32",DEFAULT,"WARNING: <dns:server> not defined, attempting to find working server in the registry...");
nameserver = FindNameServerWin();
/* Windows stacks multiple nameservers in one registry key, seperated by commas.
* Spotted by Cataclysm.
@@ -535,7 +559,7 @@ bool ValidateDnsServer(ServerConfig* conf, const char* tag, const char* value, V
if (nameserver.find(' ') != std::string::npos)
nameserver = nameserver.substr(0, nameserver.find(' '));
data.Set(nameserver.c_str());
- conf->GetInstance()->Logs->Log("win32",DEFAULT,"<dns:server> set to '%s' as first active resolver in registry.", nameserver.c_str());
+ ServerInstance->Logs->Log("win32",DEFAULT,"<dns:server> set to '%s' as first active resolver in registry.", nameserver.c_str());
}
return true;
}
diff --git a/win/inspircd_win32wrapper.h b/win/inspircd_win32wrapper.h
index a1eba11e9..6b068adea 100644
--- a/win/inspircd_win32wrapper.h
+++ b/win/inspircd_win32wrapper.h
@@ -100,6 +100,7 @@ typedef unsigned __int32 uint32_t;
#include <process.h>
#include <stdio.h>
#include <algorithm>
+#include <io.h>
#ifdef ENABLE_CRASHDUMPS
#include <DbgHelp.h>
@@ -214,6 +215,7 @@ typedef unsigned long long uint64_t;
typedef signed char int8_t;
typedef signed long int32_t;
typedef signed long long int64_t;
+typedef signed long ssize_t;
/* Shared memory allocation functions */
void * ::operator new(size_t iSize);
@@ -226,6 +228,15 @@ class ServerConfig;
/* Look up the nameserver in use from the registry on windows */
CoreExport std::string FindNameServerWin();
+/* no uio.h on win, but win has alternatives in io.h rest is wrapped here */
+#define IOV_MAX 1024
+struct iovec
+{
+ size_t iov_len;
+ void* iov_base;
+};
+CoreExport ssize_t writev(int fd, const struct iovec* iov, int iovcnt);
+
/* Clear a windows console */
CoreExport void ClearConsole();