sd-bus: if a NULL signatures is passed to sd_bus_message_skip(), make it skip a single element of any type

This commit is contained in:
Lennart Poettering
2014-11-28 20:29:44 +01:00
parent 1abe54d9a9
commit d9fba53316
+22 -3
View File
@@ -4450,13 +4450,32 @@ _public_ int sd_bus_message_skip(sd_bus_message *m, const char *types) {
assert_return(m, -EINVAL);
assert_return(m->sealed, -EPERM);
assert_return(types, -EINVAL);
if (isempty(types))
return 0;
/* If types is NULL, read exactly one element */
if (!types) {
struct bus_container *c;
size_t l;
if (message_end_of_signature(m))
return -ENXIO;
if (message_end_of_array(m, m->rindex))
return 0;
c = message_get_container(m);
r = signature_element_length(c->signature + c->index, &l);
if (r < 0)
return r;
types = strndupa(c->signature + c->index, l);
}
switch (*types) {
case 0: /* Nothing to drop */
return 0;
case SD_BUS_TYPE_BYTE:
case SD_BUS_TYPE_BOOLEAN:
case SD_BUS_TYPE_INT16: