diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-07-28 12:37:31 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-07-29 15:54:53 +0200 |
commit | 2e2ed88062fcd4fbe138a5198a979ccdea4fb11c (patch) | |
tree | 00640d95bae9468df9d07003059a8570953f69a5 /src/core/load-fragment.c | |
parent | 62b21e2e89b68f0a1fb209e6677c61fdb4c32b34 (diff) | |
download | systemd-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.c | 28 |
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."); |