From 2712882aa3b33576e1488f1e3b4254bd7bf53da1 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Wed, 31 May 2023 15:53:55 +0200 Subject: [PATCH] Add helper function to change segment size. --- lib/luks2/luks2_internal.h | 4 ++++ lib/luks2/luks2_segment.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/luks2/luks2_internal.h b/lib/luks2/luks2_internal.h index faf697cf..b6ed8722 100644 --- a/lib/luks2/luks2_internal.h +++ b/lib/luks2/luks2_internal.h @@ -341,6 +341,10 @@ uint64_t LUKS2_segment_size(struct luks2_hdr *hdr, int segment, unsigned blockwise); +bool LUKS2_segment_set_size(struct luks2_hdr *hdr, + int segment, + const uint64_t *segment_size_bytes); + int LUKS2_segment_is_type(struct luks2_hdr *hdr, int segment, const char *type); diff --git a/lib/luks2/luks2_segment.c b/lib/luks2/luks2_segment.c index c05c8a2b..45454c73 100644 --- a/lib/luks2/luks2_segment.c +++ b/lib/luks2/luks2_segment.c @@ -91,6 +91,22 @@ uint64_t json_segment_get_size(json_object *jobj_segment, unsigned blockwise) return blockwise ? crypt_jobj_get_uint64(jobj) >> SECTOR_SHIFT : crypt_jobj_get_uint64(jobj); } +static bool json_segment_set_size(json_object *jobj_segment, const uint64_t *size_bytes) +{ + json_object *jobj; + + if (!jobj_segment) + return false; + + jobj = size_bytes ? crypt_jobj_new_uint64(*size_bytes) : json_object_new_string("dynamic"); + if (!jobj) + return false; + + json_object_object_add(jobj_segment, "size", jobj); + + return true; +} + const char *json_segment_get_cipher(json_object *jobj_segment) { json_object *jobj; @@ -316,6 +332,11 @@ uint64_t LUKS2_segment_size(struct luks2_hdr *hdr, int segment, unsigned blockwi return json_segment_get_size(LUKS2_get_segment_jobj(hdr, segment), blockwise); } +bool LUKS2_segment_set_size(struct luks2_hdr *hdr, int segment, const uint64_t *segment_size_bytes) +{ + return json_segment_set_size(LUKS2_get_segment_jobj(hdr, segment), segment_size_bytes); +} + int LUKS2_segment_is_type(struct luks2_hdr *hdr, int segment, const char *type) { return !strcmp(json_segment_type(LUKS2_get_segment_jobj(hdr, segment)) ?: "", type);