reread.c

00001 #include "confuse.h"
00002 #include <string.h>
00003 #include <signal.h>
00004 #include <unistd.h>
00005 
00006 cfg_t *cfg = 0;
00007 const char *config_filename = "./reread.conf";
00008 
00009 void read_config(void)
00010 {
00011     cfg_opt_t arg_opts[] = {
00012         CFG_STR("value", "default", CFGF_NONE),
00013         CFG_END()
00014     };
00015     cfg_opt_t opts[] = {
00016         CFG_INT("delay", 3, CFGF_NONE),
00017         CFG_STR("message", "This is a message", CFGF_NONE),
00018         CFG_SEC("argument", arg_opts, CFGF_MULTI | CFGF_TITLE),
00019         CFG_END()
00020     };
00021     int ret;
00022 
00023     char *buf = "" \
00024         " delay = 3\n" \
00025         "# message = \"asdfasfasfd tersf\"\n" \
00026         " argument one { value = 1 }\n" \
00027         " argument two { value=foo}\n";
00028 
00029     cfg_free(cfg);
00030 
00031     cfg = cfg_init(opts, 0);
00032     ret = cfg_parse_buf(cfg, buf);
00033     ret = cfg_parse(cfg, config_filename);
00034 }
00035 
00036 void sighandler(int sig)
00037 {
00038     read_config();
00039     signal(SIGHUP, sighandler);
00040 }
00041 
00042 static int loop = 1;
00043 
00044 void usr1handler(int sig)
00045 {
00046     loop = 0;
00047 }
00048 
00049 int main(void)
00050 {
00051     unsigned int i;
00052 
00053     read_config();
00054     signal(SIGHUP, sighandler);
00055     signal(SIGUSR1, usr1handler);
00056 
00057     while(loop)
00058     {
00059         printf("Message: %s", cfg_getstr(cfg, "message"));
00060         for(i = 0; i < cfg_size(cfg, "argument"); i++)
00061         {
00062             cfg_t *arg = cfg_getnsec(cfg, "argument", i);
00063             printf(", %s", cfg_getstr(arg, "value"));
00064         }
00065         printf("\n");
00066 
00067         sleep(cfg_getint(cfg, "delay"));
00068     }
00069 
00070     cfg_free(cfg);
00071     cfg = 0;
00072 
00073     return 0;
00074 }