aboutsummaryrefslogtreecommitdiffstats
path: root/cfg.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2003-09-09 06:54:43 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2003-09-09 06:54:43 +0000
commitdd4d20ad1a3970752a4fe81c95c164bf751c0f16 (patch)
treec78e80eb3a22e818c6039ca5aa68c7f46000fd94 /cfg.c
parentca55019e85e081afe878a93ba0dc83a44d862de9 (diff)
downloadlcd4linux-dd4d20ad1a3970752a4fe81c95c164bf751c0f16.tar.gz
[lcd4linux @ 2003-09-09 06:54:43 by reinelt]
new function 'cfg_number()' git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@233 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'cfg.c')
-rw-r--r--cfg.c56
1 files changed, 50 insertions, 6 deletions
diff --git a/cfg.c b/cfg.c
index 708bf59..0689ce6 100644
--- a/cfg.c
+++ b/cfg.c
@@ -1,4 +1,4 @@
-/* $Id: cfg.c,v 1.15 2003/08/24 05:17:58 reinelt Exp $
+/* $Id: cfg.c,v 1.16 2003/09/09 06:54:43 reinelt Exp $
*
* config file stuff
*
@@ -20,6 +20,9 @@
*
*
* $Log: cfg.c,v $
+ * Revision 1.16 2003/09/09 06:54:43 reinelt
+ * new function 'cfg_number()'
+ *
* Revision 1.15 2003/08/24 05:17:58 reinelt
* liblcd4linux patch from Patrick Schemitz
*
@@ -128,12 +131,14 @@
#include "debug.h"
#include "cfg.h"
+
typedef struct {
char *key;
char *val;
int lock;
} ENTRY;
+
static char *Config_File=NULL;
static ENTRY *Config=NULL;
static int nConfig=0;
@@ -156,6 +161,7 @@ static char *strip (char *s, int strip_comments)
return s;
}
+
static char *dequote (char *string)
{
char *s=string;
@@ -172,6 +178,7 @@ static char *dequote (char *string)
return string;
}
+
static void cfg_add (char *key, char *val, int lock)
{
int i;
@@ -191,6 +198,7 @@ static void cfg_add (char *key, char *val, int lock)
Config[i].lock=lock;
}
+
int l4l_cfg_cmd (char *arg)
{
char *key, *val;
@@ -209,6 +217,7 @@ int l4l_cfg_cmd (char *arg)
return 0;
}
+
char *l4l_cfg_get (char *key, char *defval)
{
int i;
@@ -221,6 +230,38 @@ char *l4l_cfg_get (char *key, char *defval)
return defval;
}
+
+int l4l_cfg_number (char *key, int defval, int min, int max, int *value)
+{
+
+ char *s, *e;
+
+ s=cfg_get(key, NULL);
+ if (s==NULL) {
+ *value=defval;
+ return 0;
+ }
+
+ *value=strtol(s, &e, 0);
+ if (*e!='\0') {
+ error ("bad %s entry '%s' in %s", key, s, cfg_source());
+ return -1;
+ }
+
+ if (*value<min) {
+ error ("bad %s value '%s' in %s, minimum is %d", key, s, cfg_source(), min);
+ return -1;
+ }
+
+ if (*value>max) {
+ error ("bad %s value '%s' in %s, maximum is %d", key, s, cfg_source(), max);
+ return -1;
+ }
+
+ return 0;
+}
+
+
static int check_cfg_source(char *file)
{
/* as passwords and commands are stored in the config file,
@@ -261,6 +302,7 @@ static int check_cfg_source(char *file)
return error;
}
+
int l4l_cfg_init (char *file)
{
FILE *stream;
@@ -306,6 +348,7 @@ int l4l_cfg_init (char *file)
return 0;
}
+
char *l4l_cfg_source (void)
{
if (Config_File)
@@ -315,8 +358,9 @@ char *l4l_cfg_source (void)
}
-int (*cfg_init) (char *source) = l4l_cfg_init;
-char *(*cfg_source) (void) = l4l_cfg_source;
-int (*cfg_cmd) (char *arg) = l4l_cfg_cmd;
-char *(*cfg_get) (char *key, char *defval) = l4l_cfg_get;
-
+int (*cfg_init) (char *source) = l4l_cfg_init;
+char *(*cfg_source) (void) = l4l_cfg_source;
+int (*cfg_cmd) (char *arg) = l4l_cfg_cmd;
+char *(*cfg_get) (char *key, char *defval) = l4l_cfg_get;
+int (*cfg_number) (char *key, int defval,
+ int min, int max, int *value) = l4l_cfg_number;