From c34fa6efea48c1db2b44e37607e0991b54c0879b Mon Sep 17 00:00:00 2001 From: michux Date: Tue, 15 Apr 2008 09:50:27 +0000 Subject: add signal handler, improve error check git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@876 3ae390bd-cb1e-0410-b409-cd5a39f66f1f --- plugin_fifo.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'plugin_fifo.c') diff --git a/plugin_fifo.c b/plugin_fifo.c index 59422e5..fda6f0b 100644 --- a/plugin_fifo.c +++ b/plugin_fifo.c @@ -151,16 +151,19 @@ static int openFifo() static void fiforead(RESULT * result) { char buf[FIFO_BUFFER_SIZE]; - int i, bytes = 1; + unsigned int i; + int bytes = 1; memset(buf, 0, FIFO_BUFFER_SIZE); strcat(buf, "ERROR"); + if (checkFifo() == 0) { memset(buf, 0, FIFO_BUFFER_SIZE); - while (bytes > 0 && errno != EINTR) { + + while (bytes > 0 && errno != EINTR) { bytes = read(fd.input, buf, FIFO_BUFFER_SIZE); } - if (bytes < 0) { + if (bytes < 0 || errno > 0) { error("[FIFO] Error %i: %s", errno, strerror(errno)); } else { if (strlen(buf) > 0) { @@ -172,7 +175,6 @@ static void fiforead(RESULT * result) } } } - /* store result */ SetResult(&result, R_STRING, msg); } @@ -188,6 +190,10 @@ int plugin_init_fifo(void) if (openFifo() < 0) { return -1; } + + /* ignore broken pipe */ + signal(SIGPIPE, SIG_IGN); + memset(msg, 0, FIFO_BUFFER_SIZE); AddFunction("fifo::read", 0, fiforead); return 0; -- cgit v1.2.3