diff options
author | Simon McVittie <smcv@collabora.com> | 2022-07-19 20:37:19 +0100 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2022-07-19 20:50:33 +0100 |
commit | a54ed9ffadcbb2bceebdfb5797e38d49c26289eb (patch) | |
tree | 4c83b9174c2bd4cf106ef2e7e9c2f6a74b6d2e75 | |
parent | bf30fe6d6068bd00ff4b06e667f88e7ca4210cfe (diff) | |
download | dbus-a54ed9ffadcbb2bceebdfb5797e38d49c26289eb.tar.gz |
Remove emulation of va_copy() in non-C99 compilers
dbus now requires a (mostly-)C99 compiler, which guarantees the presence
of Standard C va_copy().
Signed-off-by: Simon McVittie <smcv@collabora.com>
-rw-r--r-- | cmake/ConfigureChecks.cmake | 45 | ||||
-rw-r--r-- | cmake/config.h.cmake | 6 | ||||
-rw-r--r-- | configure.ac | 53 | ||||
-rw-r--r-- | dbus/dbus-message.c | 2 | ||||
-rw-r--r-- | dbus/dbus-string.c | 4 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-unix.c | 10 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-win.c | 8 | ||||
-rw-r--r-- | meson.build | 50 |
8 files changed, 11 insertions, 167 deletions
diff --git a/cmake/ConfigureChecks.cmake b/cmake/ConfigureChecks.cmake index 17b2e201..f4680f9b 100644 --- a/cmake/ConfigureChecks.cmake +++ b/cmake/ConfigureChecks.cmake @@ -81,51 +81,6 @@ epoll_create1 (EPOLL_CLOEXEC); }" DBUS_HAVE_LINUX_EPOLL) CHECK_C_SOURCE_COMPILES(" -#include <stdarg.h> -#include <stdlib.h> -static void f (int i, ...) { - va_list args1, args2; - va_start (args1, i); - va_copy (args2, args1); - if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) - exit (1); - va_end (args1); va_end (args2); -} -int main() { - f (0, 42); - return 0; -} -" HAVE_VA_COPY) - -CHECK_C_SOURCE_COMPILES(" -#include <stdarg.h> -#include <stdlib.h> -static void f (int i, ...) { - va_list args1, args2; - va_start (args1, i); - __va_copy (args2, args1); - if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) - exit (1); - va_end (args1); va_end (args2); -} -int main() { - f (0, 42); - return 0; -} -" HAVE___VA_COPY) - -if(HAVE_VA_COPY) - set(DBUS_VA_COPY va_copy CACHE STRING "va_copy function") -elseif(HAVE___VA_COPY) - set(DBUS_VA_COPY __va_copy CACHE STRING "va_copy function") -elseif(MSVC) - # this is used for msvc < 2013 - set(DBUS_VA_COPY _DBUS_VA_COPY_ASSIGN) -else() - message(FATAL_ERROR "dbus requires an ISO C99-compatible va_copy() macro, or a similar __va_copy(), or MSVC >= 2010") -endif() - -CHECK_C_SOURCE_COMPILES(" int main() { int a = 4; int b = __sync_sub_and_fetch(&a, 4); diff --git a/cmake/config.h.cmake b/cmake/config.h.cmake index 96a74f08..2efc93f2 100644 --- a/cmake/config.h.cmake +++ b/cmake/config.h.cmake @@ -83,12 +83,6 @@ # define DBUS_ENABLE_X11_AUTOLAUNCH 1 #endif -/* A 'va_copy' style function */ -#cmakedefine DBUS_VA_COPY @DBUS_VA_COPY@ - -/* for msvc */ -#define _DBUS_VA_COPY_ASSIGN(a1,a2) { a1 = a2; } - #cmakedefine DBUS_WITH_GLIB 1 #cmakedefine GLIB_VERSION_MIN_REQUIRED @GLIB_VERSION_MIN_REQUIRED@ #cmakedefine GLIB_VERSION_MAX_ALLOWED @GLIB_VERSION_MAX_ALLOWED@ diff --git a/configure.ac b/configure.ac index c4653c69..e4b75e42 100644 --- a/configure.ac +++ b/configure.ac @@ -567,59 +567,6 @@ esac # the AC_INCLUDES_DEFAULT. AC_CHECK_DECLS([environ]) -dnl ********************************** -dnl *** va_copy checks (from GLib) *** -dnl ********************************** -dnl we currently check for all three va_copy possibilities, so we get -dnl all results in config.log for bug reports. -AC_CACHE_CHECK([for an implementation of va_copy()],dbus_cv_va_copy,[ - AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h> -#include <stdlib.h> - static void f (int i, ...) { - va_list args1, args2; - va_start (args1, i); - va_copy (args2, args1); - if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) - exit (1); - va_end (args1); va_end (args2); - } - int main() { - f (0, 42); - return 0; - }])], - [dbus_cv_va_copy=yes], - [dbus_cv_va_copy=no]) -]) -AC_CACHE_CHECK([for an implementation of __va_copy()],dbus_cv___va_copy,[ - AC_LINK_IFELSE([AC_LANG_SOURCE([#include <stdarg.h> -#include <stdlib.h> - static void f (int i, ...) { - va_list args1, args2; - va_start (args1, i); - __va_copy (args2, args1); - if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) - exit (1); - va_end (args1); va_end (args2); - } - int main() { - f (0, 42); - return 0; - }])], - [dbus_cv___va_copy=yes], - [dbus_cv___va_copy=no]) -]) - -if test "x$dbus_cv_va_copy" = "xyes"; then - dbus_va_copy_func=va_copy -else if test "x$dbus_cv___va_copy" = "xyes"; then - dbus_va_copy_func=__va_copy -fi -fi - -AS_IF([test -n "$dbus_va_copy_func"], - [AC_DEFINE_UNQUOTED([DBUS_VA_COPY], [$dbus_va_copy_func], [A 'va_copy' style function])], - [AC_MSG_ERROR([dbus requires an ISO C99-compatible va_copy() macro, or a compatible __va_copy(), or MSVC >= 2010 and CMake])]) - #### Atomic integers AC_CACHE_CHECK([whether $CC knows __sync_sub_and_fetch()], diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index 4c36aa39..19a43750 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -843,7 +843,7 @@ _dbus_message_iter_get_args_valist (DBusMessageIter *iter, /* copy var_args first, then we can do another iteration over it to * free memory and close unix fds if parse failed at some point. */ - DBUS_VA_COPY (copy_args, var_args); + va_copy (copy_args, var_args); while (spec_type != DBUS_TYPE_INVALID) { diff --git a/dbus/dbus-string.c b/dbus/dbus-string.c index 05c83231..1fecd6dd 100644 --- a/dbus/dbus-string.c +++ b/dbus/dbus-string.c @@ -41,8 +41,6 @@ #include "dbus-marshal-basic.h" /* probably should be removed by moving the usage of DBUS_TYPE * into the marshaling-related files */ -/* for DBUS_VA_COPY */ -#include "dbus-sysdeps.h" /** * @defgroup DBusString DBusString class @@ -1112,7 +1110,7 @@ _dbus_string_append_printf_valist (DBusString *str, DBUS_STRING_PREAMBLE (str); - DBUS_VA_COPY (args_copy, args); + va_copy (args_copy, args); /* Measure the message length without terminating nul */ len = _dbus_printf_string_upper_bound (format, args); diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index 18bd1282..252798e3 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -3825,7 +3825,7 @@ _dbus_printf_string_upper_bound (const char *format, int len; va_list args_copy; - DBUS_VA_COPY (args_copy, args); + va_copy (args_copy, args); len = vsnprintf (static_buf, bufsize, format, args_copy); va_end (args_copy); @@ -3843,7 +3843,7 @@ _dbus_printf_string_upper_bound (const char *format, * or the real length could be coincidentally the same. Which is it? * If vsnprintf returns the truncated length, we'll go to the slow * path. */ - DBUS_VA_COPY (args_copy, args); + va_copy (args_copy, args); if (vsnprintf (static_buf, 1, format, args_copy) == 1) len = -1; @@ -3864,7 +3864,7 @@ _dbus_printf_string_upper_bound (const char *format, if (buf == NULL) return -1; - DBUS_VA_COPY (args_copy, args); + va_copy (args_copy, args); len = vsnprintf (buf, bufsize, format, args_copy); va_end (args_copy); @@ -5097,7 +5097,7 @@ _dbus_logv (DBusSystemLogSeverity severity, _dbus_assert_not_reached ("invalid log severity"); } - DBUS_VA_COPY (tmp, args); + va_copy (tmp, args); vsyslog (flags, msg, tmp); va_end (tmp); } @@ -5107,7 +5107,7 @@ _dbus_logv (DBusSystemLogSeverity severity, if (log_flags & DBUS_LOG_FLAGS_STDERR) #endif { - DBUS_VA_COPY (tmp, args); + va_copy (tmp, args); fprintf (stderr, "%s[" DBUS_PID_FORMAT "]: ", syslog_tag, _dbus_getpid ()); vfprintf (stderr, msg, tmp); fputc ('\n', stderr); diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index e71f35d2..df4a4ce3 100644 --- a/dbus/dbus-sysdeps-win.c +++ b/dbus/dbus-sysdeps-win.c @@ -744,7 +744,7 @@ int _dbus_printf_string_upper_bound (const char *format, va_list args_copy; bufsize = sizeof (buf); - DBUS_VA_COPY (args_copy, args); + va_copy (args_copy, args); len = _vsnprintf (buf, bufsize - 1, format, args_copy); va_end (args_copy); @@ -759,7 +759,7 @@ int _dbus_printf_string_upper_bound (const char *format, if (p == NULL) return -1; - DBUS_VA_COPY (args_copy, args); + va_copy (args_copy, args); len = _vsnprintf (p, bufsize - 1, format, args_copy); va_end (args_copy); free (p); @@ -4249,7 +4249,7 @@ _dbus_logv (DBusSystemLogSeverity severity, { DBusString out = _DBUS_STRING_INIT_INVALID; const char *message = NULL; - DBUS_VA_COPY (tmp, args); + va_copy (tmp, args); if (!_dbus_string_init (&out)) goto out; @@ -4276,7 +4276,7 @@ out: if (log_flags & DBUS_LOG_FLAGS_STDERR) { - DBUS_VA_COPY (tmp, args); + va_copy (tmp, args); fprintf (stderr, "%s[%lu]: %s: ", log_tag, _dbus_pid_for_log (), s); vfprintf (stderr, msg, tmp); fprintf (stderr, "\n"); diff --git a/meson.build b/meson.build index 8c45522f..c6089c4b 100644 --- a/meson.build +++ b/meson.build @@ -642,56 +642,6 @@ have_backtrace = (cc.has_header('execinfo.h', args: compile_args_c) ) config.set('HAVE_BACKTRACE', have_backtrace) - -# ********************************** -# *** va_copy checks (from GLib) *** -# ********************************** -# we currently check for all three va_copy possibilities, so we get -# all results in config.log for bug reports. - -# Can't use cc.has_function here because va_copy is not -# exactly a function -va_copy_check = ''' -#include <stdarg.h> -#include <stdlib.h> - -static void f (int i, ...) -{ - va_list args1, args2; - va_start (args1, i); - @0@ (args2, args1); - - if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) - exit (1); - - va_end (args1); - va_end (args2); -} - -int main() -{ - f (0, 42); - return 0; -} -''' - -has_va_copy = cc.links(va_copy_check.format('va_copy'), args: compile_args_c) -has___va_copy = cc.links(va_copy_check.format('__va_copy'), args: compile_args_c) - -if has_va_copy - va_copy = 'va_copy' -elif has___va_copy - va_copy = '__va_copy' -elif cc.get_id() == 'msvc' - va_copy = '_DBUS_VA_COPY_ASSIGN' - config.set('_DBUS_VA_COPY_ASSIGN(a1,a2)', '{ a1 = a2; }') -else - error('dbus requires an ISO C99-compatible va_copy() macro, ' - + 'or a compatible __va_copy()') -endif -config.set('DBUS_VA_COPY', va_copy) - - # Can't use cc.has_function here because atomic operations are not # exactly functions config.set10( |