#include #include #include #include #include "config.h" time_t last_modified = 0; struct config config; int parse_config_directive(char *arg1, char *arg2) { if (strstr(arg1,"blog base")) { dprintf("[a] blog base is : '%s'\n",get_string(arg2)); free(config.blog_base); config.blog_base = get_string(arg2); } else if (strstr(arg1,"blog")) { dprintf("[a] add blog : %s\n",get_string(arg2)); config.blogs=(char **)realloc( config.blogs, (config.nblogs+1)*sizeof(char*)); config.blogs[config.nblogs]=get_string(arg2); config.nblogs++; } else if (strstr(arg1,"delay") || strstr(arg1,"build")) { config.delay = get_time(arg2); dprintf("[t] delay for rebuilds is : %d\n",config.delay); } else if (strstr(arg1,"spam")) { dprintf("[s] antispam filter : %d\n", get_boolean(arg2)); config.mail = get_boolean(arg2); } else if (strstr(arg1,"mail")) { dprintf("[m] remail : %d\n", get_boolean(arg2)); config.mail = get_boolean(arg2); } else if (strstr(arg1,"backup")) { if (strstr(arg1,"directory")) { free(config.backup_dir); //config.backup_dir } else { // } } return 0; } int init_config() { config.blog_base = NULL; config.spamfilter = 0; config.nblogs = 0; config.blogs = NULL; config.mail = 0; config.delay = 2; } int reset_config() { while(config.nblogs) { free(config.blogs[config.nblogs-1]); config.nblogs--; } free(config.blogs); config.blogs = malloc(1); } int parse_config() { struct stat st; FILE *fd; char buf[1024]; char *arg1, *arg2; int ret; ret = lstat(cfgfile,&st); if (ret) return -1; if (last_modified==0) { init_config(); } if (last_modified==st.st_mtime) { return 0; } last_modified = st.st_mtime; /* read the configure file */ fd = fopen(cfgfile,"r"); if (!fd) return -1; reset_config(); while(1) { fgets (buf,1024,fd); if (feof(fd)) break; /* strip comments */ for(arg1=buf;*arg1;*arg1++) if(*arg1=='#')*arg1='\0'; arg1 = strtok(buf,":"); if (!arg1) continue; arg2 = strtok(NULL,":"); if (!arg2) continue; arg1[strlen(arg1)]='\0'; arg2[strlen(arg2)-1]='\0'; parse_config_directive(arg1,arg2); } fclose(fd); if (config.delay<=0) config.delay=1; return 1; }