diff options
author | ChrisTX <chris@rev-crew.info> | 2012-10-12 22:31:38 +0200 |
---|---|---|
committer | ChrisTX <chris@rev-crew.info> | 2012-10-12 22:31:38 +0200 |
commit | 5b9682275e384635a1fd9f7320cf4d9a604a43b4 (patch) | |
tree | 8cd47480717046cbf0fa9beeb3ef0fe65e193ec5 /include | |
parent | 152bf4946c3cdee3e8b66cb2babbf3182840d054 (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.h | 4 | ||||
-rw-r--r-- | include/base.h | 4 | ||||
-rw-r--r-- | include/configparser.h | 2 | ||||
-rw-r--r-- | include/dns.h | 4 | ||||
-rw-r--r-- | include/dynamic.h | 6 | ||||
-rw-r--r-- | include/hash_map.h | 18 | ||||
-rw-r--r-- | include/hashcomp.h | 2 | ||||
-rw-r--r-- | include/inspircd.h | 20 | ||||
-rw-r--r-- | include/modules.h | 2 | ||||
-rw-r--r-- | include/socket.h | 2 | ||||
-rw-r--r-- | include/threadengine.h | 4 | ||||
-rw-r--r-- | include/threadengines/threadengine_win32.h | 5 | ||||
-rw-r--r-- | include/typedefs.h | 15 | ||||
-rw-r--r-- | include/users.h | 2 |
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 |