}
static int get_virtualization(char **v) {
- _cleanup_bus_message_unref_ sd_bus_message *m = NULL, *reply = NULL;
+ _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
_cleanup_bus_unref_ sd_bus *bus = NULL;
const char *t;
char *b;
if (r < 0)
return r;
- r = sd_bus_message_new_method_call(
+ r = sd_bus_call_method(
bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
"org.freedesktop.DBus.Properties",
"Get",
- &m);
- if (r < 0)
- return r;
-
- r = sd_bus_message_append(m, "ss", "org.freedesktop.systemd1.Manager", "Virtualization");
- if (r < 0)
- return r;
-
- r = sd_bus_send_with_reply_and_block(bus, m, 0, NULL, &reply);
+ NULL,
+ &reply,
+ "ss",
+ "org.freedesktop.systemd1.Manager",
+ "Virtualization");
if (r < 0)
return r;
return 0;
}
-static int message_append_ap(
+int bus_message_append_ap(
sd_bus_message *m,
const char *types,
va_list ap) {
n = va_arg(ap, unsigned);
for (i = 0; i < n; i++) {
- r = message_append_ap(m, s, ap);
+ r = bus_message_append_ap(m, s, ap);
if (r < 0)
return r;
}
if (r < 0)
return r;
- r = message_append_ap(m, s, ap);
+ r = bus_message_append_ap(m, s, ap);
if (r < 0)
return r;
t += k - 1;
- r = message_append_ap(m, s, ap);
+ r = bus_message_append_ap(m, s, ap);
if (r < 0)
return r;
if (m->sealed)
return -EPERM;
if (!types)
- return -EINVAL;
+ return 0;
va_start(ap, types);
- r = message_append_ap(m, types, ap);
+ r = bus_message_append_ap(m, types, ap);
va_end(ap);
return r;
sd_bus_message **ret);
const char* bus_message_get_arg(sd_bus_message *m, unsigned i);
+
+int bus_message_append_ap(sd_bus_message *m, const char *types, va_list ap);
return r;
return q;
}
+
+int sd_bus_emit_signal(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *member,
+ const char *types, ...) {
+
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
+ va_list ap;
+ int r;
+
+ if (!bus)
+ return -EINVAL;
+
+ r = sd_bus_message_new_signal(bus, path, interface, member, &m);
+ if (r < 0)
+ return r;
+
+ va_start(ap, types);
+ r = bus_message_append_ap(m, types, ap);
+ va_end(ap);
+ if (r < 0)
+ return r;
+
+ return sd_bus_send(bus, m, NULL);
+}
+
+int sd_bus_call_method(
+ sd_bus *bus,
+ const char *destination,
+ const char *path,
+ const char *interface,
+ const char *member,
+ sd_bus_error *error,
+ sd_bus_message **reply,
+ const char *types, ...) {
+
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
+ va_list ap;
+ int r;
+
+ if (!bus)
+ return -EINVAL;
+
+ r = sd_bus_message_new_method_call(bus, destination, path, interface, member, &m);
+ if (r < 0)
+ return r;
+
+ va_start(ap, types);
+ r = bus_message_append_ap(m, types, ap);
+ va_end(ap);
+ if (r < 0)
+ return r;
+
+ return sd_bus_send_with_reply_and_block(bus, m, 0, error, reply);
+}
int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char **contents);
int sd_bus_message_rewind(sd_bus_message *m, int complete);
+/* Convenience calls */
+
+int sd_bus_emit_signal(sd_bus *bus, const char *path, const char *interface, const char *member, const char *types, ...);
+int sd_bus_call_method(sd_bus *bus, const char *destination, const char *path, const char *interface, const char *member, sd_bus_error *error, sd_bus_message **reply, const char *types, ...);
+
/* Bus management */
int sd_bus_get_unique_name(sd_bus *bus, const char **unique);