aboutsummaryrefslogblamecommitdiffstats
path: root/libcoopgamma_get_pid_file.c
blob: 45afd1be8d93a2a08f4a11333a36bd01d2cc1f63 (plain) (tree)


































                                                                                 
/* 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;
}