summaryrefslogtreecommitdiffstats
path: root/src/config.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2003-10-22 22:39:09 +0000
committerLennart Poettering <lennart@poettering.net>2003-10-22 22:39:09 +0000
commit6b459521ce990c3e626190f66ece300daae70dac (patch)
treec4300270e776acc711d16b5ab5e7775edea590f7 /src/config.c
create trunk directory and move everything into it
git-svn-id: file:///home/lennart/svn/public/libnewmail/trunk@29 2d4e79f2-dfba-0310-a9f4-9628e67fcdf4
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/config.c b/src/config.c
new file mode 100644
index 0000000..2c45de8
--- /dev/null
+++ b/src/config.c
@@ -0,0 +1,123 @@
+/* $Id$ */
+
+/***
+ This file is part of libnewmail
+
+ libnewmail 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 of the License, or
+ (at your option) any later version.
+
+ libnewmail 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 libnewmail; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+***/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "config.h"
+#include "newmail.h"
+#include "util.h"
+
+config_t* nm_config_open(const char *fn) {
+ config_t* c = NULL;
+ FILE* f = NULL;
+
+ if (!(c = nm_malloc(sizeof(config_t)))) {
+ nm_error(NM_ERROR_MEMORY, NULL);
+ goto fail;
+ }
+
+ if (!fn) {
+ c->file = NULL;
+ return c;
+ }
+
+ if (!(f = fopen(fn, "r"))) {
+ nm_error(NM_ERROR_NOFILE|NM_ERROR_SYSTEM, "Configuration file not found\n");
+ goto fail;
+ }
+
+ c->file = f;
+ return c;
+
+fail:
+ if (c)
+ nm_free(c);
+
+ if (f)
+ fclose(f);
+
+ return NULL;
+}
+
+void nm_config_close(config_t *c) {
+ if (c) {
+ if (c->file)
+ fclose(c->file);
+
+ nm_free(c);
+ }
+}
+
+
+const char *nm_config_get(config_t *c, const char*entry, const char*def) {
+ if (!c || !entry || !c->file)
+ return def;
+
+ rewind(c->file);
+
+ while (!feof(c->file)) {
+ static char ln[128];
+ char *n, *t;
+
+ if (!fgets(ln, sizeof(ln), c->file))
+ return def;
+
+ nm_chomp(ln);
+
+ n = &ln[strspn(ln, " \t")];
+
+ if (*n == '#' || *n == 0)
+ continue;
+
+ if (!(t = strpbrk(n, " \t")))
+ t = strchr(n, 0);
+
+ if (strncmp(n, entry, t-n) == 0) {
+ t += strspn(t, " \t");
+
+ return t;
+ }
+ }
+
+ return def;
+}
+
+
+int nm_config_get_int(config_t *c, const char*entry, int def) {
+ const char *r;
+
+ if ((r = nm_config_get(c, entry, NULL)))
+ return atoi(r);
+
+ return def;
+}
+
+
+int nm_config_get_bool(config_t *c, const char*entry, int def) {
+ const char *r;
+
+ if ((r = nm_config_get(c, entry, NULL)))
+ return tolower(*r) == 'y' || atoi(r) || *r == '+' || !strcasecmp(r, "on");
+
+ return def;
+}