Fix calculation of buffer size for LISTEN_FDS environment variable.
authorDavin McCall <davmac@davmac.org>
Sat, 18 Jun 2016 17:05:01 +0000 (18:05 +0100)
committerDavin McCall <davmac@davmac.org>
Sat, 18 Jun 2016 17:05:01 +0000 (18:05 +0100)
(Fortunately, it still gave the correct result in all expected cases).

src/service.cc

index 770f8759429d8ab8a2e12bbe0ae4a9393317c5b3..b81c323964a0bf55ceb14590574c451c7f6d7685 100644 (file)
@@ -682,8 +682,10 @@ bool ServiceRecord::start_ps_process(const std::vector<const char *> &cmd, bool
         sigaddset(&sigwait_set, SIGTERM);
         sigprocmask(SIG_UNBLOCK, &sigwait_set, NULL);
 
-        constexpr int bufsz = ((CHAR_BIT * sizeof(pid_t) - 1) / 3 + 2) + 11;
-        // "LISTEN_PID=" - 11 characters
+        constexpr int bufsz = ((CHAR_BIT * sizeof(pid_t)) / 3 + 2) + 11;
+        // "LISTEN_PID=" - 11 characters; the expression above gives a conservative estimate
+        // on the maxiumum number of bytes required for LISTEN=xxx, including nul terminator,
+        // where xxx is a pid_t in decimal (i.e. one decimal digit is worth just over 3 bits).
         char nbuf[bufsz];
 
         if (socket_fd != -1) {