-/* $Id$\r
- * $URL$\r
- *\r
- * plugin template\r
- *\r
- * Copyright (C) 2008 Michael Vogt <michu@neophob.com>\r
- * Copyright (C) 2004, 2005, 2006, 2007, 2008 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>\r
- *\r
- * This file is part of LCD4Linux.\r
- *\r
- * LCD4Linux is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2, or (at your option)\r
- * any later version.\r
- *\r
- * LCD4Linux is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
- *\r
- */ \r
- \r
-/* \r
- * Quick fifo hack for lcd4linux\r
- * \r
- * most code is ripped ...\r
- *\r
- */ \r
- \r\r
-/* define the include files you need */ \r
-#include "config.h"\r
- \r
-#include <stdlib.h>\r
-#include <string.h>\r
-#include <ctype.h>\r
-#include <errno.h>\r
-#include <unistd.h>\r
-#include <fcntl.h>\r
-#include <sys/stat.h>\r
- \r
-/* these should always be included */ \r
-#include "debug.h"\r
-#include "plugin.h"\r
-#include "cfg.h"\r
- \r
-#ifdef WITH_DMALLOC\r
-#include <dmalloc.h>\r
-#endif /* \r */
- \r
-#define FIFO_BUFFER_SIZE 80\r
- \rtypedef struct _FifoData {
- \rchar *path;
- \r int input;
- \r int created;
-\r \r} FifoData;
-\r\rstatic char Section[] = "Plugin:FIFO";
-\r\rstatic FifoData fd;
-\rstatic char msg[FIFO_BUFFER_SIZE];
-\rstatic char fifopath[1024];
-\r\rstatic void configure_fifo(void) \r
+/* $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)
{
- \rchar *s;
- \rs = cfg_get(Section, "fifopath", "/tmp/lcd4linux.fifo");
- \rif (*s == '\0') {
- \rinfo("[FIFO] empty '%s.fifopath' entry from %s, assuming '/tmp/lcd4linux.fifo'", Section, cfg_source());
- \rstrcpy(fifopath, "/tmp/lcd4linux.fifo");
- \r} else
- \rstrcpy(fifopath, s);
- \r\rfree(s);
-\r}
-\r\r\rstatic void removeFifo() \r
+ 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()
{
- \rdebug("Removing FIFO \"%s\"\n", fd.path);
- \r\rif (unlink(fd.path) < 0) {
- \rerror("Could not remove FIFO \"%s\": %s\n", fd.path, strerror(errno));
- \rreturn;
- \r}
- \r\rfd.created = 0;
-\r}
-\r\rstatic void closeFifo() \r
+ 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()
{
- \rstruct stat st;
- \r\rif (fd.input >= 0) {
- \rclose(fd.input);
- \rfd.input = -1;
- \r}
- \r\rif (fd.created && (stat(fd.path, &st) == 0))
- \rremoveFifo(fd);
-\r}
-\r\rstatic int makeFifo() \r
+ 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()
{
- \rif (mkfifo(fd.path, 0666) < 0) {
- \rerror("Couldn't create FIFO \"%s\": %s\n", fd.path, strerror(errno));
- \rreturn -1;
- \r}
- \r\rfd.created = 1;
- \r\rreturn 0;
-\r}
-\r\r\rstatic int checkFifo() \r
+ 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()
{
- \rstruct stat st;
- \rif (stat(fd.path, &st) < 0) {
- \rif (errno == ENOENT) {
- \r
- /* Path doesn't exist */ \r
- return makeFifo(fd);
- \r}
- \r\rerror("Failed to stat FIFO \"%s\": %s\n", fd.path, strerror(errno));
- \rreturn -1;
- \r}
- \r\rif (!S_ISFIFO(st.st_mode)) {
- \rerror("\"%s\" already exists, but is not a FIFO\n", fd.path);
- \rreturn -1;
- \r}
- \r\rreturn 0;
-\r}
-\r\rstatic int openFifo() \r
+ 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()
{
- \rif (checkFifo() < 0)
- \rreturn -1;
- \r\rfd.input = open(fd.path, O_RDONLY | O_NONBLOCK);
- \rif (fd.input < 0) {
- \rerror("Could not open FIFO \"%s\" for reading: %s\n", fd.path, strerror(errno));
- \rcloseFifo();
- \rreturn -1;
- \r}
- \r\rreturn 0;
-\r}
-\r\rstatic void fiforead(RESULT * result) \r
+ 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)
{
- \rchar buf[FIFO_BUFFER_SIZE];
- \rint i, bytes = 1;
- \rmemset(buf, 0, FIFO_BUFFER_SIZE);
- \r\rstrcat(buf, "ERROR");
- \rif (checkFifo() == 0) {
- \rmemset(buf, 0, FIFO_BUFFER_SIZE);
- \rwhile (bytes > 0 && errno != EINTR)
- \rbytes = read(fd.input, buf, FIFO_BUFFER_SIZE);
- \r\rif (bytes < 0) {
- \rerror("[FIFO] Error %i: %s\n", errno, strerror(errno));
- \r} else {
- \r\rif (strlen(buf) > 0) {
- \rstrcpy(msg, buf);
- \r}
- \r\rfor (i = 0; i < strlen(buf); i++) {
- \rif (msg[i] < 0x20)
- \rmsg[i] = ' ';
- \r}
- \r}
- \r}
- \r\r
- /* store result */ \r
- SetResult(&result, R_STRING, msg);
-\r}
-
-\r\r
-/* plugin initialization */ \r
-int plugin_init_fifo(void) \r
+ 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)
{
- \rconfigure_fifo();
- \r\rfd.path = fifopath;
- \rfd.input = -1;
- \rfd.created = 0;
- \r\rif (openFifo() < 0) {
- \rreturn -1;
- \r}
- \r\rmemset(msg, 0, FIFO_BUFFER_SIZE);
- \rAddFunction("fifo::read", 0, fiforead);
- \r\rreturn 0;
-\r}
-\r\rvoid plugin_exit_fifo(void) \r
+ 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)
{
- \r
- /* close filedescriptors */ \r
- closeFifo();
-\r} \r
+
+ /* close filedescriptors */
+ closeFifo();
+}