summaryrefslogtreecommitdiff
path: root/src/core/load-fragment.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-07-28 12:37:31 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-07-29 15:54:53 +0200
commit2e2ed88062fcd4fbe138a5198a979ccdea4fb11c (patch)
tree00640d95bae9468df9d07003059a8570953f69a5 /src/core/load-fragment.c
parent62b21e2e89b68f0a1fb209e6677c61fdb4c32b34 (diff)
downloadsystemd-2e2ed88062fcd4fbe138a5198a979ccdea4fb11c.tar.gz
pid1,systemctl: allow symbolic exit code names
Diffstat (limited to 'src/core/load-fragment.c')
-rw-r--r--src/core/load-fragment.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index ecea4f526a..8664500e1d 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -3936,33 +3936,33 @@ int config_parse_set_status(
FOREACH_WORD(word, l, rvalue, state) {
_cleanup_free_ char *temp;
- int val;
Bitmap *bitmap;
temp = strndup(word, l);
if (!temp)
return log_oom();
- r = safe_atoi(temp, &val);
- if (r < 0) {
- val = signal_from_string(temp);
+ /* We need to call exit_status_from_string() first, because we want
+ * to parse numbers as exit statuses, not signals. */
- if (val <= 0) {
- log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse value, ignoring: %s", word);
- continue;
- }
- bitmap = &status_set->signal;
+ r = exit_status_from_string(temp);
+ if (r >= 0) {
+ assert(r >= 0 && r < 256);
+ bitmap = &status_set->status;
} else {
- if (val < 0 || val > 255) {
- log_syntax(unit, LOG_ERR, filename, line, 0, "Value %d is outside range 0-255, ignoring", val);
+ r = signal_from_string(temp);
+
+ if (r <= 0) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Failed to parse value, ignoring: %s", word);
continue;
}
- bitmap = &status_set->status;
+ bitmap = &status_set->signal;
}
- r = bitmap_set(bitmap, val);
+ r = bitmap_set(bitmap, r);
if (r < 0)
- return log_oom();
+ return log_error_errno(r, "Failed to set signal or status %s: %m", word);
}
if (!isempty(state))
log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring.");