tree-wide: propagate error code from _from_string() functions
Now that we know we have something useful, no need to make an answer up.
This commit is contained in:
@@ -1574,7 +1574,7 @@ static int dump_exit_status(int argc, char *argv[], void *userdata) {
|
||||
|
||||
status = exit_status_from_string(argv[i]);
|
||||
if (status < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid exit status \"%s\".", argv[i]);
|
||||
return log_error_errno(status, "Invalid exit status \"%s\".", argv[i]);
|
||||
|
||||
assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
|
||||
r = table_add_many(table,
|
||||
|
||||
+2
-2
@@ -1085,7 +1085,7 @@ int log_set_target_from_string(const char *e) {
|
||||
|
||||
t = log_target_from_string(e);
|
||||
if (t < 0)
|
||||
return -EINVAL;
|
||||
return t;
|
||||
|
||||
log_set_target(t);
|
||||
return 0;
|
||||
@@ -1096,7 +1096,7 @@ int log_set_max_level_from_string(const char *e) {
|
||||
|
||||
t = log_level_from_string(e);
|
||||
if (t < 0)
|
||||
return -EINVAL;
|
||||
return t;
|
||||
|
||||
log_set_max_level(t);
|
||||
return 0;
|
||||
|
||||
@@ -252,7 +252,7 @@ int unit_name_build(const char *prefix, const char *instance, const char *suffix
|
||||
|
||||
type = unit_type_from_string(suffix + 1);
|
||||
if (type < 0)
|
||||
return -EINVAL;
|
||||
return type;
|
||||
|
||||
return unit_name_build_from_type(prefix, instance, type, ret);
|
||||
}
|
||||
|
||||
@@ -1452,7 +1452,7 @@ int bus_cgroup_set_property(
|
||||
|
||||
p = cgroup_device_policy_from_string(policy);
|
||||
if (p < 0)
|
||||
return -EINVAL;
|
||||
return p;
|
||||
|
||||
if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
|
||||
c->device_policy = p;
|
||||
|
||||
+2
-2
@@ -2762,14 +2762,14 @@ static int service_deserialize_exec_command(
|
||||
case STATE_EXEC_COMMAND_TYPE:
|
||||
id = service_exec_command_from_string(arg);
|
||||
if (id < 0)
|
||||
return -EINVAL;
|
||||
return id;
|
||||
|
||||
state = STATE_EXEC_COMMAND_INDEX;
|
||||
break;
|
||||
case STATE_EXEC_COMMAND_INDEX:
|
||||
r = safe_atou(arg, &idx);
|
||||
if (r < 0)
|
||||
return -EINVAL;
|
||||
return r;
|
||||
|
||||
state = STATE_EXEC_COMMAND_PATH;
|
||||
break;
|
||||
|
||||
+5
-6
@@ -82,17 +82,16 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
case ARG_VERSION:
|
||||
return version();
|
||||
|
||||
case ARG_SUFFIX:
|
||||
|
||||
if (unit_type_from_string(optarg) < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Invalid unit suffix type %s.", optarg);
|
||||
case ARG_SUFFIX: {
|
||||
UnitType t = unit_type_from_string(optarg);
|
||||
if (t < 0)
|
||||
return log_error_errno(t, "Invalid unit suffix type \"%s\".", optarg);
|
||||
|
||||
arg_suffix = optarg;
|
||||
break;
|
||||
}
|
||||
|
||||
case ARG_TEMPLATE:
|
||||
|
||||
if (!unit_name_is_valid(optarg, UNIT_NAME_TEMPLATE))
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Template name %s is not valid.", optarg);
|
||||
|
||||
@@ -888,7 +888,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
|
||||
if (value) {
|
||||
m = volatile_mode_from_string(value);
|
||||
if (m < 0)
|
||||
log_warning("Failed to parse systemd.volatile= argument: %s", value);
|
||||
log_warning_errno(m, "Failed to parse systemd.volatile= argument: %s", value);
|
||||
else
|
||||
arg_volatile_mode = m;
|
||||
} else
|
||||
|
||||
+1
-1
@@ -2393,7 +2393,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
l = rlimit_from_string_harder(field);
|
||||
if (l < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown resource limit type: %s", field);
|
||||
return log_error_errno(l, "Unknown resource limit type: %s", field);
|
||||
|
||||
if (isempty(eq + 1)) {
|
||||
/* Remove only the specific rlimit */
|
||||
|
||||
@@ -961,16 +961,14 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
case ARG_SPLIT_MODE:
|
||||
arg_split_mode = journal_write_split_mode_from_string(optarg);
|
||||
if (arg_split_mode == _JOURNAL_WRITE_SPLIT_INVALID)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Invalid split mode: %s", optarg);
|
||||
return log_error_errno(arg_split_mode, "Invalid split mode: %s", optarg);
|
||||
break;
|
||||
|
||||
case ARG_COMPRESS:
|
||||
if (optarg) {
|
||||
r = parse_boolean(optarg);
|
||||
if (r < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to parse --compress= parameter.");
|
||||
return log_error_errno(r, "Failed to parse --compress= parameter.");
|
||||
|
||||
arg_compress = !!r;
|
||||
} else
|
||||
|
||||
@@ -565,7 +565,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
arg_output = output_mode_from_string(optarg);
|
||||
if (arg_output < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown output format '%s'.", optarg);
|
||||
return log_error_errno(arg_output, "Unknown output format '%s'.", optarg);
|
||||
|
||||
if (IN_SET(arg_output, OUTPUT_EXPORT, OUTPUT_JSON, OUTPUT_JSON_PRETTY, OUTPUT_JSON_SSE, OUTPUT_JSON_SEQ, OUTPUT_CAT))
|
||||
arg_quiet = true;
|
||||
@@ -835,7 +835,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
to = log_level_from_string(dots + 2);
|
||||
|
||||
if (from < 0 || to < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
return log_error_errno(from < 0 ? from : to,
|
||||
"Failed to parse log level range %s", optarg);
|
||||
|
||||
arg_priorities = 0;
|
||||
@@ -853,8 +853,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
p = log_level_from_string(optarg);
|
||||
if (p < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Unknown log level %s", optarg);
|
||||
return log_error_errno(p, "Unknown log level %s", optarg);
|
||||
|
||||
arg_priorities = 0;
|
||||
|
||||
@@ -885,8 +884,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
num = log_facility_unshifted_from_string(fac);
|
||||
if (num < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Bad --facility= argument \"%s\".", fac);
|
||||
return log_error_errno(num, "Bad --facility= argument \"%s\".", fac);
|
||||
|
||||
if (set_ensure_put(&arg_facilities, NULL, INT_TO_PTR(num)) < 0)
|
||||
return log_oom();
|
||||
|
||||
@@ -368,7 +368,7 @@ static int client_context_read_log_level_max(
|
||||
|
||||
ll = log_level_from_string(value);
|
||||
if (ll < 0)
|
||||
return -EINVAL;
|
||||
return ll;
|
||||
|
||||
c->log_level_max = ll;
|
||||
return 0;
|
||||
|
||||
@@ -204,7 +204,7 @@ static int device_set_action(sd_device *device, const char *action) {
|
||||
|
||||
a = device_action_from_string(action);
|
||||
if (a < 0)
|
||||
return -EINVAL;
|
||||
return a;
|
||||
|
||||
r = device_add_property_internal(device, "ACTION", action);
|
||||
if (r < 0)
|
||||
|
||||
@@ -1371,8 +1371,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
arg_output = output_mode_from_string(optarg);
|
||||
if (arg_output < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Unknown output '%s'.", optarg);
|
||||
return log_error_errno(arg_output, "Unknown output '%s'.", optarg);
|
||||
|
||||
if (OUTPUT_MODE_IS_JSON(arg_output))
|
||||
arg_legend = false;
|
||||
@@ -1403,8 +1402,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
arg_signal = signal_from_string(optarg);
|
||||
if (arg_signal < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to parse signal string %s.", optarg);
|
||||
return log_error_errno(arg_signal, "Failed to parse signal string %s.", optarg);
|
||||
break;
|
||||
|
||||
case 'H':
|
||||
|
||||
@@ -313,7 +313,7 @@ static int network_set_dhcp_type(Context *context, const char *ifname, const cha
|
||||
|
||||
t = dracut_dhcp_type_from_string(dhcp_type);
|
||||
if (t < 0)
|
||||
return -EINVAL;
|
||||
return t;
|
||||
|
||||
network = network_get(context, ifname);
|
||||
if (!network) {
|
||||
|
||||
@@ -1754,7 +1754,6 @@ int config_parse_duplicate_address_detection(
|
||||
|
||||
Network *network = userdata;
|
||||
_cleanup_(address_free_or_set_invalidp) Address *n = NULL;
|
||||
AddressFamily a;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
@@ -1783,14 +1782,14 @@ int config_parse_duplicate_address_detection(
|
||||
return 0;
|
||||
}
|
||||
|
||||
a = duplicate_address_detection_address_family_from_string(rvalue);
|
||||
AddressFamily a = duplicate_address_detection_address_family_from_string(rvalue);
|
||||
if (a < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL),
|
||||
log_syntax(unit, LOG_WARNING, filename, line, a,
|
||||
"Failed to parse %s=, ignoring: %s", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
n->duplicate_address_detection = a;
|
||||
|
||||
TAKE_PTR(n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -377,7 +377,6 @@ int config_parse_fdb_ntf_flags(
|
||||
|
||||
_cleanup_(fdb_entry_free_or_set_invalidp) FdbEntry *fdb_entry = NULL;
|
||||
Network *network = userdata;
|
||||
NeighborCacheEntryFlags f;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
@@ -390,9 +389,9 @@ int config_parse_fdb_ntf_flags(
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
|
||||
f = fdb_ntf_flags_from_string(rvalue);
|
||||
NeighborCacheEntryFlags f = fdb_ntf_flags_from_string(rvalue);
|
||||
if (f < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL),
|
||||
log_syntax(unit, LOG_WARNING, filename, line, f,
|
||||
"FDB failed to parse AssociatedWith=, ignoring assignment: %s",
|
||||
rvalue);
|
||||
return 0;
|
||||
|
||||
@@ -130,8 +130,7 @@ int link_update_monitor(Link *l) {
|
||||
|
||||
s = link_operstate_from_string(operstate);
|
||||
if (s < 0)
|
||||
ret = log_link_debug_errno(l, SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to parse operational state, ignoring: %m");
|
||||
ret = log_link_debug_errno(l, s, "Failed to parse operational state, ignoring: %m");
|
||||
else
|
||||
l->operational_state = s;
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ static int oci_rlimit_type(const char *name, JsonVariant *v, JsonDispatchFlags f
|
||||
|
||||
t = rlimit_from_string(z);
|
||||
if (t < 0)
|
||||
return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL),
|
||||
return json_log(v, flags, t,
|
||||
"rlimit name unknown: %s", json_variant_string(v));
|
||||
|
||||
*type = t;
|
||||
|
||||
+4
-6
@@ -1280,8 +1280,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
arg_kill_signal = signal_from_string(optarg);
|
||||
if (arg_kill_signal < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Cannot parse signal: %s", optarg);
|
||||
return log_error_errno(arg_kill_signal, "Cannot parse signal: %s", optarg);
|
||||
|
||||
arg_settings_mask |= SETTING_KILL_SIGNAL;
|
||||
break;
|
||||
@@ -1443,8 +1442,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
rl = rlimit_from_string_harder(name);
|
||||
if (rl < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Unknown resource limit: %s", name);
|
||||
return log_error_errno(rl, "Unknown resource limit: %s", name);
|
||||
|
||||
if (!arg_rlimit[rl]) {
|
||||
arg_rlimit[rl] = new0(struct rlimit, 1);
|
||||
@@ -1490,7 +1488,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
arg_resolv_conf = resolv_conf_mode_from_string(optarg);
|
||||
if (arg_resolv_conf < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
return log_error_errno(arg_resolv_conf,
|
||||
"Failed to parse /etc/resolv.conf mode: %s", optarg);
|
||||
|
||||
arg_settings_mask |= SETTING_RESOLV_CONF;
|
||||
@@ -1504,7 +1502,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
arg_timezone = timezone_mode_from_string(optarg);
|
||||
if (arg_timezone < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
return log_error_errno(arg_timezone,
|
||||
"Failed to parse /etc/localtime mode: %s", optarg);
|
||||
|
||||
arg_settings_mask |= SETTING_TIMEZONE;
|
||||
|
||||
@@ -33,7 +33,7 @@ static int managed_oom_mode(const char *name, JsonVariant *v, JsonDispatchFlags
|
||||
|
||||
m = managed_oom_mode_from_string(s);
|
||||
if (m < 0)
|
||||
return json_log(v, flags, SYNTHETIC_ERRNO(EINVAL), "%s is not a valid ManagedOOMMode", s);
|
||||
return json_log(v, flags, m, "%s is not a valid ManagedOOMMode", s);
|
||||
|
||||
*mode = m;
|
||||
return 0;
|
||||
|
||||
+14
-20
@@ -566,8 +566,7 @@ static int resolve_rfc4501(sd_bus *bus, const char *name) {
|
||||
|
||||
r = dns_class_from_string(t);
|
||||
if (r < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Unknown DNS class %s.", t);
|
||||
return log_error_errno(r, "Unknown DNS class %s.", t);
|
||||
|
||||
class = r;
|
||||
|
||||
@@ -595,8 +594,7 @@ static int resolve_rfc4501(sd_bus *bus, const char *name) {
|
||||
|
||||
r = dns_type_from_string(t);
|
||||
if (r < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Unknown DNS type %s.", t);
|
||||
return log_error_errno(r, "Unknown DNS type %s: %m", t);
|
||||
|
||||
type = r;
|
||||
|
||||
@@ -2737,10 +2735,9 @@ static int compat_parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
r = dns_type_from_string(optarg);
|
||||
if (r < 0) {
|
||||
log_error("Failed to parse RR record type %s", optarg);
|
||||
return r;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse RR record type %s: %m", optarg);
|
||||
|
||||
arg_type = (uint16_t) r;
|
||||
assert((int) arg_type == r);
|
||||
|
||||
@@ -2754,10 +2751,9 @@ static int compat_parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
r = dns_class_from_string(optarg);
|
||||
if (r < 0) {
|
||||
log_error("Failed to parse RR record class %s", optarg);
|
||||
return r;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse RR record class %s: %m", optarg);
|
||||
|
||||
arg_class = (uint16_t) r;
|
||||
assert((int) arg_class == r);
|
||||
|
||||
@@ -3024,10 +3020,9 @@ static int native_parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
r = dns_type_from_string(optarg);
|
||||
if (r < 0) {
|
||||
log_error("Failed to parse RR record type %s", optarg);
|
||||
return r;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse RR record type %s: %m", optarg);
|
||||
|
||||
arg_type = (uint16_t) r;
|
||||
assert((int) arg_type == r);
|
||||
|
||||
@@ -3040,10 +3035,9 @@ static int native_parse_argv(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
r = dns_class_from_string(optarg);
|
||||
if (r < 0) {
|
||||
log_error("Failed to parse RR record class %s", optarg);
|
||||
return r;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to parse RR record class %s: %m", optarg);
|
||||
|
||||
arg_class = (uint16_t) r;
|
||||
assert((int) arg_class == r);
|
||||
|
||||
|
||||
@@ -427,11 +427,11 @@ static int json_dispatch_rlimits(const char *name, JsonVariant *variant, JsonDis
|
||||
|
||||
p = startswith(key, "RLIMIT_");
|
||||
if (!p)
|
||||
l = -1;
|
||||
l = -SYNTHETIC_ERRNO(EINVAL);
|
||||
else
|
||||
l = rlimit_from_string(p);
|
||||
if (l < 0)
|
||||
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Resource limit '%s' not known.", key);
|
||||
return json_log(variant, flags, l, "Resource limit '%s' not known.", key);
|
||||
|
||||
if (!json_variant_is_object(value))
|
||||
return json_log(value, flags, SYNTHETIC_ERRNO(EINVAL), "Resource limit '%s' has invalid value.", key);
|
||||
@@ -661,7 +661,7 @@ int json_dispatch_user_disposition(const char *name, JsonVariant *variant, JsonD
|
||||
|
||||
k = user_disposition_from_string(json_variant_string(variant));
|
||||
if (k < 0)
|
||||
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Disposition type '%s' not known.", json_variant_string(variant));
|
||||
return json_log(variant, flags, k, "Disposition type '%s' not known.", json_variant_string(variant));
|
||||
|
||||
*disposition = k;
|
||||
return 0;
|
||||
@@ -680,7 +680,7 @@ static int json_dispatch_storage(const char *name, JsonVariant *variant, JsonDis
|
||||
|
||||
k = user_storage_from_string(json_variant_string(variant));
|
||||
if (k < 0)
|
||||
return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Storage type '%s' not known.", json_variant_string(variant));
|
||||
return json_log(variant, flags, k, "Storage type '%s' not known.", json_variant_string(variant));
|
||||
|
||||
*storage = k;
|
||||
return 0;
|
||||
|
||||
@@ -27,7 +27,7 @@ int query_volatile_mode(VolatileMode *ret) {
|
||||
|
||||
m = volatile_mode_from_string(mode);
|
||||
if (m < 0)
|
||||
return -EINVAL;
|
||||
return m;
|
||||
|
||||
*ret = m;
|
||||
} else
|
||||
|
||||
@@ -30,9 +30,9 @@ static int log_setting_internal(sd_bus *bus, const BusLocator* bloc, const char
|
||||
|
||||
if (value) {
|
||||
if (level) {
|
||||
if (log_level_from_string(value) < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"\"%s\" is not a valid log level.", value);
|
||||
r = log_level_from_string(value);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "\"%s\" is not a valid log level.", value);
|
||||
}
|
||||
|
||||
r = bus_set_property(bus, bloc,
|
||||
|
||||
@@ -2040,8 +2040,7 @@ int show(int argc, char *argv[], void *userdata) {
|
||||
|
||||
show_mode = systemctl_show_mode_from_string(argv[0]);
|
||||
if (show_mode < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Invalid argument.");
|
||||
return log_error_errno(show_mode, "Invalid argument.");
|
||||
|
||||
if (show_mode == SYSTEMCTL_SHOW_HELP && argc <= 1)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
|
||||
@@ -143,7 +143,7 @@ int get_state_one_unit(sd_bus *bus, const char *unit, UnitActiveState *ret_activ
|
||||
|
||||
state = unit_active_state_from_string(buf);
|
||||
if (state < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid unit state '%s' for: %s", buf, unit);
|
||||
return log_error_errno(state, "Invalid unit state '%s' for: %s", buf, unit);
|
||||
|
||||
*ret_active_state = state;
|
||||
return 0;
|
||||
|
||||
@@ -132,7 +132,7 @@ static int run(int argc, char *argv[]) {
|
||||
/* The kernel command line always wins. However if nothing was set there, the argument passed here wins instead. */
|
||||
m = volatile_mode_from_string(argv[1]);
|
||||
if (m < 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Couldn't parse volatile mode: %s", argv[1]);
|
||||
return log_error_errno(m, "Couldn't parse volatile mode: %s", argv[1]);
|
||||
}
|
||||
|
||||
if (argc < 3)
|
||||
|
||||
Reference in New Issue
Block a user