summaryrefslogtreecommitdiffstats
path: root/bbsconfig.c
diff options
context:
space:
mode:
Diffstat (limited to 'bbsconfig.c')
-rw-r--r--bbsconfig.c146
1 files changed, 146 insertions, 0 deletions
diff --git a/bbsconfig.c b/bbsconfig.c
index 5ad6a58..4eed4a6 100644
--- a/bbsconfig.c
+++ b/bbsconfig.c
@@ -1,2 +1,148 @@
#include "bbsconfig.h"
+int config_default()
+{
+#ifdef CONFIG_TODO
+ g_config.todo_dir = CONFIG_TODO_DEFAULT_FILE;
+#endif
+ //g_config.todo_files = llist_new();
+ g_config.todo_files = NULL;
+
+ g_config.article_dir = NULL;
+
+#ifdef CONFIG_LOGIN
+ g_config.user_dir = CONFIG_USER_DEFAULT_DIR;
+#else
+ g_config.user_dir = NULL;
+#endif
+
+ g_config.root_dir = "./";
+
+ g_config.syslog = 0;
+ g_config.debug = 0;
+ return 0;
+}
+
+/*
+bbs config file
+[bbs]
+rootdir string
+tododir string
+articledir string
+userdir string
+syslog int
+*/
+
+static int bbs_cfg_handler( void *user, const char *section, const char *name,
+ const char *value )
+{
+ bbs_config *cfg = (bbs_config *)user;
+#define MATCH(s,n) strcmp(section,s) == 0 && strcmp(name,n)==0
+
+ if ( MATCH("bbs","rootdir") )
+ {
+ cfg->root_dir = strdup( value );
+ } else if ( MATCH("bbs","tododir") )
+ {
+ cfg->todo_dir = strdup( value );
+ } else if ( MATCH("bbs","articledir") )
+ {
+ cfg->article_dir = strdup( value );
+ } else if ( MATCH("bbs","userdir") )
+ {
+ cfg->user_dir = strdup( value );
+ } else if ( MATCH("bbs","syslog") )
+ {
+ cfg->syslog = atoi( value )&0x01;
+ }
+#undef MATCH
+ return 1;
+
+}
+
+int config_from_ini( const char *config_file )
+{
+ int ret=-1;
+
+ bbs_config cfg;
+ memset( (void *)&cfg, 0, sizeof(bbs_config));
+
+ ASSERT(config_file != NULL);
+
+ //check patch if file excists
+ if ( access(config_file, R_OK) < 0 )
+ {
+ printf("Cannot open ini config file: %s\n", strerror(errno));
+ ret = -1;
+ return ret;
+ }
+
+
+ //parse config file
+ if ( ini_parse( config_file, bbs_cfg_handler, &cfg ) < 0 )
+ {
+ printf("Cannot parse config file\n");
+ ret = -1;
+ }
+
+ g_config = cfg;
+
+ return ret;
+}
+
+
+int config_from_argv( int argc, char **argv )
+{
+ int ret=-1;
+ int c=0;
+ int iflag=0;
+ char *ini_file_dir=NULL;
+
+ while ( (c = getopt(argc, argv, "a:i:r:u:st:")) != -1 )
+ {
+ switch (c)
+ {
+ case 'a':
+ g_config.article_dir = optarg;
+ break;
+ case 'i':
+ iflag = 1;
+ ini_file_dir = optarg;
+ break;
+ case 'r':
+ g_config.root_dir = optarg;
+ break;
+ case 'u':
+ g_config.user_dir = optarg;
+ break;
+ case 's':
+ g_config.syslog = 1;
+ break;
+ case 't':
+ g_config.todo_dir = optarg;
+ break;
+ case '?':
+ if (( optopt == 'a') || (optopt == 'i') || (optopt == 'r') ||
+ (optopt == 'u') || (optopt == 't'))
+ printf("Option -%c requires argument\n", optopt );
+ else if( isprint(c) )
+ printf("Unknown option -%c\n", optopt);
+ else
+ printf("Unknown option character\n");
+
+ break;
+ default:
+ printf("Unknown option\n");
+ ret = -1;
+ }
+ }
+
+ if ( iflag == 1)
+ {
+ config_from_ini( ini_file_dir );
+ }
+
+ return ret;
+}
+
+