aboutsummaryrefslogtreecommitdiffstats
path: root/plugin_fifo.c
diff options
context:
space:
mode:
authormichux <michux@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2008-04-12 16:23:52 +0000
committermichux <michux@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2008-04-12 16:23:52 +0000
commit317e100ae6b7f70b3650a9eef5102c93ea5c7d77 (patch)
tree544c220d1267f34b9ddf2c60c4be2d08b7841bdc /plugin_fifo.c
parent1780538c9814f3852f7816900a9b3f89b8cd69d9 (diff)
downloadlcd4linux-317e100ae6b7f70b3650a9eef5102c93ea5c7d77.tar.gz
clean up
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@871 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'plugin_fifo.c')
-rw-r--r--plugin_fifo.c359
1 files changed, 188 insertions, 171 deletions
diff --git a/plugin_fifo.c b/plugin_fifo.c
index 12a9374..fc3f77f 100644
--- a/plugin_fifo.c
+++ b/plugin_fifo.c
@@ -1,180 +1,197 @@
-/* $Id$
- * $URL$
- *
- * plugin template
- *
- * Copyright (C) 2008 Michael Vogt <michu@neophob.com>
- * Copyright (C) 2004, 2005, 2006, 2007, 2008 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
- *
- * This file is part of LCD4Linux.
- *
- * LCD4Linux is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * LCD4Linux is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-/*
- * Quick fifo hack for lcd4linux
- *
- * most code is ripped ...
- *
- */
-
-/* define the include files you need */
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-/* these should always be included */
-#include "debug.h"
-#include "plugin.h"
-#include "cfg.h"
-
-#ifdef WITH_DMALLOC
-#include <dmalloc.h>
-#endif /* */
-
-#define FIFO_BUFFER_SIZE 80
- typedef struct _FifoData {
- char *path;
- int input;
- int created;
- } FifoData;
- static char Section[] = "Plugin:FIFO";
- static FifoData fd;
- static char msg[FIFO_BUFFER_SIZE];
- static char fifopath[1024];
- static void configure_fifo(void)
+/* $Id$
+ * $URL$
+ *
+ * plugin template
+ *
+ * Copyright (C) 2008 Michael Vogt <michu@neophob.com>
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/*
+ * Quick fifo hack for lcd4linux
+ *
+ * most code is ripped ...
+ *
+ */
+
+/* define the include files you need */
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* these should always be included */
+#include "debug.h"
+#include "plugin.h"
+#include "cfg.h"
+
+#ifdef WITH_DMALLOC
+#include <dmalloc.h>
+#endif
+
+#define FIFO_BUFFER_SIZE 80
+
+typedef struct _FifoData {
+ char *path;
+ int input;
+ int created;
+} FifoData;
+
+static char Section[] = "Plugin:FIFO";
+static FifoData fd;
+static char msg[FIFO_BUFFER_SIZE];
+static char fifopath[1024];
+
+
+static void configure_fifo(void)
{
- char *s;
- s = cfg_get(Section, "fifopath", "/tmp/lcd4linux.fifo");
- if (*s == '\0') {
- info("[FIFO] empty '%s.fifopath' entry from %s, assuming '/tmp/lcd4linux.fifo'", Section, cfg_source());
- strcpy(fifopath, "/tmp/lcd4linux.fifo");
- } else
- strcpy(fifopath, s);
- free(s);
- }
- static void removeFifo()
+ char *s;
+ s = cfg_get(Section, "fifopath", "/tmp/lcd4linux.fifo");
+ if (*s == '\0') {
+ info("[FIFO] empty '%s.fifopath' entry from %s, assuming '/tmp/lcd4linux.fifo'", Section, cfg_source());
+ strcpy(fifopath, "/tmp/lcd4linux.fifo");
+ } else
+ strcpy(fifopath, s);
+ free(s);
+}
+
+
+static void removeFifo()
{
- debug("Removing FIFO \"%s\"\n", fd.path);
- if (unlink(fd.path) < 0) {
- error("Could not remove FIFO \"%s\": %s\n", fd.path, strerror(errno));
- return;
- }
- fd.created = 0;
- }
- static void closeFifo()
+ debug("Removing FIFO \"%s\"\n", fd.path);
+ if (unlink(fd.path) < 0) {
+ error("Could not remove FIFO \"%s\": %s\n", fd.path, strerror(errno));
+ return;
+ }
+ fd.created = 0;
+}
+
+
+static void closeFifo()
{
- struct stat st;
- if (fd.input >= 0) {
- close(fd.input);
- fd.input = -1;
- }
- if (fd.created && (stat(fd.path, &st) == 0))
- removeFifo(fd);
- }
- static int makeFifo()
+ struct stat st;
+ if (fd.input >= 0) {
+ close(fd.input);
+ fd.input = -1;
+ }
+ if (fd.created && (stat(fd.path, &st) == 0))
+ removeFifo(fd);
+}
+
+static int makeFifo()
{
- if (mkfifo(fd.path, 0666) < 0) {
- error("Couldn't create FIFO \"%s\": %s\n", fd.path, strerror(errno));
- return -1;
- }
- fd.created = 1;
- return 0;
- }
- static int checkFifo()
+ if (mkfifo(fd.path, 0666) < 0) {
+ error("Couldn't create FIFO \"%s\": %s\n", fd.path, strerror(errno));
+ return -1;
+ }
+ fd.created = 1;
+ return 0;
+}
+
+
+static int checkFifo()
{
- struct stat st;
- if (stat(fd.path, &st) < 0) {
- if (errno == ENOENT) {
-
- /* Path doesn't exist */
- return makeFifo(fd);
- }
- error("Failed to stat FIFO \"%s\": %s\n", fd.path, strerror(errno));
- return -1;
- }
- if (!S_ISFIFO(st.st_mode)) {
- error("\"%s\" already exists, but is not a FIFO\n", fd.path);
- return -1;
- }
- return 0;
- }
- static int openFifo()
+ struct stat st;
+ if (stat(fd.path, &st) < 0) {
+ if (errno == ENOENT) {
+
+ /* Path doesn't exist */
+ return makeFifo(fd);
+ }
+ error("Failed to stat FIFO \"%s\": %s\n", fd.path, strerror(errno));
+ return -1;
+ }
+ if (!S_ISFIFO(st.st_mode)) {
+ error("\"%s\" already exists, but is not a FIFO\n", fd.path);
+ return -1;
+ }
+ return 0;
+}
+
+
+static int openFifo()
{
- if (checkFifo() < 0)
- return -1;
- fd.input = open(fd.path, O_RDONLY | O_NONBLOCK);
- if (fd.input < 0) {
- error("Could not open FIFO \"%s\" for reading: %s\n", fd.path, strerror(errno));
- closeFifo();
- return -1;
- }
- return 0;
- }
- static void fiforead(RESULT * result)
+ if (checkFifo() < 0)
+ return -1;
+ fd.input = open(fd.path, O_RDONLY | O_NONBLOCK);
+ if (fd.input < 0) {
+ error("Could not open FIFO \"%s\" for reading: %s\n", fd.path, strerror(errno));
+ closeFifo();
+ return -1;
+ }
+ return 0;
+}
+
+
+static void fiforead(RESULT * result)
{
- char buf[FIFO_BUFFER_SIZE];
- int i, 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)
- bytes = read(fd.input, buf, FIFO_BUFFER_SIZE);
- if (bytes < 0) {
- error("[FIFO] Error %i: %s\n", errno, strerror(errno));
- } else {
- if (strlen(buf) > 0) {
- strcpy(msg, buf);
- }
- for (i = 0; i < strlen(buf); i++) {
- if (msg[i] < 0x20)
- msg[i] = ' ';
- }
- }
- }
-
- /* store result */
- SetResult(&result, R_STRING, msg);
- }
-
-
-/* plugin initialization */
-int plugin_init_fifo(void)
+ char buf[FIFO_BUFFER_SIZE];
+ int i, 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)
+ bytes = read(fd.input, buf, FIFO_BUFFER_SIZE);
+ if (bytes < 0) {
+ error("[FIFO] Error %i: %s\n", errno, strerror(errno));
+ } else {
+ if (strlen(buf) > 0) {
+ strcpy(msg, buf);
+ }
+ for (i = 0; i < strlen(buf); i++) {
+ if (msg[i] < 0x20)
+ msg[i] = ' ';
+ }
+ }
+ }
+
+ /* store result */
+ SetResult(&result, R_STRING, msg);
+}
+
+
+/* plugin initialization */
+int plugin_init_fifo(void)
{
- configure_fifo();
- fd.path = fifopath;
- fd.input = -1;
- fd.created = 0;
- if (openFifo() < 0) {
- return -1;
- }
- memset(msg, 0, FIFO_BUFFER_SIZE);
- AddFunction("fifo::read", 0, fiforead);
- return 0;
- }
- void plugin_exit_fifo(void)
+ configure_fifo();
+ fd.path = fifopath;
+ fd.input = -1;
+ fd.created = 0;
+ if (openFifo() < 0) {
+ return -1;
+ }
+ memset(msg, 0, FIFO_BUFFER_SIZE);
+ AddFunction("fifo::read", 0, fiforead);
+ return 0;
+}
+
+
+void plugin_exit_fifo(void)
{
-
- /* close filedescriptors */
- closeFifo();
- }
+
+ /* close filedescriptors */
+ closeFifo();
+}