82 lines
2.7 KiB
Diff
82 lines
2.7 KiB
Diff
|
diff --git src/modules/bus.c src/modules/bus.c
|
||
|
index 00f49cf..7e65fef 100644
|
||
|
--- src/modules/bus.c
|
||
|
+++ src/modules/bus.c
|
||
|
@@ -2,7 +2,6 @@
|
||
|
|
||
|
#define GET_BUS(a) sd_bus *tmp = a->bus; if (!tmp) { tmp = a->type == USER_BUS ? userbus : sysbus; } if (!tmp) { return -1; }
|
||
|
|
||
|
-static int _call(const bus_args *a, const char *signature, va_list args_va, const void **args_ptr, bool expect_reply);
|
||
|
static void free_bus_structs(sd_bus_error *err, sd_bus_message *m, sd_bus_message *reply);
|
||
|
static int check_err(int *r, sd_bus_error *err, const char *caller);
|
||
|
|
||
|
@@ -66,7 +65,10 @@ static void receive(const msg_t *const msg, UNUSED const void* userdata) {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
-static int _call(const bus_args *a, const char *signature, va_list args_va, const void **args_ptr, bool expect_reply) {
|
||
|
+/*
|
||
|
+ * Call a method on bus and store its result of type userptr_type in userptr.
|
||
|
+ */
|
||
|
+int call(const bus_args *a, const char *signature, ...) {
|
||
|
sd_bus_error error = SD_BUS_ERROR_NULL;
|
||
|
sd_bus_message *m = NULL, *reply = NULL;
|
||
|
GET_BUS(a);
|
||
|
@@ -76,26 +78,20 @@ static int _call(const bus_args *a, const char *signature, va_list args_va, cons
|
||
|
goto finish;
|
||
|
}
|
||
|
|
||
|
- r = sd_bus_message_set_expect_reply(m, expect_reply);
|
||
|
+ r = sd_bus_message_set_expect_reply(m, a->reply_cb != NULL);
|
||
|
if (check_err(&r, &error, a->caller)) {
|
||
|
goto finish;
|
||
|
}
|
||
|
|
||
|
- if (args_va) {
|
||
|
- sd_bus_message_appendv(m, signature, args_va);
|
||
|
- } else if (args_ptr) {
|
||
|
- int len = strlen(signature);
|
||
|
- if (len == 1) {
|
||
|
- sd_bus_message_append_basic(m, signature[0], args_ptr);
|
||
|
- } else {
|
||
|
- for (int i = 0; i < len; i++) {
|
||
|
- sd_bus_message_append_basic(m, signature[i], args_ptr[i]);
|
||
|
- }
|
||
|
- }
|
||
|
+ if (signature && strlen(signature)) {
|
||
|
+ va_list args;
|
||
|
+ va_start(args, signature);
|
||
|
+ sd_bus_message_appendv(m, signature, args);
|
||
|
+ va_end(args);
|
||
|
}
|
||
|
|
||
|
/* Check if we need to wait for a response message */
|
||
|
- if (expect_reply) {
|
||
|
+ if (a->reply_cb != NULL) {
|
||
|
r = sd_bus_call(tmp, m, 0, &error, &reply);
|
||
|
if (check_err(&r, &error, a->caller)) {
|
||
|
goto finish;
|
||
|
@@ -111,22 +107,6 @@ finish:
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
-/*
|
||
|
- * Call a method on bus and store its result of type userptr_type in userptr.
|
||
|
- */
|
||
|
-int call(const bus_args *a, const char *signature, ...) {
|
||
|
- int r = 0;
|
||
|
- if (signature) {
|
||
|
- va_list args;
|
||
|
- va_start(args, signature);
|
||
|
- r = _call(a, signature, args, NULL, a->reply_cb != NULL);
|
||
|
- va_end(args);
|
||
|
- } else {
|
||
|
- r = _call(a, signature, NULL, NULL, a->reply_cb != NULL);
|
||
|
- }
|
||
|
- return r;
|
||
|
-}
|
||
|
-
|
||
|
/*
|
||
|
* Add a match on bus on certain signal for cb callback
|
||
|
*/
|