From b93903db23289eb38126325801c4e3f9192ff123 Mon Sep 17 00:00:00 2001 From: Mattes D Date: Sat, 24 Jan 2015 13:32:13 +0100 Subject: Fixed RCONClient compilation. --- Tools/RCONClient/Globals.h | 42 +++++++++++++++++++++++++++++++++++++++-- Tools/RCONClient/RCONClient.cpp | 19 ++++++++++--------- Tools/RCONClient/RCONClient.sln | 8 +++++--- 3 files changed, 55 insertions(+), 14 deletions(-) diff --git a/Tools/RCONClient/Globals.h b/Tools/RCONClient/Globals.h index a3a2f2846..dc7669270 100644 --- a/Tools/RCONClient/Globals.h +++ b/Tools/RCONClient/Globals.h @@ -22,6 +22,18 @@ #define ALIGN_8 #define ALIGN_16 + #define FORMATSTRING(formatIndex, va_argsIndex) + + // MSVC has its own custom version of zu format + #define SIZE_T_FMT "%Iu" + #define SIZE_T_FMT_PRECISION(x) "%" #x "Iu" + #define SIZE_T_FMT_HEX "%Ix" + + #define NORETURN __declspec(noreturn) + + // Use non-standard defines in + #define _USE_MATH_DEFINES + #elif defined(__GNUC__) // TODO: Can GCC explicitly mark classes as abstract (no instances can be created)? @@ -38,6 +50,29 @@ // Some portability macros :) #define stricmp strcasecmp + #define FORMATSTRING(formatIndex, va_argsIndex) __attribute__((format (printf, formatIndex, va_argsIndex))) + + #if defined(_WIN32) + // We're compiling on MinGW, which uses an old MSVCRT library that has no support for size_t printfing. + // We need direct size formats: + #if defined(_WIN64) + #define SIZE_T_FMT "%I64u" + #define SIZE_T_FMT_PRECISION(x) "%" #x "I64u" + #define SIZE_T_FMT_HEX "%I64x" + #else + #define SIZE_T_FMT "%u" + #define SIZE_T_FMT_PRECISION(x) "%" #x "u" + #define SIZE_T_FMT_HEX "%x" + #endif + #else + // We're compiling on Linux, so we can use libc's size_t printf format: + #define SIZE_T_FMT "%zu" + #define SIZE_T_FMT_PRECISION(x) "%" #x "zu" + #define SIZE_T_FMT_HEX "%zx" + #endif + + #define NORETURN __attribute((__noreturn__)) + #else #error "You are using an unsupported compiler, you might need to #define some stuff here for your compiler" @@ -74,6 +109,8 @@ typedef unsigned long long UInt64; typedef unsigned int UInt32; typedef unsigned short UInt16; +typedef unsigned char Byte; + @@ -94,7 +131,7 @@ typedef unsigned short UInt16; #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN - #define _WIN32_WINNT 0x501 // We want to target WinXP and higher + #define _WIN32_WINNT 0x502 // We want to target WinXP SP2 and higher #include #include @@ -175,7 +212,8 @@ typedef unsigned short UInt16; #include "StringUtils.h" #include "OSSupport/CriticalSection.h" #include "OSSupport/File.h" -#include "MCLogger.h" +#include "OSSupport/Event.h" +#include "Logger.h" diff --git a/Tools/RCONClient/RCONClient.cpp b/Tools/RCONClient/RCONClient.cpp index 288363a66..7d6cf6d8f 100644 --- a/Tools/RCONClient/RCONClient.cpp +++ b/Tools/RCONClient/RCONClient.cpp @@ -80,14 +80,14 @@ bool cRCONPacketizer::SendPacket(int a_PacketType, const AString & a_PacketPaylo size_t Length = Packet.size(); if (!m_Socket.Send((const char *)&Length, 4)) { - fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.", + fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.\n", cSocket::GetLastError(), cSocket::GetLastErrorString().c_str() ); return false; } if (!m_Socket.Send(Packet.data(), Packet.size())) { - fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.", + fprintf(stderr, "Network error while sending packet: %d (%s). Aborting.\n", cSocket::GetLastError(), cSocket::GetLastErrorString().c_str() ); return false; @@ -110,12 +110,12 @@ bool cRCONPacketizer::ReceiveResponse(void) int NumReceived = m_Socket.Receive(buf, sizeof(buf), 0); if (NumReceived == 0) { - fprintf(stderr, "The remote end closed the connection. Aborting."); + fprintf(stderr, "The remote end closed the connection. Aborting.\n"); return false; } if (NumReceived < 0) { - fprintf(stderr, "Network error while receiving response: %d, %d (%s). Aborting.", + fprintf(stderr, "Network error while receiving response: %d, %d (%s). Aborting.\n", NumReceived, cSocket::GetLastError(), cSocket::GetLastErrorString().c_str() ); return false; @@ -156,13 +156,13 @@ bool cRCONPacketizer::ParsePacket(cByteBuffer & a_Buffer, int a_PacketLength) { if ((RequestID == -1) && (m_RequestID == 0)) { - fprintf(stderr, "Login failed. Aborting."); + fprintf(stderr, "Login failed. Aborting.\n"); IsValid = false; // Continue, so that the payload is printed before the program aborts. } else { - fprintf(stderr, "The server returned an invalid request ID, got %d, exp. %d. Aborting.", RequestID, m_RequestID); + fprintf(stderr, "The server returned an invalid request ID, got %d, exp. %d. Aborting.\n", RequestID, m_RequestID); return false; } } @@ -172,7 +172,7 @@ bool cRCONPacketizer::ParsePacket(cByteBuffer & a_Buffer, int a_PacketLength) VERIFY(a_Buffer.ReadLEInt(PacketType)); if (PacketType != ptCommand) { - fprintf(stderr, "The server returned an unknown packet type: %d. Aborting.", PacketType); + fprintf(stderr, "The server returned an unknown packet type: %d. Aborting.\n", PacketType); IsValid = false; // Continue, so that the payload is printed before the program aborts. } @@ -200,8 +200,8 @@ bool cRCONPacketizer::ParsePacket(cByteBuffer & a_Buffer, int a_PacketLength) int RealMain(int argc, char * argv[]) { - new cMCLogger; // Create a new logger - + cLogger::InitiateMultithreading(); + // Parse the cmdline params for server IP, port, password and the commands to send: AString ServerAddress, Password; int ServerPort = -1; @@ -301,6 +301,7 @@ int RealMain(int argc, char * argv[]) } } + // Send each command: for (AStringVector::const_iterator itr = Commands.begin(), end = Commands.end(); itr != end; ++itr) { if (g_IsVerbose) diff --git a/Tools/RCONClient/RCONClient.sln b/Tools/RCONClient/RCONClient.sln index 0a8596e43..5c977fc81 100644 --- a/Tools/RCONClient/RCONClient.sln +++ b/Tools/RCONClient/RCONClient.sln @@ -1,7 +1,9 @@  -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RCONClient", "RCONClient.vcproj", "{1A48B032-07D0-4DDD-8362-66C0FC7F7849}" +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2013 for Windows Desktop +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RCONClient", "RCONClient.vcxproj", "{1A48B032-07D0-4DDD-8362-66C0FC7F7849}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution -- cgit v1.2.3