diff --git a/src/SDL_internal.h b/src/SDL_internal.h index 7d3f9cd9e5..69da271c62 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 a4c4d50501..6f2e550905 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 2fe12163e3..ecfbe6f4e4 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 ae8f306659..3125e83905 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 0000000000..ab60046951 --- /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: */