logind: use bus_method_call_with_reply() where posible

This commit is contained in:
Simon Peeters
2012-08-08 17:20:04 +02:00
parent 436dddeda6
commit b9c26b4134
3 changed files with 42 additions and 105 deletions
+23 -46
View File
@@ -42,73 +42,53 @@ static enum {
} arg_action = ACTION_INHIBIT;
static int inhibit(DBusConnection *bus, DBusError *error) {
DBusMessage *m = NULL, *reply = NULL;
DBusMessage *reply = NULL;
int fd;
assert(bus);
m = dbus_message_new_method_call(
fd = bus_method_call_with_reply (
bus,
"org.freedesktop.login1",
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
"Inhibit");
if (!m)
return -ENOMEM;
if (!dbus_message_append_args(m,
DBUS_TYPE_STRING, &arg_what,
DBUS_TYPE_STRING, &arg_who,
DBUS_TYPE_STRING, &arg_why,
DBUS_TYPE_STRING, &arg_mode,
DBUS_TYPE_INVALID)) {
fd = -ENOMEM;
goto finish;
}
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
if (!reply) {
fd = -EIO;
goto finish;
}
"Inhibit",
&reply,
NULL,
DBUS_TYPE_STRING, &arg_what,
DBUS_TYPE_STRING, &arg_who,
DBUS_TYPE_STRING, &arg_why,
DBUS_TYPE_STRING, &arg_mode,
DBUS_TYPE_INVALID);
if (fd)
return fd;
if (!dbus_message_get_args(reply, error,
DBUS_TYPE_UNIX_FD, &fd,
DBUS_TYPE_INVALID)){
DBUS_TYPE_INVALID))
fd = -EIO;
goto finish;
}
finish:
if (m)
dbus_message_unref(m);
if (reply)
dbus_message_unref(reply);
dbus_message_unref(reply);
return fd;
}
static int print_inhibitors(DBusConnection *bus, DBusError *error) {
DBusMessage *m, *reply;
DBusMessage *reply;
unsigned n = 0;
DBusMessageIter iter, sub, sub2;
int r;
assert(bus);
m = dbus_message_new_method_call(
r = bus_method_call_with_reply (
bus,
"org.freedesktop.login1",
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
"ListInhibitors");
if (!m)
"ListInhibitors",
&reply,
NULL,
DBUS_TYPE_INVALID);
if (r)
return -ENOMEM;
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
if (!reply) {
r = -EIO;
goto finish;
}
if (!dbus_message_iter_init(reply, &iter)) {
r = -ENOMEM;
@@ -170,9 +150,6 @@ static int print_inhibitors(DBusConnection *bus, DBusError *error) {
r = 0;
finish:
if (m)
dbus_message_unref(m);
if (reply)
dbus_message_unref(reply);
+8 -23
View File
@@ -968,36 +968,21 @@ static int have_multiple_sessions(
}
static int send_start_unit(DBusConnection *connection, const char *unit_name, DBusError *error) {
DBusMessage *message, *reply;
const char *mode = "replace";
assert(connection);
assert(unit_name);
message = dbus_message_new_method_call(
return bus_method_call_with_reply (
connection,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
"StartUnit");
if (!message)
return -ENOMEM;
if (!dbus_message_append_args(message,
DBUS_TYPE_STRING, &unit_name,
DBUS_TYPE_STRING, &mode,
DBUS_TYPE_INVALID)) {
dbus_message_unref(message);
return -ENOMEM;
}
reply = dbus_connection_send_with_reply_and_block(connection, message, -1, error);
dbus_message_unref(message);
if (!reply)
return -EIO;
dbus_message_unref(reply);
return 0;
"StartUnit",
NULL,
NULL,
DBUS_TYPE_STRING, &unit_name,
DBUS_TYPE_STRING, &mode,
DBUS_TYPE_INVALID);
}
static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
+11 -36
View File
@@ -942,16 +942,12 @@ static int vt_is_busy(int vtnr) {
int manager_spawn_autovt(Manager *m, int vtnr) {
int r;
DBusMessage *message = NULL, *reply = NULL;
char *name = NULL;
const char *mode = "fail";
DBusError error;
assert(m);
assert(vtnr >= 1);
dbus_error_init(&error);
if ((unsigned) vtnr > m->n_autovts)
return 0;
@@ -961,47 +957,26 @@ int manager_spawn_autovt(Manager *m, int vtnr) {
else if (r > 0)
return -EBUSY;
message = dbus_message_new_method_call("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartUnit");
if (!message) {
log_error("Could not allocate message.");
r = -ENOMEM;
goto finish;
}
if (asprintf(&name, "autovt@tty%i.service", vtnr) < 0) {
log_error("Could not allocate service name.");
r = -ENOMEM;
goto finish;
}
if (!dbus_message_append_args(message,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_STRING, &mode,
DBUS_TYPE_INVALID)) {
log_error("Could not attach target and flag information to message.");
r = -ENOMEM;
goto finish;
}
reply = dbus_connection_send_with_reply_and_block(m->bus, message, -1, &error);
if (!reply) {
log_error("Failed to start unit: %s", bus_error_message(&error));
goto finish;
}
r = 0;
r = bus_method_call_with_reply (
m->bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
"StartUnit",
NULL,
NULL,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_STRING, &mode,
DBUS_TYPE_INVALID);
finish:
free(name);
if (message)
dbus_message_unref(message);
if (reply)
dbus_message_unref(reply);
dbus_error_free(&error);
return r;
}