varlink: add enum types for class and whom fields in io.systemd.Machine
Convert the class field (Register input, List output) from plain string to MachineClass enum type, and the whom field (Kill input) to KillWhom enum type. Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -360,10 +360,12 @@ int vl_method_terminate_internal(sd_varlink *link, sd_json_variant *parameters,
|
||||
return sd_varlink_reply(link, NULL);
|
||||
}
|
||||
|
||||
static JSON_DISPATCH_ENUM_DEFINE(dispatch_kill_whom, KillWhom, kill_whom_from_string);
|
||||
|
||||
typedef struct MachineKillParameters {
|
||||
const char *name;
|
||||
PidRef pidref;
|
||||
const char *swhom;
|
||||
KillWhom whom;
|
||||
int32_t signo;
|
||||
} MachineKillParameters;
|
||||
|
||||
@@ -376,7 +378,7 @@ static void machine_kill_paramaters_done(MachineKillParameters *p) {
|
||||
int vl_method_kill(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
VARLINK_DISPATCH_MACHINE_LOOKUP_FIELDS(MachineKillParameters),
|
||||
{ "whom", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(MachineKillParameters, swhom), 0 },
|
||||
{ "whom", SD_JSON_VARIANT_STRING, dispatch_kill_whom, offsetof(MachineKillParameters, whom), 0 },
|
||||
{ "signal", _SD_JSON_VARIANT_TYPE_INVALID , sd_json_dispatch_signal, offsetof(MachineKillParameters, signo), SD_JSON_MANDATORY },
|
||||
VARLINK_DISPATCH_POLKIT_FIELD,
|
||||
{}
|
||||
@@ -385,8 +387,8 @@ int vl_method_kill(sd_varlink *link, sd_json_variant *parameters, sd_varlink_met
|
||||
Manager *manager = ASSERT_PTR(userdata);
|
||||
_cleanup_(machine_kill_paramaters_done) MachineKillParameters p = {
|
||||
.pidref = PIDREF_NULL,
|
||||
.whom = _KILL_WHOM_INVALID,
|
||||
};
|
||||
KillWhom whom;
|
||||
int r;
|
||||
|
||||
assert(link);
|
||||
@@ -403,13 +405,7 @@ int vl_method_kill(sd_varlink *link, sd_json_variant *parameters, sd_varlink_met
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (isempty(p.swhom))
|
||||
whom = KILL_ALL;
|
||||
else {
|
||||
whom = kill_whom_from_string(p.swhom);
|
||||
if (whom < 0)
|
||||
return sd_varlink_error_invalid_parameter_name(link, "whom");
|
||||
}
|
||||
KillWhom whom = p.whom >= 0 ? p.whom : KILL_ALL;
|
||||
|
||||
if (manager->runtime_scope != RUNTIME_SCOPE_USER) {
|
||||
r = varlink_verify_polkit_async_full(
|
||||
|
||||
@@ -478,7 +478,7 @@ static int list_machine_one_and_maybe_read_metadata(sd_varlink *link, Machine *m
|
||||
&v,
|
||||
SD_JSON_BUILD_PAIR_STRING("name", m->name),
|
||||
SD_JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(m->id), "id", SD_JSON_BUILD_ID128(m->id)),
|
||||
SD_JSON_BUILD_PAIR_STRING("class", machine_class_to_string(m->class)),
|
||||
JSON_BUILD_PAIR_ENUM("class", machine_class_to_string(m->class)),
|
||||
JSON_BUILD_PAIR_STRING_NON_EMPTY("service", m->service),
|
||||
JSON_BUILD_PAIR_STRING_NON_EMPTY("rootDirectory", m->root_directory),
|
||||
JSON_BUILD_PAIR_STRING_NON_EMPTY("unit", m->unit),
|
||||
|
||||
Reference in New Issue
Block a user