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;
# 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@
# 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()],
/* 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)
{
#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
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);
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);
* 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;
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);
_dbus_assert_not_reached ("invalid log severity");
}
- DBUS_VA_COPY (tmp, args);
+ va_copy (tmp, args);
vsyslog (flags, msg, tmp);
va_end (tmp);
}
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);
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);
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);
{
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;
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");
)
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(