diff options
Diffstat (limited to 'src/libsystemd/sd-daemon/sd-daemon.c')
-rw-r--r-- | src/libsystemd/sd-daemon/sd-daemon.c | 48 |
1 files changed, 22 insertions, 26 deletions
diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c index 46241f77ff..1f2a53393f 100644 --- a/src/libsystemd/sd-daemon/sd-daemon.c +++ b/src/libsystemd/sd-daemon/sd-daemon.c @@ -491,39 +491,35 @@ _public_ int sd_booted(void) { } _public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) { - const char *e; + const char *s, *p = ""; /* p is set to dummy value to do unsetting */ uint64_t u; - pid_t pid; - int r; + int r = 0; - e = getenv("WATCHDOG_PID"); - if (!e) { - r = 0; + s = getenv("WATCHDOG_USEC"); + if (!s) goto finish; - } - r = parse_pid(e, &pid); + r = safe_atou64(s, &u); if (r < 0) goto finish; - - /* Is this for us? */ - if (getpid() != pid) { - r = 0; - goto finish; - } - - e = getenv("WATCHDOG_USEC"); - if (!e) { + if (u <= 0) { r = -EINVAL; goto finish; } - r = safe_atou64(e, &u); - if (r < 0) - goto finish; - if (u <= 0) { - r = -EINVAL; - goto finish; + p = getenv("WATCHDOG_PID"); + if (p) { + pid_t pid; + + r = parse_pid(p, &pid); + if (r < 0) + goto finish; + + /* Is this for us? */ + if (getpid() != pid) { + r = 0; + goto finish; + } } if (usec) @@ -532,10 +528,10 @@ _public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) { r = 1; finish: - if (unset_environment) { - unsetenv("WATCHDOG_PID"); + if (unset_environment && s) unsetenv("WATCHDOG_USEC"); - } + if (unset_environment && p) + unsetenv("WATCHDOG_PID"); return r; } |