# undef SET_NEXT_VAL
-# define GET_NEXT_VAL(dbustype, vargtype, fmt) \
+# define GET_NEXT_VAL(dbustype, member, vargtype, fmt) \
do { \
dbustype *x; \
+ DBusBasicValue v; \
if (arrayref) { \
VIR_DEBUG("Use arrayref"); \
vargtype **xptrptr = arrayptr; \
x = (dbustype *)(*xptrptr + (*narrayptr - 1)); \
VIR_DEBUG("Expanded to %zu", *narrayptr); \
} else { \
- x = (dbustype *)va_arg(args, vargtype *); \
+ x = (dbustype *)&(v.member); \
} \
dbus_message_iter_get_basic(iter, x); \
+ if (!arrayref) \
+ *va_arg(args, vargtype *) = v.member; \
VIR_DEBUG("Read basic type '" #dbustype "' varg '" #vargtype \
"' val '" fmt "'", (vargtype)*x); \
} while (0)
switch (*t) {
case DBUS_TYPE_BYTE:
- GET_NEXT_VAL(unsigned char, unsigned char, "%d");
+ GET_NEXT_VAL(unsigned char, byt, unsigned char, "%d");
break;
case DBUS_TYPE_BOOLEAN:
- GET_NEXT_VAL(dbus_bool_t, int, "%d");
+ GET_NEXT_VAL(dbus_bool_t, bool_val, bool, "%d");
break;
case DBUS_TYPE_INT16:
- GET_NEXT_VAL(dbus_int16_t, short, "%d");
+ GET_NEXT_VAL(dbus_int16_t, i16, short, "%d");
break;
case DBUS_TYPE_UINT16:
- GET_NEXT_VAL(dbus_uint16_t, unsigned short, "%d");
+ GET_NEXT_VAL(dbus_uint16_t, u16, unsigned short, "%d");
break;
case DBUS_TYPE_INT32:
- GET_NEXT_VAL(dbus_uint32_t, int, "%d");
+ GET_NEXT_VAL(dbus_uint32_t, i32, int, "%d");
break;
case DBUS_TYPE_UINT32:
- GET_NEXT_VAL(dbus_uint32_t, unsigned int, "%u");
+ GET_NEXT_VAL(dbus_uint32_t, u32, unsigned int, "%u");
break;
case DBUS_TYPE_INT64:
- GET_NEXT_VAL(dbus_uint64_t, long long, "%lld");
+ GET_NEXT_VAL(dbus_uint64_t, i64, long long, "%lld");
break;
case DBUS_TYPE_UINT64:
- GET_NEXT_VAL(dbus_uint64_t, unsigned long long, "%llu");
+ GET_NEXT_VAL(dbus_uint64_t, u64, unsigned long long, "%llu");
break;
case DBUS_TYPE_DOUBLE:
- GET_NEXT_VAL(double, double, "%lf");
+ GET_NEXT_VAL(double, dbl, double, "%lf");
break;
case DBUS_TYPE_STRING:
/*
* virpolkit.c: helpers for using polkit APIs
*
- * Copyright (C) 2013 Red Hat, Inc.
+ * Copyright (C) 2013, 2014 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
DBusMessage *reply = NULL;
char **retdetails = NULL;
size_t nretdetails = 0;
- int is_authorized; /* var-args requires int not bool */
- int is_challenge; /* var-args requires int not bool */
+ bool is_authorized;
+ bool is_challenge;
bool is_dismissed = false;
size_t i;
int ret = -1;
DBusMessage *msg = NULL;
int ret = -1;
unsigned char in_byte = 200, out_byte = 0;
- int in_bool = true, out_bool = false;
+ bool in_bool = true, out_bool = false;
short in_int16 = 0xfefe, out_int16 = 0;
unsigned short in_uint16 = 32000, out_uint16 = 0;
int in_int32 = 100000000, out_int32 = 0;
DBusMessage *msg = NULL;
int ret = -1;
unsigned char in_byte = 200, out_byte = 0;
- int in_bool = true, out_bool = false;
+ bool in_bool = true, out_bool = false;
short in_int16 = 12000, out_int16 = 0;
unsigned short in_uint16 = 32000, out_uint16 = 0;
int in_int32 = 100000000, out_int32 = 0;