From 567bf445bf188ae60056e779927da52dcd7ed35d Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 15 Aug 2015 16:39:52 +0200 Subject: unix/Daemon: move code to ReadPidFile() --- src/unix/Daemon.cxx | 14 ++------------ src/unix/PidFile.hxx | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/unix/Daemon.cxx b/src/unix/Daemon.cxx index 4bb11aeac..d16de8928 100644 --- a/src/unix/Daemon.cxx +++ b/src/unix/Daemon.cxx @@ -65,25 +65,15 @@ static int detach_fd = -1; void daemonize_kill(void) { - FILE *fp; - int pid; - if (pidfile.IsNull()) FatalError("no pid_file specified in the config file"); - fp = FOpen(pidfile, PATH_LITERAL("r")); - if (fp == nullptr) { - const std::string utf8 = pidfile.ToUTF8(); - FormatFatalSystemError("Unable to open pid file \"%s\"", - utf8.c_str()); - } - - if (fscanf(fp, "%i", &pid) != 1) { + const pid_t pid = ReadPidFile(pidfile); + if (pid < 0) { const std::string utf8 = pidfile.ToUTF8(); FormatFatalError("unable to read the pid from file \"%s\"", utf8.c_str()); } - fclose(fp); if (kill(pid, SIGTERM) < 0) FormatFatalSystemError("unable to kill process %i", diff --git a/src/unix/PidFile.hxx b/src/unix/PidFile.hxx index 3c3d5ca21..a8af1e890 100644 --- a/src/unix/PidFile.hxx +++ b/src/unix/PidFile.hxx @@ -82,4 +82,20 @@ public: } }; +gcc_pure +static inline pid_t +ReadPidFile(Path path) +{ + FILE *fp = FOpen(path, PATH_LITERAL("r")); + if (fp == nullptr) + return -1; + + int pid; + if (fscanf(fp, "%i", &pid) != 1) + pid = -1; + + fclose(fp); + return pid; +} + #endif -- cgit v1.2.3