summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorChrisTX <chris@rev-crew.info>2012-10-12 22:31:38 +0200
committerChrisTX <chris@rev-crew.info>2012-10-12 22:31:38 +0200
commit5b9682275e384635a1fd9f7320cf4d9a604a43b4 (patch)
tree8cd47480717046cbf0fa9beeb3ef0fe65e193ec5 /include
parent152bf4946c3cdee3e8b66cb2babbf3182840d054 (diff)
Windows: In-depth cleanup (see details)
-Fix x64 builds for Windows. Now all configurations compile. -Remove the non-working rebase stuff. -Remove the Windows fork hack and instead use FreeConsole() to emulate the behavior. This directly allows us to compile with ASLR, which is turned on now. -Remove the old IPC mechanism for the removed GUI. This is not needed anymore as the GUI wasn't ever supported on anything newer than 1.2 -Remove the WIN32/WINDOWS macros. _WIN32 is supported on all x86-based VC++ targets, so that's what we need. -Enable optimizations for release builds. -De-duplicate printf_c(), it was previously copy-pasted into colors.h for configure -Add the VC++ specific bad files in .gitignore -Disable PID writing on Windows. This is only making sense for *nix builds. -Replace the CPU usage retrieval with an algorithm analogous to the *nix behavior. Also supports separated now/total values. (Tested with a dummy busy loop - seems working) -Removed certain unused functions and variables -Remove stdint defines from the windows wrapper -Remove CRT debug alloc. This is a bad idea as it would define a macro to replace free which breaks builds. -Re-evaluated the warnings list, commented it. -Moved inspircd_config/_version to include/ to match *nix -Removed the creation of inspircd_se_config, as it isn't used at all. -Made non-git builds show as "r0" instead of "r" (thanks to @SaberUK for pointing this out) -Fixed up m_spanningtree's project paths. Now all configurations (debug/release x86/x64) have been tested and build properly. -Moved FindDNS out of the wrapper and matched its log behavior with *nix. (It's pointless having it in the wrapper after the recent slimming down) -Replaced random/srandom wrappers with a mechanism that tries to use Windows' Random API first is no SSL module is loaded. -Removed more old junk from support for compilers older than VC++ 2010 (we don't have project files for these, so compiling them would be hard anyways) -Removed the unused ClearConsole() -Removed unused includes from the wrapper. Also, do not include psapi.h here if we don't link psapi.lib. This should be done where appropriate. -Made inet_aton an inline function for increased performance -C4800, performance warning about bool forcing, resolved at all occurrences. -C4701, uninitialized variable 'cached', resolved at all occurrences. -dlerror() was migrated out of the wrapper for more thread safety (no global buffer being shared) and increased performance. -Removed the wrong CRT debug flags. This drains a lot of performance. -Removed the clock_gettime/gettimeofday wrappers -Replaced all TCHAR/ANSI mix-ups of functions with the correct respective function. -Added a block of C4355 for < VS2012 -Update project files for c870714
Diffstat (limited to 'include')
-rw-r--r--include/bancache.h4
-rw-r--r--include/base.h4
-rw-r--r--include/configparser.h2
-rw-r--r--include/dns.h4
-rw-r--r--include/dynamic.h6
-rw-r--r--include/hash_map.h18
-rw-r--r--include/hashcomp.h2
-rw-r--r--include/inspircd.h20
-rw-r--r--include/modules.h2
-rw-r--r--include/socket.h2
-rw-r--r--include/threadengine.h4
-rw-r--r--include/threadengines/threadengine_win32.h5
-rw-r--r--include/typedefs.h15
-rw-r--r--include/users.h2
14 files changed, 40 insertions, 50 deletions
diff --git a/include/bancache.h b/include/bancache.h
index d2ec5284a..a7aac7f17 100644
--- a/include/bancache.h
+++ b/include/bancache.h
@@ -65,11 +65,7 @@ class CoreExport BanCacheHit
/* A container of ban cache items.
* must be defined after class BanCacheHit.
*/
-#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED)
-typedef nspace::hash_map<std::string, BanCacheHit*, nspace::hash_compare<std::string, std::less<std::string> > > BanCacheHash;
-#else
typedef nspace::hash_map<std::string, BanCacheHit*, nspace::hash<std::string> > BanCacheHash;
-#endif
/** A manager for ban cache, which allocates and deallocates and checks cached bans.
*/
diff --git a/include/base.h b/include/base.h
index 230ed1db4..3e868ff22 100644
--- a/include/base.h
+++ b/include/base.h
@@ -157,7 +157,7 @@ class CoreExport reference
return *this;
}
- inline operator bool() const { return value; }
+ inline operator bool() const { return (value != NULL); }
inline operator T*() const { return value; }
inline T* operator->() const { return value; }
inline T& operator*() const { return *value; }
@@ -165,7 +165,7 @@ class CoreExport reference
inline bool operator>(const reference<T>& other) const { return value > other.value; }
static inline void* operator new(size_t, void* m) { return m; }
private:
-#ifndef WIN32
+#ifndef _WIN32
static void* operator new(size_t);
static void operator delete(void*);
#endif
diff --git a/include/configparser.h b/include/configparser.h
index 4b83d26d7..f44b7c8a5 100644
--- a/include/configparser.h
+++ b/include/configparser.h
@@ -63,7 +63,7 @@ struct FileWrapper
FILE* const f;
bool close_with_pclose;
FileWrapper(FILE* file, bool use_pclose = false) : f(file), close_with_pclose(use_pclose) {}
- operator bool() { return f; }
+ operator bool() { return (f != NULL); }
operator FILE*() { return f; }
~FileWrapper()
{
diff --git a/include/dns.h b/include/dns.h
index 828497103..b88f3a247 100644
--- a/include/dns.h
+++ b/include/dns.h
@@ -102,11 +102,7 @@ class CoreExport CachedQuery
/** DNS cache information. Holds IPs mapped to hostnames, and hostnames mapped to IPs.
*/
-#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED)
-typedef nspace::hash_map<irc::string, CachedQuery, nspace::hash_compare<irc::string> > dnscache;
-#else
typedef nspace::hash_map<irc::string, CachedQuery, irc::hash> dnscache;
-#endif
/**
* Error types that class Resolver can emit to its error method.
diff --git a/include/dynamic.h b/include/dynamic.h
index 3be919929..5e66ddbb0 100644
--- a/include/dynamic.h
+++ b/include/dynamic.h
@@ -33,6 +33,12 @@ class CoreExport DLLManager : public classbase
*/
std::string err;
+#ifdef _WIN32
+ /** Sets the last error string
+ */
+ void RetrieveLastError();
+#endif
+
public:
/** This constructor loads the module using dlopen()
* @param fname The filename to load. This should be within
diff --git a/include/hash_map.h b/include/hash_map.h
index 313b216a7..6be2da6ca 100644
--- a/include/hash_map.h
+++ b/include/hash_map.h
@@ -28,7 +28,7 @@
/** Where hash_map is varies from compiler to compiler
* as it is not standard unless we have tr1.
*/
- #ifndef WIN32
+ #ifndef _WIN32
#ifdef HASHMAP_DEPRECATED
// GCC4+ has deprecated hash_map and uses tr1. But of course, uses a different include to MSVC. FOR FUCKS SAKE.
#include <tr1/unordered_map>
@@ -41,19 +41,9 @@
#define END_HASHMAP_NAMESPACE }
#endif
#else
- #if _MSC_VER >= 1600
- // New MSVC has tr1. Just to make things fucked up, though, MSVC and GCC use different includes! FFS.
- #include <unordered_map>
- #define HAS_TR1_UNORDERED
- #define HASHMAP_DEPRECATED
- #else
- /** Oddball windows namespace for hash_map */
- #include <hash_map>
- #define nspace stdext
- using stdext::hash_map;
- #define BEGIN_HASHMAP_NAMESPACE namespace nspace {
- #define END_HASHMAP_NAMESPACE }
- #endif
+ #include <unordered_map>
+ #define HAS_TR1_UNORDERED
+ #define HASHMAP_DEPRECATED
#endif
// tr1: restoring sanity to our headers. now if only compiler vendors could agree on a FUCKING INCLUDE FILE.
diff --git a/include/hashcomp.h b/include/hashcomp.h
index 59986e66f..78d7ee878 100644
--- a/include/hashcomp.h
+++ b/include/hashcomp.h
@@ -598,7 +598,7 @@ BEGIN_HASHMAP_NAMESPACE
/** Hashing function to hash irc::string
*/
-#if defined(WINDOWS) && !defined(HAS_TR1_UNORDERED)
+#if defined(_WIN32) && !defined(HAS_TR1_UNORDERED)
template<> class CoreExport hash_compare<irc::string, std::less<irc::string> >
{
public:
diff --git a/include/inspircd.h b/include/inspircd.h
index c06a28043..cc627ca57 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -31,7 +31,7 @@
#define _LARGEFILE_SOURCE
#endif
-#ifndef WIN32
+#ifndef _WIN32
#define DllExport
#define CoreExport
#define printf_c printf
@@ -55,7 +55,7 @@
#include <cstring>
#include <climits>
#include <cstdio>
-#ifndef WIN32
+#ifndef _WIN32
#include <unistd.h>
#endif
@@ -232,12 +232,24 @@ class serverstats
/** Total bytes of data received
*/
unsigned long statsRecv;
+#ifdef _WIN32
+ /** Cpu usage at last sample
+ */
+ FILETIME LastCPU;
+ /** Time QP sample was read
+ */
+ LARGE_INTEGER LastSampled;
+ /** QP frequency
+ */
+ LARGE_INTEGER QPFrequency;
+#else
/** Cpu usage at last sample
*/
timeval LastCPU;
/** Time last sample was read
*/
timespec LastSampled;
+#endif
/** The constructor initializes all the counts to zero
*/
serverstats()
@@ -308,10 +320,6 @@ class CoreExport InspIRCd
*/
char ReadBuffer[65535];
-#ifdef WIN32
- IPC* WindowsIPC;
-#endif
-
public:
/** Global cull list, will be processed on next iteration
diff --git a/include/modules.h b/include/modules.h
index 281da2705..9c2ca1b27 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -1696,7 +1696,7 @@ struct AllModuleList {
* and functions needed to make a module loadable by the OS.
* It defines the class factory and external init_module function.
*/
-#ifdef WINDOWS
+#ifdef _WIN32
#define MODULE_INIT(y) \
extern "C" DllExport Module * MODULE_INIT_SYM() \
diff --git a/include/socket.h b/include/socket.h
index e868af93e..5f6705124 100644
--- a/include/socket.h
+++ b/include/socket.h
@@ -25,7 +25,7 @@
#ifndef INSPIRCD_SOCKET_H
#define INSPIRCD_SOCKET_H
-#ifndef WIN32
+#ifndef _WIN32
#include <arpa/inet.h>
#include <sys/time.h>
diff --git a/include/threadengine.h b/include/threadengine.h
index f01abfbbe..4bf5a48f3 100644
--- a/include/threadengine.h
+++ b/include/threadengine.h
@@ -27,10 +27,6 @@
#include "inspircd_config.h"
#include "base.h"
-#ifdef WINDOWS
-#include "threadengines/threadengine_win32.h"
-#endif
-
class ThreadData;
/** Derive from this class to implement your own threaded sections of
diff --git a/include/threadengines/threadengine_win32.h b/include/threadengines/threadengine_win32.h
index 9ca180cef..f068ac707 100644
--- a/include/threadengines/threadengine_win32.h
+++ b/include/threadengines/threadengine_win32.h
@@ -108,12 +108,15 @@ class ThreadQueueData
public:
ThreadQueueData()
{
- InitializeCriticalSection(&mutex);
event = CreateEvent(NULL, false, false, NULL);
+ if (event == NULL)
+ throw CoreException("CreateEvent() failed in ThreadQueueData::ThreadQueueData()!");
+ InitializeCriticalSection(&mutex);
}
~ThreadQueueData()
{
+ CloseHandle(event);
DeleteCriticalSection(&mutex);
}
diff --git a/include/typedefs.h b/include/typedefs.h
index 7659628d2..da2775152 100644
--- a/include/typedefs.h
+++ b/include/typedefs.h
@@ -56,17 +56,12 @@ struct ResourceRecord;
#include "hashcomp.h"
#include "base.h"
-#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED)
- typedef nspace::hash_map<std::string, User*, nspace::hash_compare<std::string, std::less<std::string> > > user_hash;
- typedef nspace::hash_map<std::string, Channel*, nspace::hash_compare<std::string, std::less<std::string> > > chan_hash;
+#ifdef HASHMAP_DEPRECATED
+ typedef nspace::hash_map<std::string, User*, nspace::insensitive, irc::StrHashComp> user_hash;
+ typedef nspace::hash_map<std::string, Channel*, nspace::insensitive, irc::StrHashComp> chan_hash;
#else
- #ifdef HASHMAP_DEPRECATED
- typedef nspace::hash_map<std::string, User*, nspace::insensitive, irc::StrHashComp> user_hash;
- typedef nspace::hash_map<std::string, Channel*, nspace::insensitive, irc::StrHashComp> chan_hash;
- #else
- typedef nspace::hash_map<std::string, User*, nspace::hash<std::string>, irc::StrHashComp> user_hash;
- typedef nspace::hash_map<std::string, Channel*, nspace::hash<std::string>, irc::StrHashComp> chan_hash;
- #endif
+ typedef nspace::hash_map<std::string, User*, nspace::hash<std::string>, irc::StrHashComp> user_hash;
+ typedef nspace::hash_map<std::string, Channel*, nspace::hash<std::string>, irc::StrHashComp> chan_hash;
#endif
/** A list of failed port bindings, used for informational purposes on startup */
diff --git a/include/users.h b/include/users.h
index 2834efaae..9b1339611 100644
--- a/include/users.h
+++ b/include/users.h
@@ -60,7 +60,7 @@ enum UserModes {
*/
enum RegistrationState {
-#ifndef WIN32 // Burlex: This is already defined in win32, luckily it is still 0.
+#ifndef _WIN32 // Burlex: This is already defined in win32, luckily it is still 0.
REG_NONE = 0, /* Has sent nothing */
#endif