From 5a79a446dfc3632de3e27567afd65d9782510739 Mon Sep 17 00:00:00 2001
From: Alam Ed Arias <alam@srb2.org>
Date: Thu, 8 Aug 2019 21:25:46 -0400
Subject: [PATCH] Tested to be compile with Mingw64 9.1.0

---
 appveyor.yml         |  2 +-
 src/Makefile.cfg     |  3 +++
 src/i_addrinfo.c     | 12 ++++++------
 src/m_misc.c         |  2 +-
 src/sdl/i_system.c   | 16 ++++++++--------
 src/win32/fabdxlib.c |  2 +-
 src/win32/win_sys.c  | 12 ++++++------
 7 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/appveyor.yml b/appveyor.yml
index 98da61dbf..75442145a 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -92,7 +92,7 @@ before_build:
 - ccache -V
 - ccache -s
 - if [%NOUPX%] == [1] ( set "NOUPX=NOUPX=1" ) else ( set "NOUPX=" )
-- set "SRB2_MFLAGS=-C src WARNINGMODE=1 CCACHE=1 GCC72=1 NOOBJDUMP=1 %NOUPX%"
+- set "SRB2_MFLAGS=-C src WARNINGMODE=1 CCACHE=1 GCC91=1 NOOBJDUMP=1 %NOUPX%"
 - if [%X86_64%] == [1] ( set "MINGW_FLAGS=MINGW64=1 X86_64=1" ) else ( set "MINGW_FLAGS=MINGW=1" )
 - set "SRB2_MFLAGS=%SRB2_MFLAGS% %MINGW_FLAGS% %CONFIGURATION%=1"
 
diff --git a/src/Makefile.cfg b/src/Makefile.cfg
index 5fdc53298..738b05330 100644
--- a/src/Makefile.cfg
+++ b/src/Makefile.cfg
@@ -194,6 +194,9 @@ ifndef GCC295
 endif
 endif
 WFLAGS+=-Wformat-y2k
+ifdef GCC71
+WFLAGS+=-Wno-error=format-overflow=2
+endif
 WFLAGS+=-Wformat-security
 ifndef GCC29
 #WFLAGS+=-Winit-self
diff --git a/src/i_addrinfo.c b/src/i_addrinfo.c
index 03edf732d..42d4b8924 100644
--- a/src/i_addrinfo.c
+++ b/src/i_addrinfo.c
@@ -74,10 +74,10 @@ static int inet_aton(const char *cp, struct in_addr *addr)
 
 #ifdef USE_WINSOCK2
 static HMODULE ipv6dll = NULL;
-typedef int (WSAAPI *p_getaddrinfo) (const char *node, const char *service,
-                              const struct my_addrinfo *hints,
-                              struct my_addrinfo **res);
-typedef void (WSAAPI *p_freeaddrinfo) (struct my_addrinfo *res);
+typedef int (WSAAPI *p_getaddrinfo) (const char *, const char *,
+                                     const struct my_addrinfo *,
+                                     struct my_addrinfo **);
+typedef void (WSAAPI *p_freeaddrinfo) (struct my_addrinfo *);
 
 static p_getaddrinfo WS_getaddrinfo = NULL;
 static p_freeaddrinfo WS_freeaddrinfo = NULL;
@@ -86,10 +86,10 @@ static HMODULE WS_getfunctions(HMODULE tmp)
 {
 	if (tmp != NULL)
 	{
-		WS_getaddrinfo = (p_getaddrinfo)GetProcAddress(tmp, "getaddrinfo");
+		WS_getaddrinfo = (p_getaddrinfo)(LPVOID)GetProcAddress(tmp, "getaddrinfo");
 		if (WS_getaddrinfo == NULL)
 			return NULL;
-		WS_freeaddrinfo = (p_freeaddrinfo)GetProcAddress(tmp, "freeaddrinfo");
+		WS_freeaddrinfo = (p_freeaddrinfo)(LPVOID)GetProcAddress(tmp, "freeaddrinfo");
 		if (WS_freeaddrinfo == NULL)
 		{
 			WS_getaddrinfo = NULL;
diff --git a/src/m_misc.c b/src/m_misc.c
index 0445136fe..c5e4fa21c 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -58,7 +58,7 @@ typedef off_t off64_t;
 #endif
 #endif
 
-#if defined(__MINGW32__) && ((__GNUC__ > 7) || (__GNUC__ == 6 && __GNUC_MINOR__ >= 3))
+#if defined(__MINGW32__) && ((__GNUC__ > 7) || (__GNUC__ == 6 && __GNUC_MINOR__ >= 3)) && (__GNUC__ < 8)
 #define PRIdS "u"
 #elif defined (_WIN32)
 #define PRIdS "Iu"
diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c
index 517c183ee..a18443c52 100644
--- a/src/sdl/i_system.c
+++ b/src/sdl/i_system.c
@@ -1480,7 +1480,7 @@ const char *I_GetJoyName(INT32 joyindex)
 		{
 			tempname = SDL_JoystickNameForIndex(joyindex);
 			if (tempname)
-				strncpy(joyname, tempname, 255);
+				strncpy(joyname, tempname, 254);
 		}
 		SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
 	}
@@ -1488,7 +1488,7 @@ const char *I_GetJoyName(INT32 joyindex)
 	{
 		tempname = SDL_JoystickNameForIndex(joyindex);
 		if (tempname)
-			strncpy(joyname, tempname, 255);
+			strncpy(joyname, tempname, 254);
 	}
 	return joyname;
 }
@@ -2043,7 +2043,7 @@ static void I_ShutdownTimer(void)
 	pfntimeGetTime = NULL;
 	if (winmm)
 	{
-		p_timeEndPeriod pfntimeEndPeriod = (p_timeEndPeriod)GetProcAddress(winmm, "timeEndPeriod");
+		p_timeEndPeriod pfntimeEndPeriod = (p_timeEndPeriod)(LPVOID)GetProcAddress(winmm, "timeEndPeriod");
 		if (pfntimeEndPeriod)
 			pfntimeEndPeriod(1);
 		FreeLibrary(winmm);
@@ -2088,10 +2088,10 @@ void I_StartupTimer(void)
 	winmm = LoadLibraryA("winmm.dll");
 	if (winmm)
 	{
-		p_timeEndPeriod pfntimeBeginPeriod = (p_timeEndPeriod)GetProcAddress(winmm, "timeBeginPeriod");
+		p_timeEndPeriod pfntimeBeginPeriod = (p_timeEndPeriod)(LPVOID)GetProcAddress(winmm, "timeBeginPeriod");
 		if (pfntimeBeginPeriod)
 			pfntimeBeginPeriod(1);
-		pfntimeGetTime = (p_timeGetTime)GetProcAddress(winmm, "timeGetTime");
+		pfntimeGetTime = (p_timeGetTime)(LPVOID)GetProcAddress(winmm, "timeGetTime");
 	}
 	I_AddExitFunc(I_ShutdownTimer);
 #endif
@@ -2390,7 +2390,7 @@ void I_GetDiskFreeSpace(INT64 *freespace)
 
 	if (!testwin95)
 	{
-		pfnGetDiskFreeSpaceEx = (p_GetDiskFreeSpaceExA)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA");
+		pfnGetDiskFreeSpaceEx = (p_GetDiskFreeSpaceExA)(LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA");
 		testwin95 = true;
 	}
 	if (pfnGetDiskFreeSpaceEx)
@@ -2414,7 +2414,7 @@ void I_GetDiskFreeSpace(INT64 *freespace)
 
 char *I_GetUserName(void)
 {
-	static char username[MAXPLAYERNAME];
+	static char username[MAXPLAYERNAME+1];
 	char *p;
 #ifdef _WIN32
 	DWORD i = MAXPLAYERNAME;
@@ -2910,7 +2910,7 @@ const CPUInfoFlags *I_CPUInfo(void)
 #if defined (_WIN32)
 	static CPUInfoFlags WIN_CPUInfo;
 	SYSTEM_INFO SI;
-	p_IsProcessorFeaturePresent pfnCPUID = (p_IsProcessorFeaturePresent)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsProcessorFeaturePresent");
+	p_IsProcessorFeaturePresent pfnCPUID = (p_IsProcessorFeaturePresent)(LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsProcessorFeaturePresent");
 
 	ZeroMemory(&WIN_CPUInfo,sizeof (WIN_CPUInfo));
 	if (pfnCPUID)
diff --git a/src/win32/fabdxlib.c b/src/win32/fabdxlib.c
index c19b036a0..45ec5d0d3 100644
--- a/src/win32/fabdxlib.c
+++ b/src/win32/fabdxlib.c
@@ -147,7 +147,7 @@ static inline BOOL LoadDirectDraw(VOID)
 	DDrawDLL = LoadLibraryA("DDRAW.DLL");
 	if (DDrawDLL == NULL)
 		return false;
-	pfnDirectDrawCreate = (DDCreate)GetProcAddress(DDrawDLL, "DirectDrawCreate");
+	pfnDirectDrawCreate = (DDCreate)(LPVOID)GetProcAddress(DDrawDLL, "DirectDrawCreate");
 	if (pfnDirectDrawCreate == NULL)
 		return false;
 	return true;
diff --git a/src/win32/win_sys.c b/src/win32/win_sys.c
index 8b7adf7c6..d10f73b58 100644
--- a/src/win32/win_sys.c
+++ b/src/win32/win_sys.c
@@ -3395,7 +3395,7 @@ BOOL LoadDirectInput(VOID)
 	DInputDLL = LoadLibraryA("DINPUT.DLL");
 	if (DInputDLL == NULL)
 		return false;
-	pfnDirectInputCreateA = (DICreateA)GetProcAddress(DInputDLL, "DirectInputCreateA");
+	pfnDirectInputCreateA = (DICreateA)(LPVOID)GetProcAddress(DInputDLL, "DirectInputCreateA");
 	if (pfnDirectInputCreateA == NULL)
 		return false;
 	return true;
@@ -3529,7 +3529,7 @@ void I_GetDiskFreeSpace(INT64* freespace)
 
 	if (!testwin95)
 	{
-		pfnGetDiskFreeSpaceEx = (p_GetDiskFreeSpaceExA)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA");
+		pfnGetDiskFreeSpaceEx = (p_GetDiskFreeSpaceExA)(LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA");
 		testwin95 = true;
 	}
 	if (pfnGetDiskFreeSpaceEx)
@@ -3615,7 +3615,7 @@ const CPUInfoFlags *I_CPUInfo(void)
 {
 	static CPUInfoFlags WIN_CPUInfo;
 	SYSTEM_INFO SI;
-	p_IsProcessorFeaturePresent pfnCPUID = (p_IsProcessorFeaturePresent)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsProcessorFeaturePresent");
+	p_IsProcessorFeaturePresent pfnCPUID = (p_IsProcessorFeaturePresent)(LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsProcessorFeaturePresent");
 
 	ZeroMemory(&WIN_CPUInfo,sizeof (WIN_CPUInfo));
 	if (pfnCPUID)
@@ -3658,9 +3658,9 @@ static p_SetProcessAffinityMask pfnSetProcessAffinityMask = NULL;
 static inline VOID GetAffinityFuncs(VOID)
 {
 	HMODULE h = GetModuleHandleA("kernel32.dll");
-	pfnGetCurrentProcess = (p_GetCurrentProcess)GetProcAddress(h, "GetCurrentProcess");
-	pfnGetProcessAffinityMask = (p_GetProcessAffinityMask)GetProcAddress(h, "GetProcessAffinityMask");
-	pfnSetProcessAffinityMask = (p_SetProcessAffinityMask)GetProcAddress(h, "SetProcessAffinityMask");
+	pfnGetCurrentProcess = (p_GetCurrentProcess)(LPVOID)GetProcAddress(h, "GetCurrentProcess");
+	pfnGetProcessAffinityMask = (p_GetProcessAffinityMask)(LPVOID)GetProcAddress(h, "GetProcessAffinityMask");
+	pfnSetProcessAffinityMask = (p_SetProcessAffinityMask)(LPVOID)GetProcAddress(h, "SetProcessAffinityMask");
 }
 
 static void CPUAffinity_OnChange(void)
-- 
GitLab