X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fdbus-manager.c;h=413d1f320a3b6f89700dc165ec697b2839f6466c;hp=582de4bd42e0650e5d0c00dda08fc5b68fb043df;hb=d605b2fd41b671f93ae5cb67488978846427dda9;hpb=c0576cd6d61b81d3bab307e2deee10447de115db diff --git a/src/dbus-manager.c b/src/dbus-manager.c index 582de4bd4..413d1f320 100644 --- a/src/dbus-manager.c +++ b/src/dbus-manager.c @@ -145,6 +145,7 @@ " \n" \ " \n" \ " \n" \ + " \n" \ " \n" \ " \n" \ " \n" \ @@ -156,6 +157,7 @@ " \n" \ " \n" \ " \n" \ + " \n" \ " \n" \ " \n" \ " \n" \ @@ -168,6 +170,7 @@ " \n" \ " \n" \ " \n" \ + " \n" \ " \n" \ " \n" \ " \n" \ @@ -422,19 +425,30 @@ static const char *message_get_sender_with_fallback(DBusMessage *m) { return ":no-sender"; } -static DBusMessage *message_from_file_changes(DBusMessage *m, UnitFileChange *changes, unsigned n_changes) { +static DBusMessage *message_from_file_changes( + DBusMessage *m, + UnitFileChange *changes, + unsigned n_changes, + int carries_install_info) { + DBusMessageIter iter, sub, sub2; DBusMessage *reply; unsigned i; - assert(changes); - reply = dbus_message_new_method_return(m); if (!reply) return NULL; dbus_message_iter_init_append(reply, &iter); + if (carries_install_info >= 0) { + dbus_bool_t b; + + b = carries_install_info; + if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &b)) + goto oom; + } + if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(sss)", &sub)) goto oom; @@ -446,9 +460,9 @@ static DBusMessage *message_from_file_changes(DBusMessage *m, UnitFileChange *ch source = strempty(changes[i].source); if (!dbus_message_iter_open_container(&sub, DBUS_TYPE_STRUCT, NULL, &sub2) || - !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &type) || - !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &path) || - !dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &source) || + !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &type) || + !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &path) || + !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_STRING, &source) || !dbus_message_iter_close_container(&sub, &sub2)) goto oom; } @@ -1304,6 +1318,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, UnitFileChange *changes = NULL; unsigned n_changes = 0; dbus_bool_t runtime, force; + bool carries_install_info = -1; if (!dbus_message_iter_init(message, &iter)) goto oom; @@ -1323,15 +1338,18 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, return bus_send_error_reply(connection, message, NULL, -EIO); } - if (streq(member, "EnableUnitFiles")) + if (streq(member, "EnableUnitFiles")) { r = unit_file_enable(scope, runtime, NULL, l, force, &changes, &n_changes); - else if (streq(member, "ReenableUnitFiles")) + carries_install_info = r; + } else if (streq(member, "ReenableUnitFiles")) { r = unit_file_reenable(scope, runtime, NULL, l, force, &changes, &n_changes); - else if (streq(member, "LinkUnitFiles")) + carries_install_info = r; + } else if (streq(member, "LinkUnitFiles")) r = unit_file_link(scope, runtime, NULL, l, force, &changes, &n_changes); - else if (streq(member, "PresetUnitFiles")) + else if (streq(member, "PresetUnitFiles")) { r = unit_file_preset(scope, runtime, NULL, l, force, &changes, &n_changes); - else if (streq(member, "MaskUnitFiles")) + carries_install_info = r; + } else if (streq(member, "MaskUnitFiles")) r = unit_file_mask(scope, runtime, NULL, l, force, &changes, &n_changes); else assert_not_reached("Uh? Wrong method"); @@ -1344,7 +1362,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, return bus_send_error_reply(connection, message, NULL, r); } - reply = message_from_file_changes(message, changes, n_changes); + reply = message_from_file_changes(message, changes, n_changes, carries_install_info); unit_file_changes_free(changes, n_changes); if (!reply) @@ -1392,7 +1410,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, return bus_send_error_reply(connection, message, NULL, r); } - reply = message_from_file_changes(message, changes, n_changes); + reply = message_from_file_changes(message, changes, n_changes, -1); unit_file_changes_free(changes, n_changes); if (!reply)