passt, util: Move opening of PID file to its own function

We won't call it from main() any longer: move it.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
This commit is contained in:
Stefano Brivio 2024-05-22 19:50:58 +02:00
parent 57d8aa8ffe
commit ba23b05545
3 changed files with 25 additions and 9 deletions

11
passt.c
View file

@ -199,7 +199,7 @@ void exit_handler(int signal)
*/ */
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int nfds, i, devnull_fd = -1, pidfile_fd = -1; int nfds, i, devnull_fd = -1, pidfile_fd;
struct epoll_event events[EPOLL_EVENTS]; struct epoll_event events[EPOLL_EVENTS];
char *log_name, argv0[PATH_MAX], *name; char *log_name, argv0[PATH_MAX], *name;
struct ctx c = { 0 }; struct ctx c = { 0 };
@ -299,14 +299,7 @@ int main(int argc, char **argv)
} }
} }
if (*c.pid_file) { pidfile_fd = pidfile_open(c.pid_file);
if ((pidfile_fd = open(c.pid_file,
O_CREAT | O_TRUNC | O_WRONLY | O_CLOEXEC,
S_IRUSR | S_IWUSR)) < 0) {
perror("PID file open");
exit(EXIT_FAILURE);
}
}
if (isolate_prefork(&c)) if (isolate_prefork(&c))
die("Failed to sandbox process, exiting"); die("Failed to sandbox process, exiting");

22
util.c
View file

@ -402,6 +402,28 @@ void pidfile_write(int fd, pid_t pid)
close(fd); close(fd);
} }
/**
* pidfile_open() - Open PID file if needed
* @path: Path for PID file, empty string if no PID file is requested
*
* Return: descriptor for PID file, -1 if path is NULL, won't return on failure
*/
int pidfile_open(const char *path)
{
int fd;
if (!*path)
return -1;
if ((fd = open(path, O_CREAT | O_TRUNC | O_WRONLY | O_CLOEXEC,
S_IRUSR | S_IWUSR)) < 0) {
perror("PID file open");
exit(EXIT_FAILURE);
}
return fd;
}
/** /**
* __daemon() - daemon()-like function writing PID file before parent exits * __daemon() - daemon()-like function writing PID file before parent exits
* @pidfile_fd: Open PID file descriptor * @pidfile_fd: Open PID file descriptor

1
util.h
View file

@ -156,6 +156,7 @@ char *line_read(char *buf, size_t len, int fd);
void ns_enter(const struct ctx *c); void ns_enter(const struct ctx *c);
bool ns_is_init(void); bool ns_is_init(void);
int open_in_ns(const struct ctx *c, const char *path, int flags); int open_in_ns(const struct ctx *c, const char *path, int flags);
int pidfile_open(const char *path);
void pidfile_write(int fd, pid_t pid); void pidfile_write(int fd, pid_t pid);
int __daemon(int pidfile_fd, int devnull_fd); int __daemon(int pidfile_fd, int devnull_fd);
int fls(unsigned long x); int fls(unsigned long x);