Skip to content

Commit 26cf34f

Browse files
Merge pull request #859
dbus: Add ni_dbus_variant_t of type UINT32_ARRAY
2 parents 1b2c058 + ee332a0 commit 26cf34f

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed

include/wicked/dbus.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ struct ni_dbus_variant {
5252
dbus_uint64_t uint64_value;
5353
double double_value;
5454
unsigned char * byte_array_value;
55+
uint32_t * uint32_array_value;
5556
char ** string_array_value;
5657
ni_dbus_dict_entry_t *dict_array_value;
5758
ni_dbus_variant_t *variant_array_value;
@@ -270,6 +271,8 @@ extern void ni_dbus_variant_init_byte_array(ni_dbus_variant_t *);
270271
extern void ni_dbus_variant_set_byte_array(ni_dbus_variant_t *,
271272
const unsigned char *, unsigned int len);
272273
extern dbus_bool_t ni_dbus_variant_append_byte_array(ni_dbus_variant_t *, unsigned char);
274+
extern void ni_dbus_variant_init_uint32_array(ni_dbus_variant_t *);
275+
extern dbus_bool_t ni_dbus_variant_append_uint32_array(ni_dbus_variant_t *, uint32_t);
273276
extern void ni_dbus_variant_init_string_array(ni_dbus_variant_t *);
274277
extern void ni_dbus_variant_set_string_array(ni_dbus_variant_t *,
275278
const char **, unsigned int len);
@@ -282,8 +285,10 @@ extern const char * ni_dbus_variant_array_print_element(const ni_dbus_variant_t
282285

283286
extern dbus_bool_t ni_dbus_variant_is_array_of(const ni_dbus_variant_t *, const char *signature);
284287
extern dbus_bool_t ni_dbus_variant_is_byte_array(const ni_dbus_variant_t *);
288+
extern dbus_bool_t ni_dbus_variant_is_uint32_array(const ni_dbus_variant_t *);
285289
extern dbus_bool_t ni_dbus_variant_is_string_array(const ni_dbus_variant_t *);
286290
extern dbus_bool_t ni_dbus_variant_is_variant_array(const ni_dbus_variant_t *);
291+
extern dbus_bool_t ni_dbus_variant_is_object_path_array(const ni_dbus_variant_t *);
287292
extern dbus_bool_t ni_dbus_variant_is_dict_array(const ni_dbus_variant_t *);
288293
extern dbus_bool_t ni_dbus_variant_is_dict(const ni_dbus_variant_t *);
289294
extern dbus_bool_t ni_dbus_variant_is_struct(const ni_dbus_variant_t *);
@@ -498,6 +503,10 @@ ni_dbus_variant_datum_const_ptr(const ni_dbus_variant_t *variant)
498503
DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING
499504
#define NI_DBUS_STRING_ARRAY_SIGNATURE \
500505
DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING
506+
#define NI_DBUS_OBJECT_PATH_ARRAY_SIGNATURE \
507+
DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_OBJECT_PATH_AS_STRING
508+
#define NI_DBUS_UINT32_ARRAY_SIGNATURE \
509+
DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_UINT32_AS_STRING
501510

502511

503512
#define NI_DBUS_SIGNATURE(type) NI_DBUS_##type##_SIGNATURE

src/dbus-common.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,12 @@ ni_dbus_variant_is_string_array(const ni_dbus_variant_t *var)
166166
return __ni_dbus_is_array(var, DBUS_TYPE_STRING_AS_STRING);
167167
}
168168

169+
dbus_bool_t
170+
ni_dbus_variant_is_object_path_array(const ni_dbus_variant_t *var)
171+
{
172+
return __ni_dbus_is_array(var, DBUS_TYPE_OBJECT_PATH_AS_STRING);
173+
}
174+
169175
/*
170176
* Get/set functions for variant values
171177
*/
@@ -570,6 +576,12 @@ ni_dbus_variant_is_byte_array(const ni_dbus_variant_t *var)
570576
return __ni_dbus_is_array(var, DBUS_TYPE_BYTE_AS_STRING);
571577
}
572578

579+
dbus_bool_t
580+
ni_dbus_variant_is_uint32_array(const ni_dbus_variant_t *var)
581+
{
582+
return __ni_dbus_is_array(var, DBUS_TYPE_UINT32_AS_STRING);
583+
}
584+
573585
/*
574586
* Helper function for handling arrays
575587
*/
@@ -628,6 +640,24 @@ ni_dbus_variant_append_byte_array(ni_dbus_variant_t *var, unsigned char byte)
628640
return TRUE;
629641
}
630642

643+
void
644+
ni_dbus_variant_init_uint32_array(ni_dbus_variant_t *var)
645+
{
646+
ni_dbus_variant_destroy(var);
647+
__ni_dbus_init_array(var, DBUS_TYPE_UINT32);
648+
}
649+
650+
dbus_bool_t
651+
ni_dbus_variant_append_uint32_array(ni_dbus_variant_t *var, uint32_t u)
652+
{
653+
if (!__ni_dbus_is_array(var, DBUS_TYPE_UINT32_AS_STRING))
654+
return FALSE;
655+
656+
__ni_dbus_array_grow(var, sizeof(uint32_t), 1);
657+
var->uint32_array_value[var->array.len++] = u;
658+
return TRUE;
659+
}
660+
631661
/*
632662
* A UUID is encoded as a fixed length array of bytes
633663
*/
@@ -757,6 +787,7 @@ ni_dbus_variant_destroy(ni_dbus_variant_t *var)
757787
unsigned int i;
758788

759789
switch (var->array.element_type) {
790+
case DBUS_TYPE_UINT32:
760791
case DBUS_TYPE_BYTE:
761792
free(var->byte_array_value);
762793
break;
@@ -1142,6 +1173,8 @@ ni_dbus_variant_signature(const ni_dbus_variant_t *var)
11421173
switch (var->array.element_type) {
11431174
case DBUS_TYPE_BYTE:
11441175
return DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING;
1176+
case DBUS_TYPE_UINT32:
1177+
return NI_DBUS_UINT32_ARRAY_SIGNATURE;
11451178
case DBUS_TYPE_STRING:
11461179
return DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING;
11471180
case DBUS_TYPE_VARIANT:

src/dbus-common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ extern dbus_bool_t ni_dbus_message_iter_get_variant(DBusMessageIter *iter,
3333
ni_dbus_variant_t *variant);
3434
extern dbus_bool_t ni_dbus_message_iter_append_byte_array(DBusMessageIter *iter,
3535
const unsigned char *value, unsigned int len);
36+
extern dbus_bool_t ni_dbus_message_iter_append_uint32_array(DBusMessageIter *iter,
37+
const uint32_t *value, unsigned int len);
3638

3739
extern const ni_dbus_property_t *__ni_dbus_service_get_property(const ni_dbus_property_t *, const char *);
3840

src/dbus-message.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,26 @@ ni_dbus_message_iter_append_byte_array(DBusMessageIter *iter,
4343
return TRUE;
4444
}
4545

46+
dbus_bool_t
47+
ni_dbus_message_iter_append_uint32_array(DBusMessageIter *iter, const uint32_t *value, unsigned int len)
48+
{
49+
DBusMessageIter iter_array;
50+
unsigned int i;
51+
52+
if (!dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32_AS_STRING, &iter_array))
53+
return FALSE;
54+
55+
for (i = 0; i < len; i++) {
56+
if (!dbus_message_iter_append_basic(&iter_array, DBUS_TYPE_UINT32, &(value[i])))
57+
return FALSE;
58+
}
59+
60+
if (!dbus_message_iter_close_container(iter, &iter_array))
61+
return FALSE;
62+
63+
return TRUE;
64+
}
65+
4666
static dbus_bool_t
4767
__ni_dbus_message_iter_append_string_array(DBusMessageIter *iter, const char *element_signature,
4868
char **string_array, unsigned int len)
@@ -246,6 +266,11 @@ ni_dbus_message_iter_append_value(DBusMessageIter *iter, const ni_dbus_variant_t
246266
variant->byte_array_value, variant->array.len);
247267
break;
248268

269+
case DBUS_TYPE_UINT32:
270+
rv = ni_dbus_message_iter_append_uint32_array(iter_val,
271+
variant->uint32_array_value, variant->array.len);
272+
break;
273+
249274
case DBUS_TYPE_STRING:
250275
rv = ni_dbus_message_iter_append_string_array(iter_val,
251276
variant->string_array_value, variant->array.len);
@@ -314,6 +339,21 @@ ni_dbus_message_iter_get_byte_array(DBusMessageIter *iter, ni_dbus_variant_t *va
314339
return TRUE;
315340
}
316341

342+
dbus_bool_t
343+
ni_dbus_message_iter_get_uint32_array(DBusMessageIter *iter, ni_dbus_variant_t *variant)
344+
{
345+
uint32_t u;
346+
347+
ni_dbus_variant_init_uint32_array(variant);
348+
while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_UINT32) {
349+
dbus_message_iter_get_basic(iter, &u);
350+
ni_dbus_variant_append_uint32_array(variant, u);
351+
dbus_message_iter_next(iter);
352+
}
353+
354+
return TRUE;
355+
}
356+
317357
dbus_bool_t
318358
ni_dbus_message_iter_get_string_array(DBusMessageIter *iter, ni_dbus_variant_t *variant)
319359
{
@@ -441,6 +481,9 @@ ni_dbus_message_iter_get_array(DBusMessageIter *iter, ni_dbus_variant_t *variant
441481
case DBUS_TYPE_VARIANT:
442482
success = ni_dbus_message_iter_get_variant_array(&iter_array, variant);
443483
break;
484+
case DBUS_TYPE_UINT32:
485+
success = ni_dbus_message_iter_get_uint32_array(&iter_array, variant);
486+
break;
444487
default:
445488
ni_debug_dbus("%s: cannot decode array of type %c", __FUNCTION__, array_type);
446489
break;

0 commit comments

Comments
 (0)