aboutsummaryrefslogtreecommitdiffstats
path: root/libcoopgamma_get_pid_file.c
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2025-02-10 17:50:58 +0100
committerMattias Andrée <m@maandree.se>2025-02-10 17:52:46 +0100
commitec1bcdcd0dd6e196303e8d9a30b3b2740e32c502 (patch)
treedcc759aaf897c915827659e00644f12503cf1268 /libcoopgamma_get_pid_file.c
parentImprove makefile (diff)
downloadlibcoopgamma-ec1bcdcd0dd6e196303e8d9a30b3b2740e32c502.tar.gz
libcoopgamma-ec1bcdcd0dd6e196303e8d9a30b3b2740e32c502.tar.bz2
libcoopgamma-ec1bcdcd0dd6e196303e8d9a30b3b2740e32c502.tar.xz
Minor code improvements and split into multiple c files
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libcoopgamma_get_pid_file.c')
-rw-r--r--libcoopgamma_get_pid_file.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/libcoopgamma_get_pid_file.c b/libcoopgamma_get_pid_file.c
new file mode 100644
index 0000000..45afd1b
--- /dev/null
+++ b/libcoopgamma_get_pid_file.c
@@ -0,0 +1,35 @@
+/* See LICENSE file for copyright and license details. */
+#include "common.h"
+
+
+/**
+ * Get the PID file of the coopgamma server
+ *
+ * SIGCHLD must not be ignored or blocked
+ *
+ * @param method The adjustment method, `NULL` for automatic
+ * @param site The site, `NULL` for automatic
+ * @return The pathname of the server's PID file, `NULL` on error
+ * or if there server does not use PID files. The later
+ * case is detected by checking that `errno` is set to 0.
+ */
+char *
+libcoopgamma_get_pid_file(const char *restrict method, const char *restrict site)
+{
+ char *path;
+ size_t n;
+
+ path = libcoopgamma_get_socket_file(method, site);
+ if (!path)
+ return NULL;
+
+ n = strlen(path);
+ if (n < 7U || strcmp(&path[n - 7U], ".socket")) {
+ free(path);
+ errno = EBADMSG;
+ return NULL;
+ }
+
+ stpcpy(&path[n - 7U], ".pid");
+ return path;
+}