summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/util/config.mk1
-rw-r--r--lib/util/parmlist.c62
-rw-r--r--lib/util/parmlist.h39
3 files changed, 102 insertions, 0 deletions
diff --git a/lib/util/config.mk b/lib/util/config.mk
index 6dc8354948..9f33b0f568 100644
--- a/lib/util/config.mk
+++ b/lib/util/config.mk
@@ -33,6 +33,7 @@ LIBSAMBA-UTIL_OBJ_FILES = $(addprefix $(libutilsrcdir)/, \
talloc_stack.o \
smb_threads.o \
params.o \
+ parmlist.o \
util_id.o)
PUBLIC_HEADERS += $(addprefix $(libutilsrcdir)/, util.h \
diff --git a/lib/util/parmlist.c b/lib/util/parmlist.c
new file mode 100644
index 0000000000..4ab660197d
--- /dev/null
+++ b/lib/util/parmlist.c
@@ -0,0 +1,62 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * Copyright (C) Jelmer Vernooij 2009
+ *
+ * This program 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "includes.h"
+#include "../lib/util/dlinklist.h"
+#include "../lib/util/parmlist.h"
+
+struct parmlist_entry *parmlist_get(struct parmlist *ctx, const char *name)
+{
+ struct parmlist_entry *e;
+ for (e = ctx->entries; e; e = e->next) {
+ if (strcasecmp(e->key, name) == 0)
+ return e;
+ }
+
+ return NULL;
+}
+
+int parmlist_get_int(struct parmlist *ctx, const char *name, int default_v)
+{
+ struct parmlist_entry *p = parmlist_get(ctx, name);
+
+ if (p != NULL)
+ return strtol(p->value, NULL, 0);
+
+ return default_v;
+}
+
+const char *parmlist_get_string(struct parmlist *ctx, const char *name, const char *default_v)
+{
+ struct parmlist_entry *p = parmlist_get(ctx, name);
+
+ if (p == NULL)
+ return default_v;
+
+ return p->value;
+}
+
+const char **parmlist_get_string_list(struct parmlist *ctx, const char *name, const char *separator)
+{
+ struct parmlist_entry *p = parmlist_get(ctx, name);
+
+ if (p == NULL)
+ return NULL;
+
+ return (const char **)str_list_make(ctx, p->value, separator);
+}
diff --git a/lib/util/parmlist.h b/lib/util/parmlist.h
new file mode 100644
index 0000000000..0fa518d1c4
--- /dev/null
+++ b/lib/util/parmlist.h
@@ -0,0 +1,39 @@
+/*
+ Unix SMB/CIFS implementation.
+ Generic parameter parsing interface
+ Copyright (C) Jelmer Vernooij 2009
+
+ This program 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 3 of the License, or
+ (at your option) any later version.
+
+ This program 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _PARMLIST_H /* _PARMLIST_H */
+#define _PARMLIST_H
+
+struct parmlist_entry {
+ struct parmlist_entry *prev, *next;
+ char *key;
+ char *value;
+ int priority;
+};
+
+struct parmlist {
+ struct parmlist_entry *entries;
+};
+
+int parmlist_get_int(struct parmlist *ctx, const char *name, int default_v);
+const char *parmlist_get_string(struct parmlist *ctx, const char *name, const char *default_v);
+struct parmlist_entry *parmlist_get(struct parmlist *ctx, const char *name);
+const char **parmlist_get_string_list(struct parmlist *ctx, const char *name, const char *separator);
+
+#endif /* _PARMLIST_H */