From: Zbigniew Jędrzejewski-Szmek Date: Wed, 10 Dec 2025 14:39:37 +0000 (+0100) Subject: homectl: split out helper parse_tmpfs_limit_field X-Git-Tag: v260-rc1~391^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b078b7f055cc6000114fc039d6e5315bc5d945f0;p=thirdparty%2Fsystemd.git homectl: split out helper parse_tmpfs_limit_field --- diff --git a/src/home/homectl.c b/src/home/homectl.c index e176f291861..99fd0c23066 100644 --- a/src/home/homectl.c +++ b/src/home/homectl.c @@ -3726,6 +3726,48 @@ static int parse_capability_set_field( return 0; } +static int parse_tmpfs_limit_field( + sd_json_variant **identity, + const char *field, + const char *field_scale, + const char *arg) { + int r; + + assert(identity); + assert(field); + assert(field_scale); + + if (isempty(arg)) { + FOREACH_STRING(p, field, field_scale) { + r = drop_from_identity(p); + if (r < 0) + return r; + } + return 0; + } + + r = parse_permyriad(arg); + if (r < 0) { + uint64_t u; + + r = parse_size(arg, 1024, &u); + if (r < 0) + return log_error_errno(r, "Failed to parse %s/%s parameter: %s", field, field_scale, arg); + + r = sd_json_variant_set_field_unsigned(identity, field, u); + if (r < 0) + return log_error_errno(r, "Failed to set %s field: %m", field); + + return drop_from_identity(field_scale); + } + + r = sd_json_variant_set_field_unsigned(identity, field_scale, UINT32_SCALE_FROM_PERMYRIAD(r)); + if (r < 0) + return log_error_errno(r, "Failed to set %s field: %m", field_scale); + + return drop_from_identity(field); +} + static int help(int argc, char *argv[], void *userdata) { _cleanup_free_ char *link = NULL; int r; @@ -4854,49 +4896,20 @@ static int parse_argv(int argc, char *argv[]) { case ARG_DEV_SHM_LIMIT: { const char *field = c == ARG_TMP_LIMIT ? "tmpLimit" : - c == ARG_DEV_SHM_LIMIT ? "devShmLimit" : NULL; + c == ARG_DEV_SHM_LIMIT ? "devShmLimit" : + NULL; const char *field_scale = c == ARG_TMP_LIMIT ? "tmpLimitScale" : - c == ARG_DEV_SHM_LIMIT ? "devShmLimitScale" : NULL; + c == ARG_DEV_SHM_LIMIT ? "devShmLimitScale" : + NULL; assert(field); assert(field_scale); - if (isempty(optarg)) { - r = drop_from_identity(field); - if (r < 0) - return r; - r = drop_from_identity(field_scale); - if (r < 0) - return r; - break; - } - - r = parse_permyriad(optarg); - if (r < 0) { - uint64_t u; - - r = parse_size(optarg, 1024, &u); - if (r < 0) - return log_error_errno(r, "Failed to parse %s/%s parameter: %s", field, field_scale, optarg); - - r = sd_json_variant_set_field_unsigned(match_identity ?: &arg_identity_extra, field, u); - if (r < 0) - return log_error_errno(r, "Failed to set %s field: %m", field); - - r = drop_from_identity(field_scale); - if (r < 0) - return r; - } else { - r = sd_json_variant_set_field_unsigned(match_identity ?: &arg_identity_extra, field_scale, UINT32_SCALE_FROM_PERMYRIAD(r)); - if (r < 0) - return log_error_errno(r, "Failed to set %s field: %m", field_scale); - - r = drop_from_identity(field); - if (r < 0) - return r; - } - + r = parse_tmpfs_limit_field(match_identity ?: &arg_identity_extra, + field, field_scale, optarg); + if (r < 0) + return r; break; }