aboutsummaryrefslogtreecommitdiffstats
path: root/supervise.c
diff options
context:
space:
mode:
Diffstat (limited to 'supervise.c')
-rw-r--r--supervise.c104
1 files changed, 0 insertions, 104 deletions
diff --git a/supervise.c b/supervise.c
deleted file mode 100644
index 95ede21..0000000
--- a/supervise.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <err.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/file.h>
-#include <sys/wait.h>
-
-char *const run_path[] = { "./run", NULL };
-
-void
-start_proc()
-{
- pid_t p = fork();
- if (p == 0) {
- execv(run_path[0], run_path);
- } else if (p > 0) {
- waitpid(p, NULL, 0);
- } else {
- err(1, "fork()");
- }
-}
-
-int
-acquire_lock()
-{
- int lock_fd;
-
- if ((lock_fd = open("supervise/lock", O_CREAT | O_TRUNC | O_RDONLY, 0600)) == -1)
- err(1, "open()");
-
- if (flock(lock_fd, LOCK_EX | LOCK_NB) == -1) {
- if (errno == EWOULDBLOCK) {
- fprintf(stderr, "Could not acquire lock\n");
- exit(1);
- } else {
- err(1, "flock()");
- }
- }
-
- return lock_fd;
-}
-
-void
-update_status()
-{
- int fd, r;
- unsigned char status[18];
-
- if ((fd = open("supervise/status.new", O_CREAT | O_TRUNC | O_WRONLY | 0644)) == -1) {
- perror("open()");
- return;
- }
-
- if ((r = write(fd, status, sizeof(status))) == -1)
- perror("write()");
-
- if (close(fd) == -1)
- perror("close()");
-
- if (r < sizeof(status)) {
- fprintf(stderr, "Failed to fully write status.new\n");
-
- if (unlink("supervise/status.new") == -1)
- perror("unlink()");
-
- return;
- }
-
- if (rename("supervise/status.new", "supervise/status") == -1)
- perror("rename()");
-}
-
-int
-main(int argc, char **argv)
-{
- int lock_fd;
-
- if (argc != 2)
- errx(1, "Usage: %s <dir>\n", argv[0]);
-
- if (chdir(argv[1]) == -1)
- err(1, "chdir()");
-
- if (mkdir("supervise", 0700) == -1 && errno != EEXIST)
- err(1, "mkdir()");
-
- lock_fd = acquire_lock();
-
- if (mkfifo("supervise/control", 0600) == -1 && errno != EEXIST)
- err(1, "mkfifo()");
-
- if (mkfifo("supervise/ok", 0600) == -1 && errno != EEXIST)
- err(1, "mkfifo()");
-
- start_proc(); /* XXX: Main loop goes here */
-
- if (close(lock_fd) == -1)
- perror("close()");
-
- return 0;
-}