From 8cd908e0b987d3de26052bb16d9065541a30d23d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 6 May 2022 10:51:55 -0700 Subject: [PATCH] Fixed building with Visual Studio 2013 Added SDL_vacopy.h since it needs to be included after Windows headers --- src/SDL_internal.h | 12 ------------ src/SDL_log.c | 3 +++ src/core/linux/SDL_dbus.c | 1 + src/stdlib/SDL_string.c | 1 + src/stdlib/SDL_vacopy.h | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 src/stdlib/SDL_vacopy.h diff --git a/src/SDL_internal.h b/src/SDL_internal.h index 7d3f9cd9e..69da271c6 100644 --- a/src/SDL_internal.h +++ b/src/SDL_internal.h @@ -26,18 +26,6 @@ #define _GNU_SOURCE #endif -/* Do our best to make sure va_copy is working */ -#if defined(__NGAGE__) -#undef va_copy -#define va_copy(dst, src) dst = src -#elif defined(_MSC_VER) && _MSC_VER <= 1800 -/* Visual Studio 2013 tries to link with _vacopy in the C runtime. Newer versions do an inline assignment */ -#undef va_copy -#define va_copy(dst, src) dst = src -#elif defined(__GNUC__) && (__GNUC__ < 3) -#define va_copy(dst, src) __va_copy(dst, src) -#endif - /* This is for a variable-length array at the end of a struct: struct x { int y; char z[SDL_VARIABLE_LENGTH_ARRAY]; }; Use this because GCC 2 needs different magic than other compilers. */ diff --git a/src/SDL_log.c b/src/SDL_log.c index a4c4d5050..6f2e55090 100644 --- a/src/SDL_log.c +++ b/src/SDL_log.c @@ -39,6 +39,9 @@ #include #endif +#include "stdlib/SDL_vacopy.h" + + /* The size of the stack buffer to use for rendering log messages. */ #define SDL_MAX_LOG_MESSAGE_STACK 256 diff --git a/src/core/linux/SDL_dbus.c b/src/core/linux/SDL_dbus.c index 2fe12163e..ecfbe6f4e 100644 --- a/src/core/linux/SDL_dbus.c +++ b/src/core/linux/SDL_dbus.c @@ -22,6 +22,7 @@ #include "SDL_hints.h" #include "SDL_dbus.h" #include "SDL_atomic.h" +#include "../../stdlib/SDL_vacopy.h" #if SDL_USE_LIBDBUS /* we never link directly to libdbus. */ diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c index ae8f30665..3125e8390 100644 --- a/src/stdlib/SDL_string.c +++ b/src/stdlib/SDL_string.c @@ -27,6 +27,7 @@ /* This file contains portable string manipulation functions for SDL */ #include "SDL_stdinc.h" +#include "SDL_vacopy.h" #if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOL) || !defined(HAVE_STRTOUL) || !defined(HAVE_STRTOD) || !defined(HAVE_STRTOLL) || !defined(HAVE_STRTOULL) #define SDL_isupperhex(X) (((X) >= 'A') && ((X) <= 'F')) diff --git a/src/stdlib/SDL_vacopy.h b/src/stdlib/SDL_vacopy.h new file mode 100644 index 000000000..ab6004695 --- /dev/null +++ b/src/stdlib/SDL_vacopy.h @@ -0,0 +1,36 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* Do our best to make sure va_copy is working */ +#if defined(__NGAGE__) +#undef va_copy +#define va_copy(dst, src) dst = src + +#elif defined(_MSC_VER) && _MSC_VER <= 1800 +/* Visual Studio 2013 tries to link with _vacopy in the C runtime. Newer versions do an inline assignment */ +#undef va_copy +#define va_copy(dst, src) dst = src + +#elif defined(__GNUC__) && (__GNUC__ < 3) +#define va_copy(dst, src) __va_copy(dst, src) +#endif + +/* vi: set ts=4 sw=4 expandtab: */