logind: use bus_method_call_with_reply() where posible
This commit is contained in:
+23
-46
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user