homectl: split out helpers parse_{unsigned,u64,size}_field
This commit is contained in:
+71
-52
@@ -3136,6 +3136,66 @@ static int parse_string_field(sd_json_variant **identity, const char *field, con
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int parse_unsigned_field(sd_json_variant **identity, const char *field, const char *arg) {
|
||||
int r;
|
||||
|
||||
assert(identity);
|
||||
assert(field);
|
||||
|
||||
if (isempty(arg))
|
||||
return drop_from_identity(field);
|
||||
|
||||
unsigned n;
|
||||
r = safe_atou(arg, &n);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse %s parameter: %s", field, arg);
|
||||
|
||||
r = sd_json_variant_set_field_unsigned(identity, field, n);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set %s field: %m", field);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int parse_u64_field(sd_json_variant **identity, const char *field, const char *arg) {
|
||||
int r;
|
||||
|
||||
assert(identity);
|
||||
assert(field);
|
||||
|
||||
if (isempty(arg))
|
||||
return drop_from_identity(field);
|
||||
|
||||
uint64_t n;
|
||||
r = safe_atou64(arg, &n);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse %s parameter: %s", field, arg);
|
||||
|
||||
r = sd_json_variant_set_field_unsigned(identity, field, n);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set %s field: %m", field);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int parse_size_field(sd_json_variant **identity, const char *field, const char *arg) {
|
||||
int r;
|
||||
|
||||
assert(identity);
|
||||
assert(field);
|
||||
|
||||
if (isempty(arg))
|
||||
return drop_from_identity(field);
|
||||
|
||||
uint64_t n;
|
||||
r = parse_size(arg, 1024, &n);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse %s parameter: %s", field, arg);
|
||||
|
||||
r = sd_json_variant_set_field_unsigned(identity, field, n);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set %s field: %m", field);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int help(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_free_ char *link = NULL;
|
||||
int r;
|
||||
@@ -4185,25 +4245,13 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
c == ARG_LUKS_VOLUME_KEY_SIZE ? "luksVolumeKeySize" :
|
||||
c == ARG_LUKS_PBKDF_FORCE_ITERATIONS ? "luksPbkdfForceIterations" :
|
||||
c == ARG_LUKS_PBKDF_PARALLEL_THREADS ? "luksPbkdfParallelThreads" :
|
||||
c == ARG_RATE_LIMIT_BURST ? "rateLimitBurst" : NULL;
|
||||
unsigned n;
|
||||
|
||||
c == ARG_RATE_LIMIT_BURST ? "rateLimitBurst" :
|
||||
NULL;
|
||||
assert(field);
|
||||
|
||||
if (isempty(optarg)) {
|
||||
r = drop_from_identity(field);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
r = safe_atou(optarg, &n);
|
||||
r = parse_unsigned_field(match_identity ?: &arg_identity_extra, field, optarg);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse %s parameter: %s", field, optarg);
|
||||
|
||||
r = sd_json_variant_set_field_unsigned(match_identity ?: &arg_identity_extra, field, n);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set %s field: %m", field);
|
||||
|
||||
return r;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4436,26 +4484,12 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
break;
|
||||
}
|
||||
|
||||
case ARG_TASKS_MAX: {
|
||||
uint64_t u;
|
||||
|
||||
if (isempty(optarg)) {
|
||||
r = drop_from_identity("tasksMax");
|
||||
if (r < 0)
|
||||
return r;
|
||||
break;
|
||||
}
|
||||
|
||||
r = safe_atou64(optarg, &u);
|
||||
case ARG_TASKS_MAX:
|
||||
r = parse_u64_field(match_identity ?: &arg_identity_extra, "tasksMax", optarg);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse --tasks-max= parameter: %s", optarg);
|
||||
|
||||
r = sd_json_variant_set_field_unsigned(match_identity ?: &arg_identity_extra, "tasksMax", u);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set tasksMax field: %m");
|
||||
|
||||
return r;
|
||||
break;
|
||||
}
|
||||
|
||||
case ARG_MEMORY_MAX:
|
||||
case ARG_MEMORY_HIGH:
|
||||
@@ -4463,27 +4497,12 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
const char *field =
|
||||
c == ARG_MEMORY_MAX ? "memoryMax" :
|
||||
c == ARG_MEMORY_HIGH ? "memoryHigh" :
|
||||
c == ARG_LUKS_PBKDF_MEMORY_COST ? "luksPbkdfMemoryCost" : NULL;
|
||||
c == ARG_LUKS_PBKDF_MEMORY_COST ? "luksPbkdfMemoryCost" :
|
||||
NULL;
|
||||
|
||||
uint64_t u;
|
||||
|
||||
assert(field);
|
||||
|
||||
if (isempty(optarg)) {
|
||||
r = drop_from_identity(field);
|
||||
if (r < 0)
|
||||
return r;
|
||||
break;
|
||||
}
|
||||
|
||||
r = parse_size(optarg, 1024, &u);
|
||||
r = parse_size_field(match_identity ?: &arg_identity_extra_this_machine, field, optarg);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse %s parameter: %s", field, optarg);
|
||||
|
||||
r = sd_json_variant_set_field_unsigned(match_identity ?: &arg_identity_extra_this_machine, field, u);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to set %s field: %m", field);
|
||||
|
||||
return r;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user