summaryrefslogtreecommitdiff
path: root/libs/IO/src/ConfigReader.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/IO/src/ConfigReader.cc')
-rw-r--r--libs/IO/src/ConfigReader.cc64
1 files changed, 64 insertions, 0 deletions
diff --git a/libs/IO/src/ConfigReader.cc b/libs/IO/src/ConfigReader.cc
new file mode 100644
index 0000000..152c908
--- /dev/null
+++ b/libs/IO/src/ConfigReader.cc
@@ -0,0 +1,64 @@
+/**
+ * ======================== legal notice ======================
+ *
+ * File: ConfigReader.cc
+ * Created: 28. Juli 2012, 18:41
+ * Author: <a href="mailto:geronimo013@gmx.de">Geronimo</a>
+ * Project: libIO: classes for files, filesystem and input/output
+ *
+ * CMP - compound media player
+ *
+ * is a client/server mediaplayer intended to play any media from any workstation
+ * without the need to export or mount shares. cmps is an easy to use backend
+ * with a (ready to use) HTML-interface. Additionally the backend supports
+ * authentication via HTTP-digest authorization.
+ * cmpc is a client with vdr-like osd-menues.
+ *
+ * Copyright (c) 2012 Reinhard Mantey, some rights reserved!
+ * published under Creative Commons by-sa
+ * For details see http://creativecommons.org/licenses/by-sa/3.0/
+ *
+ * The cmp project's homepage is at http://projects.vdr-developer.org/projects/cmp
+ *
+ * --------------------------------------------------------------
+ */
+#include <ConfigReader.h>
+#include <LineReader.h>
+#include <stddef.h>
+#include <pcrecpp.h>
+
+cConfigReader::cConfigReader(cLineReader *LineReader)
+ : reader(LineReader)
+{
+}
+
+cConfigReader::~cConfigReader()
+{
+ Close();
+}
+
+void cConfigReader::Close(void)
+{
+ if (reader) {
+ delete reader;
+ reader = NULL;
+ }
+}
+
+cConfigReader::ConfigEntry *cConfigReader::ReadValue()
+{
+ if (!reader) return NULL;
+ const char *line = reader->ReadLine();
+ static pcrecpp::RE comment("^\\s*#.*$");
+ static pcrecpp::RE emptyLine("^\\s*$");
+ static pcrecpp::RE entry("^\\s*(\\S+)\\s*=\\s*(.+)$");
+ std::string name, value;
+ ConfigEntry *rv = NULL;
+
+ while (line && (comment.FullMatch(line) || emptyLine.FullMatch(line)))
+ line = reader->ReadLine();
+ if (line && entry.FullMatch(line, &name, &value)) {
+ rv = new ConfigEntry(name, value);
+ }
+ return rv;
+}