aboutsummaryrefslogtreecommitdiffstats
path: root/doc/examples/daemon-depedencies/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'doc/examples/daemon-depedencies/init.c')
-rw-r--r--doc/examples/daemon-depedencies/init.c127
1 files changed, 0 insertions, 127 deletions
diff --git a/doc/examples/daemon-depedencies/init.c b/doc/examples/daemon-depedencies/init.c
deleted file mode 100644
index b7182c6..0000000
--- a/doc/examples/daemon-depedencies/init.c
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <bus.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-#define t(stmt) if (stmt) goto fail
-
-
-static char msg[BUS_MEMORY_SIZE];
-static int argc;
-static char **argv;
-static char arg[4098];
-
-
-static void
-start_daemons()
-{
- int i;
- for (i = 1; i < argc; i++)
- if (fork() == 0)
- execl("./start-daemon", "./start-daemon", argv[i], NULL);
-}
-
-
-static int
-callback(const char *message, void *user_data)
-{
- pid_t pid;
- char *arg2;
- char *arg3;
- if (!message) {
- pid = fork();
- t(pid == -1);
- if (pid == 0) {
- if (fork() == 0) {
- start_daemons();
- }
- exit(0);
- } else {
- (void) waitpid(pid, NULL, 0); /* Let's pretend everything will go swimmingly. */
- }
- return 1;
- }
-
- strncpy(msg, message, BUS_MEMORY_SIZE - 1);
- msg[BUS_MEMORY_SIZE - 1] = 0;
-
- pid = fork();
- t(pid == -1);
-
- if (pid == 0) {
- if (fork() == 0) {
- arg2 = strchr(msg, ' ');
- if (arg2 == NULL)
- exit(0);
- arg3 = strchr(++arg2, ' ');
- if (arg3 == NULL)
- exit(0);
- *arg3++ = 0;
- if (!strcmp(arg2, "require")) {
- execl("./start-daemon", "./start-daemon", arg3, NULL);
- } else if (!strcmp(arg2, "awaiting-started")) {
- execl("./test-daemon", "./test-daemon", arg3, "started", NULL);
- } else if (!strcmp(arg2, "awaiting-ready") || !strcmp(arg2, "awaiting")) {
- execl("./test-daemon", "./test-daemon", arg3, "ready", NULL);
- } else if (!strcmp(arg2, "started")) {
- sprintf(arg,
- "grep '^%s\\$' < \"${XDG_RUNTIME_DIR}/started-daemons\" >/dev/null || "
- "echo %s >> \"${XDG_RUNTIME_DIR}/started-daemons\"",
- arg3, arg3);
- execlp("sh", "sh", "-c", arg, NULL);
- } else if (!strcmp(arg2, "ready")) {
- sprintf(arg,
- "grep '^%s\\$' < \"${XDG_RUNTIME_DIR}/ready-daemons\" >/dev/null || "
- "echo %s >> \"${XDG_RUNTIME_DIR}/ready-daemons\"",
- arg3, arg3);
- execlp("sh", "sh", "-c", arg, NULL);
- }
- }
- exit(0);
- } else {
- (void) waitpid(pid, NULL, 0); /* Let's pretend everything will go swimmingly. */
- }
-
- return 1;
- (void) user_data;
-
-fail:
- perror("init");
- return -1;
-}
-
-
-int
-main(int argc_, char *argv_[])
-{
- char *bus_address = NULL;
- bus_t bus;
- argv = argv_;
- argc = argc_;
- if (argc < 2) {
- fprintf(stderr, "USAGE: %s daemon...\n", *argv);
- return 1;
- }
- t(setenv("XDG_RUNTIME_DIR", "./run", 1)); /* Real init systems with not have the period. */
- system("mkdir -p -- \"${XDG_RUNTIME_DIR}\"");
- system("truncate -s 0 -- \"${XDG_RUNTIME_DIR}/started-daemons\"");
- system("truncate -s 0 -- \"${XDG_RUNTIME_DIR}/ready-daemons\"");
- t(bus_create(NULL, 1, &bus_address));
- fprintf(stderr, "\033[00;01;31mexport BUS_INIT=%s\033[00m\n", bus_address);
- fprintf(stderr, "\033[00;31mexport XDG_RUNTIME_DIR=./run\033[00m\n");
- t(setenv("BUS_INIT", bus_address, 1));
- t(bus_open(&bus, bus_address, BUS_RDONLY));
- t(bus_read(&bus, callback, NULL));
- bus_close(&bus);
- free(bus_address);
- return 0;
-
-fail:
- perror("init");
- bus_close(&bus);
- free(bus_address);
- return 1;
-}
-