chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Prep v225: Applying various fixes and changes to src/libelogind/sd-bus that got lost...
[elogind.git]
/
src
/
libelogind
/
sd-bus
/
bus-message.c
diff --git
a/src/libelogind/sd-bus/bus-message.c
b/src/libelogind/sd-bus/bus-message.c
index 3261154e04867feb13239550d5b8f9c87e1f3a7f..dad6db8af2285f249d75ce015cab694b20b8a185 100644
(file)
--- a/
src/libelogind/sd-bus/bus-message.c
+++ b/
src/libelogind/sd-bus/bus-message.c
@@
-144,11
+144,7
@@
static void message_free(sd_bus_message *m) {
if (m->iovec != m->iovec_fixed)
free(m->iovec);
if (m->iovec != m->iovec_fixed)
free(m->iovec);
- if (m->destination_ptr) {
- free(m->destination_ptr);
- m->destination_ptr = NULL;
- }
-
+ m->destination_ptr = mfree(m->destination_ptr);
message_reset_containers(m);
free(m->root_container.signature);
free(m->root_container.offsets);
message_reset_containers(m);
free(m->root_container.signature);
free(m->root_container.offsets);
@@
-2710,7
+2706,7
@@
_public_ int sd_bus_message_append_array_memfd(
int r;
assert_return(m, -EINVAL);
int r;
assert_return(m, -EINVAL);
- assert_return(memfd >= 0, -E
INVAL
);
+ assert_return(memfd >= 0, -E
BADF
);
assert_return(bus_type_is_trivial(type), -EINVAL);
assert_return(size > 0, -EINVAL);
assert_return(!m->sealed, -EPERM);
assert_return(bus_type_is_trivial(type), -EINVAL);
assert_return(size > 0, -EINVAL);
assert_return(!m->sealed, -EPERM);
@@
-2786,7
+2782,7
@@
_public_ int sd_bus_message_append_string_memfd(
int r;
assert_return(m, -EINVAL);
int r;
assert_return(m, -EINVAL);
- assert_return(memfd >= 0, -E
INVAL
);
+ assert_return(memfd >= 0, -E
BADF
);
assert_return(size > 0, -EINVAL);
assert_return(!m->sealed, -EPERM);
assert_return(!m->poisoned, -ESTALE);
assert_return(size > 0, -EINVAL);
assert_return(!m->sealed, -EPERM);
assert_return(!m->poisoned, -ESTALE);
@@
-5646,21
+5642,23
@@
_public_ int sd_bus_message_read_strv(sd_bus_message *m, char ***l) {
return 1;
}
return 1;
}
-int bus_message_get_arg(sd_bus_message *m, unsigned i, const char **str, char ***strv) {
- const char *contents;
+static int bus_message_get_arg_skip(
+ sd_bus_message *m,
+ unsigned i,
+ char *_type,
+ const char **_contents) {
+
unsigned j;
unsigned j;
- char type;
int r;
int r;
- assert(m);
- assert(str);
- assert(strv);
-
r = sd_bus_message_rewind(m, true);
if (r < 0)
return r;
for (j = 0;; j++) {
r = sd_bus_message_rewind(m, true);
if (r < 0)
return r;
for (j = 0;; j++) {
+ const char *contents;
+ char type;
+
r = sd_bus_message_peek_type(m, &type, &contents);
if (r < 0)
return r;
r = sd_bus_message_peek_type(m, &type, &contents);
if (r < 0)
return r;
@@
-5672,31
+5670,56
@@
int bus_message_get_arg(sd_bus_message *m, unsigned i, const char **str, char **
!(type == SD_BUS_TYPE_ARRAY && STR_IN_SET(contents, "s", "o", "g")))
return -ENXIO;
!(type == SD_BUS_TYPE_ARRAY && STR_IN_SET(contents, "s", "o", "g")))
return -ENXIO;
- if (j >= i)
- break;
+ if (j >= i) {
+ if (_contents)
+ *_contents = contents;
+ if (_type)
+ *_type = type;
+ return 0;
+ }
r = sd_bus_message_skip(m, NULL);
if (r < 0)
return r;
}
r = sd_bus_message_skip(m, NULL);
if (r < 0)
return r;
}
- if (type == SD_BUS_TYPE_ARRAY) {
+}
+
+int bus_message_get_arg(sd_bus_message *m, unsigned i, const char **str) {
+ char type;
+ int r;
+
+ assert(m);
+ assert(str);
-
r = sd_bus_message_read_strv(m, strv
);
+
r = bus_message_get_arg_skip(m, i, &type, NULL
);
if (r < 0)
return r;
if (r < 0)
return r;
- *str = NULL;
+ if (!IN_SET(type, SD_BUS_TYPE_STRING, SD_BUS_TYPE_OBJECT_PATH, SD_BUS_TYPE_SIGNATURE))
+ return -ENXIO;
+
+ return sd_bus_message_read_basic(m, type, str);
+}
- } else {
- r = sd_bus_message_read_basic(m, type, str);
+int bus_message_get_arg_strv(sd_bus_message *m, unsigned i, char ***strv) {
+ const char *contents;
+ char type;
+ int r;
+
+ assert(m);
+ assert(strv);
+
+ r = bus_message_get_arg_skip(m, i, &type, &contents);
if (r < 0)
return r;
if (r < 0)
return r;
- *strv = NULL;
- }
+ if (type != SD_BUS_TYPE_ARRAY)
+ return -ENXIO;
+ if (!STR_IN_SET(contents, "s", "o", "g"))
+ return -ENXIO;
- return
0
;
+ return
sd_bus_message_read_strv(m, strv)
;
}
_public_ int sd_bus_message_get_errno(sd_bus_message *m) {
}
_public_ int sd_bus_message_get_errno(sd_bus_message *m) {