Check that file exists and that it is a FIFO
authorSiraaj Khandkar <siraaj@khandkar.net>
Sun, 8 Mar 2020 01:18:00 +0000 (20:18 -0500)
committerSiraaj Khandkar <siraaj@khandkar.net>
Sun, 8 Mar 2020 01:23:51 +0000 (20:23 -0500)
apparently lstat() is not compliant with ANSI, so we cannot use C99.
Could use gnu99, but that would make it awfully too specific,
me thinks...

x5/Makefile
x5/khatus.c

index 5fd735d..571c8ba 100644 (file)
@@ -1,5 +1,5 @@
 EXECUTABLES := khatus
-CC          := c99-gcc -Wall
+CC          := $(CC) -Wall
 
 .PHONY: \
   build \
index a41351a..faef5b1 100644 (file)
@@ -1,6 +1,8 @@
+
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/select.h>
+#include <sys/stat.h>
 
 #include <assert.h>
 #include <ctype.h>
@@ -240,6 +242,7 @@ read_one(File *f, char *buf)
 
        b = buf + f->pos;
        memset(b, ' ', f->width);
+       /* TODO: Read upto \n or width */
        while ((n = read(f->fd, b, f->width)) > 0) {
                b += n;
                debug("read %zd from %s\n", n, f->name);
@@ -266,11 +269,17 @@ read_all(Config *cfg, char *buf)
        fd_set fds;
        int maxfd;
        int ready;
+       struct stat st;
 
        FD_ZERO(&fds);
 
-       /* TODO: stat then check TTL */
+       /* TODO: Check TTL */
        for (File *f = cfg->files; f; f = f->next) {
+               /* TODO: Create the FIFO if it doesn't already exist. */
+               if (lstat(f->name, &st) < 0)
+                       fatal("Cannot stat \"%s\". Error: %s\n", f->name, strerror(errno));
+               if (!(st.st_mode & S_IFIFO))
+                       fatal("\"%s\" is not a FIFO\n", f->name);
                debug("opening: %s\n", f->name);
                if (f->fd < 0)
                        f->fd = open(f->name, O_RDONLY | O_NONBLOCK);
This page took 0.022327 seconds and 4 git commands to generate.