summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2022-07-19 20:37:19 +0100
committerSimon McVittie <smcv@collabora.com>2022-07-19 20:50:33 +0100
commita54ed9ffadcbb2bceebdfb5797e38d49c26289eb (patch)
tree4c83b9174c2bd4cf106ef2e7e9c2f6a74b6d2e75
parentbf30fe6d6068bd00ff4b06e667f88e7ca4210cfe (diff)
downloaddbus-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.cmake45
-rw-r--r--cmake/config.h.cmake6
-rw-r--r--configure.ac53
-rw-r--r--dbus/dbus-message.c2
-rw-r--r--dbus/dbus-string.c4
-rw-r--r--dbus/dbus-sysdeps-unix.c10
-rw-r--r--dbus/dbus-sysdeps-win.c8
-rw-r--r--meson.build50
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(