10 #include <sys/socket.h>
12 #include <sys/types.h>
17 void Daemon_wrapper(Options * o)
23 bool fill_buffer = false;
25 char c; char last_c = '\n';
26 int fd = open(DAEMON_FIFO, O_WRONLY);
27 while (read(fileno(stdin), &c, sizeof(char)) != 0)
35 //fprintf(stderr, "Buffer is %s", buffer);
36 if (write(fd, buffer, buflen*sizeof(char)) <= 0)
37 error("Daemon_wrapper", "Couldn't write to daemon fifo %s", DAEMON_FIFO);
39 if (strcmp(buffer, "#BARRIER BLOCK#\n") == 0)
41 //fprintf(stderr, "Barrier block received");
42 FILE * f = fopen(DAEMON_BARRIER_FIFO, "r");
44 error("Daemon_wrapper", "Couldn't open daemon barrier fifo %s", DAEMON_BARRIER_FIFO);
45 for (int i = 0; ; ++i)
57 if (strcmp(buffer, "\a") != 0)
58 error("Daemon_wrapper", "Expected to read a single bell from %s; got %s", DAEMON_BARRIER_FIFO, buffer);
60 else if (strcmp(buffer, "#EXIT#\n") == 0)
72 buffer = (char*)(realloc(buffer, bufsiz*sizeof(char)));
74 error("Daemon_wrapper", "Couldn't resize buffer to size %d : %s", bufsiz, strerror(errno));
81 if (c == '#' && last_c == '\n')
85 buffer = (char*)(calloc(bufsiz, sizeof(char)));
87 error("Daemon_wrapper", "Couldn't allocate buffer of size %d : %s", bufsiz, strerror(errno));
93 write(fd, &c, sizeof(char));
100 buffer[buflen++] = '\n';
101 if (write(fd, buffer, buflen*sizeof(char)) <= 0)
102 error("Daemon_wrapper", "Couldn't write to daemon fifo %s (final write)", DAEMON_FIFO);
107 if (write(fd, &c, sizeof(char)) <= 0)
108 error("Daemon_wrapper", "Couldn't write to daemon fifo %s (final write)", DAEMON_FIFO);