mirror of
https://github.com/systemd/systemd
synced 2025-11-21 09:44:44 +01:00
Compare commits
4 Commits
e4c0741bef
...
dfb46b906e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfb46b906e | ||
|
|
7757de9f20 | ||
|
|
b7c07f6ab4 | ||
|
|
a8f5ae28d8 |
@ -7,6 +7,7 @@
|
||||
#include "efivars.h"
|
||||
#include "fstab-util.h"
|
||||
#include "hibernate-resume-config.h"
|
||||
#include "json-util.h"
|
||||
#include "log.h"
|
||||
#include "os-util.h"
|
||||
#include "parse-util.h"
|
||||
@ -147,11 +148,11 @@ int get_efi_hibernate_location(EFIHibernateLocation **ret) {
|
||||
{ "uuid", SD_JSON_VARIANT_STRING, sd_json_dispatch_id128, offsetof(EFIHibernateLocation, uuid), SD_JSON_MANDATORY },
|
||||
{ "offset", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64, offsetof(EFIHibernateLocation, offset), SD_JSON_MANDATORY },
|
||||
{ "autoSwap", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(EFIHibernateLocation, auto_swap), 0 },
|
||||
{ "kernelVersion", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, offsetof(EFIHibernateLocation, kernel_version), SD_JSON_PERMISSIVE },
|
||||
{ "kernelVersion", SD_JSON_VARIANT_STRING, json_dispatch_version, offsetof(EFIHibernateLocation, kernel_version), SD_JSON_PERMISSIVE },
|
||||
{ "osReleaseId", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, offsetof(EFIHibernateLocation, id), SD_JSON_PERMISSIVE },
|
||||
{ "osReleaseImageId", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, offsetof(EFIHibernateLocation, image_id), SD_JSON_PERMISSIVE },
|
||||
{ "osReleaseVersionId", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, offsetof(EFIHibernateLocation, version_id), SD_JSON_PERMISSIVE|SD_JSON_DEBUG },
|
||||
{ "osReleaseImageVersion", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, offsetof(EFIHibernateLocation, image_version), SD_JSON_PERMISSIVE|SD_JSON_DEBUG },
|
||||
{ "osReleaseVersionId", SD_JSON_VARIANT_STRING, json_dispatch_version, offsetof(EFIHibernateLocation, version_id), SD_JSON_PERMISSIVE|SD_JSON_DEBUG },
|
||||
{ "osReleaseImageVersion", SD_JSON_VARIANT_STRING, json_dispatch_version, offsetof(EFIHibernateLocation, image_version), SD_JSON_PERMISSIVE|SD_JSON_DEBUG },
|
||||
{},
|
||||
};
|
||||
|
||||
|
||||
@ -190,7 +190,7 @@ int json_dispatch_path(const char *name, sd_json_variant *variant, sd_json_dispa
|
||||
const char *path;
|
||||
int r;
|
||||
|
||||
assert_return(variant, -EINVAL);
|
||||
assert(variant);
|
||||
|
||||
r = json_dispatch_const_path(name, variant, flags, &path);
|
||||
if (r < 0)
|
||||
@ -202,6 +202,36 @@ int json_dispatch_path(const char *name, sd_json_variant *variant, sd_json_dispa
|
||||
return 0;
|
||||
}
|
||||
|
||||
int json_dispatch_strv_path(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
|
||||
_cleanup_strv_free_ char **n = NULL;
|
||||
char ***l = ASSERT_PTR(userdata);
|
||||
int r;
|
||||
|
||||
assert(variant);
|
||||
|
||||
if (sd_json_variant_is_null(variant)) {
|
||||
*l = strv_free(*l);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!sd_json_variant_is_array(variant))
|
||||
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array.", strna(name));
|
||||
|
||||
sd_json_variant *i;
|
||||
JSON_VARIANT_ARRAY_FOREACH(i, variant) {
|
||||
const char *a;
|
||||
r = json_dispatch_const_path(name, i, flags, &a);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = strv_extend(&n, a);
|
||||
if (r < 0)
|
||||
return json_log_oom(variant, flags);
|
||||
}
|
||||
|
||||
return strv_free_and_replace(*l, n);
|
||||
}
|
||||
|
||||
int json_dispatch_const_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
|
||||
const char **n = ASSERT_PTR(userdata);
|
||||
|
||||
@ -226,7 +256,7 @@ int json_dispatch_filename(const char *name, sd_json_variant *variant, sd_json_d
|
||||
const char *filename;
|
||||
int r;
|
||||
|
||||
assert_return(variant, -EINVAL);
|
||||
assert(variant);
|
||||
|
||||
r = json_dispatch_const_filename(name, variant, flags, &filename);
|
||||
if (r < 0)
|
||||
@ -238,6 +268,44 @@ int json_dispatch_filename(const char *name, sd_json_variant *variant, sd_json_d
|
||||
return 0;
|
||||
}
|
||||
|
||||
int json_dispatch_const_version(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
|
||||
const char **n = ASSERT_PTR(userdata);
|
||||
|
||||
assert(variant);
|
||||
|
||||
if (sd_json_variant_is_null(variant)) {
|
||||
*n = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!sd_json_variant_is_string(variant))
|
||||
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
|
||||
|
||||
const char *version = sd_json_variant_string(variant);
|
||||
if (!version_is_valid(version))
|
||||
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid version string.", strna(name));
|
||||
|
||||
*n = version;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int json_dispatch_version(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
|
||||
char **n = ASSERT_PTR(userdata);
|
||||
const char *version;
|
||||
int r;
|
||||
|
||||
assert(variant);
|
||||
|
||||
r = json_dispatch_const_version(name, variant, flags, &version);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (free_and_strdup(n, version) < 0)
|
||||
return json_log_oom(variant, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int json_variant_new_pidref(sd_json_variant **ret, PidRef *pidref) {
|
||||
sd_id128_t boot_id = SD_ID128_NULL;
|
||||
int r;
|
||||
|
||||
@ -116,8 +116,11 @@ int json_dispatch_const_unit_name(const char *name, sd_json_variant *variant, sd
|
||||
int json_dispatch_in_addr(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_path(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_const_path(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_strv_path(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_const_filename(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_version(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_const_version(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_pidref(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_devnum(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
int json_dispatch_ifindex(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata);
|
||||
|
||||
@ -365,7 +365,7 @@ static int parse_describe(sd_bus_message *reply, Version *ret) {
|
||||
assert(sd_json_variant_is_object(json));
|
||||
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
{ "version", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, offsetof(DescribeParams, v.version), 0 },
|
||||
{ "version", SD_JSON_VARIANT_STRING, json_dispatch_version, offsetof(DescribeParams, v.version), 0 },
|
||||
{ "newest", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(DescribeParams, newest), 0 },
|
||||
{ "available", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(DescribeParams, available), 0 },
|
||||
{ "installed", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, offsetof(DescribeParams, installed), 0 },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user