From bec93767e683bb3f5de385d250d61ac06d436c29 Mon Sep 17 00:00:00 2001 From: Siraaj Khandkar Date: Sat, 7 Mar 2020 20:18:00 -0500 Subject: [PATCH] Check that file exists and that it is a FIFO 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 | 2 +- x5/khatus.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/x5/Makefile b/x5/Makefile index 5fd735d..571c8ba 100644 --- a/x5/Makefile +++ b/x5/Makefile @@ -1,5 +1,5 @@ EXECUTABLES := khatus -CC := c99-gcc -Wall +CC := $(CC) -Wall .PHONY: \ build \ diff --git a/x5/khatus.c b/x5/khatus.c index a41351a..faef5b1 100644 --- a/x5/khatus.c +++ b/x5/khatus.c @@ -1,6 +1,8 @@ + #include #include #include +#include #include #include @@ -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); -- 2.20.1