int load_database(char *filename) { FILE *in; if(database != NULL) close_database(); if ((in = abook_fopen(filename, "r")) == NULL) return -1; parse_database(in); return (items == 0) ? 2 : 0; }
int main(int argc, char *argv[]) { dict_t db; char *infile; if (argc < 2 || argc > 3) { fprintf(stderr, "%s usage: %s <dbfile> [outputfile]\n\n", argv[0], argv[0]); fprintf(stderr, "If [outputfile] is specified, dbfile is rewritten into outputfile after being\nparsed.\n\n"); fprintf(stderr, "<dbfile> and/or [outputfile] may be given as '-' to use stdin and stdout,\nrespectively.\n"); return 1; } tools_init(); if (!strcmp(argv[1], "-")) { infile = "/dev/stdin"; } else { infile = argv[1]; } if (!(db = parse_database(infile))) return 2; fprintf(stdout, "Database read okay.\n"); fflush(stdout); if (dict_foreach(db, check_record, 0)) return 3; if (!bad) { fprintf(stdout, "Database checked okay.\n"); fflush(stdout); } if (argc == 3) { FILE *f; if (!strcmp(argv[2], "-")) { f = stdout; } else { if (!(f = fopen(argv[2], "w+"))) { fprintf(stderr, "fopen: %s\n", strerror(errno)); return 4; } } write_database(f, db); fclose(f); fprintf(stdout, "Database written okay.\n"); fflush(stdout); } return 0; }
int conf_read(const char *conf_file_name) { dict_t old_conf = conf_db; if (!(conf_db = parse_database(conf_file_name))) { goto fail; } if (reload_funcs) { conf_call_reload_funcs(); } if (old_conf && old_conf != conf_db) { free_database(old_conf); } return 1; fail: log_module(MAIN_LOG, LOG_ERROR, "Reverting to previous configuration."); free_database(conf_db); conf_db = old_conf; return 0; }
int main(int n, char **v) { extern int volatile gui_logd; char *database_filename = NULL; void *database; char *ip = DEFAULT_REMOTE_IP; int port = DEFAULT_REMOTE_PORT; char **on_off_name; int *on_off_action; int on_off_n = 0; int *is_on; int number_of_events; int i; event_handler *h; gui *g; vcd_data vcd_data; /* write on a socket fails if the other end is closed and we get SIGPIPE */ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) abort(); on_off_name = malloc(n * sizeof(char *)); if (on_off_name == NULL) abort(); on_off_action = malloc(n * sizeof(int)); if (on_off_action == NULL) abort(); for (i = 1; i < n; i++) { if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage(); if (!strcmp(v[i], "-d")) { if (i > n-2) usage(); database_filename = v[++i]; continue; } if (!strcmp(v[i], "-ip")) { if (i > n-2) usage(); ip = v[++i]; continue; } if (!strcmp(v[i], "-p")) { if (i > n-2) usage(); port = atoi(v[++i]); continue; } if (!strcmp(v[i], "-on")) { if (i > n-2) usage(); on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=1; continue; } if (!strcmp(v[i], "-off")) { if (i > n-2) usage(); on_off_name[on_off_n]=v[++i]; on_off_action[on_off_n++]=0; continue; } if (!strcmp(v[i], "-ON")) { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; } if (!strcmp(v[i], "-OFF")) { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; } if (!strcmp(v[i], "-debug-gui")) { gui_logd = 1; continue; } usage(); } if (database_filename == NULL) { printf("ERROR: provide a database file (-d)\n"); exit(1); } database = parse_database(database_filename); load_config_file(database_filename); number_of_events = number_of_ids(database); is_on = calloc(number_of_events, sizeof(int)); if (is_on == NULL) abort(); h = new_handler(database); g = gui_init(); new_thread(gui_thread, g); vcd_main_gui(g, h, database); on_off(database, "VCD_FUNCTION", is_on, 1); for (i = 0; i < on_off_n; i++) on_off(database, on_off_name[i], is_on, on_off_action[i]); vcd_data.socket = -1; vcd_data.is_on = is_on; vcd_data.nevents = number_of_events; if (pthread_mutex_init(&vcd_data.lock, NULL)) abort(); setup_event_selector(g, database, is_on, is_on_changed, &vcd_data); vcd_data.socket = connect_to(ip, port); /* send the first message - activate selected traces */ is_on_changed(&vcd_data); /* read messages */ while (1) { char v[T_BUFFER_MAX]; event e; e = get_event(vcd_data.socket, v, database); if (e.type == -1) abort(); handle_event(h, e); } return 0; }
void read_config(void) { json_t *jcfg, *cred_expire; json_error_t err; const char *tmp_str, *rpcuser, *rpcpass; char *file_data; file_data = read_commented_file(srv.config); if (!file_data) exit(1); jcfg = json_loads(file_data, &err); free(file_data); if (!jcfg) { applog(LOG_ERR, "%s: JSON parse failed", srv.config); exit(1); } if (!json_is_object(jcfg)) { applog(LOG_ERR, "top-level JSON value not an object"); exit(1); } parse_listen(json_object_get(jcfg, "listen")); parse_database(json_object_get(jcfg, "database")); parse_memcached(json_object_get(jcfg, "memcached")); if (elist_empty(&srv.listeners)) { applog(LOG_ERR, "error: no listen addresses specified"); exit(1); } tmp_str = json_string_value(json_object_get(jcfg, "pid")); if (tmp_str) srv.pid_file = strdup(tmp_str); tmp_str = json_string_value(json_object_get(jcfg, "forcehost")); if (tmp_str) srv.ourhost = strdup(tmp_str); tmp_str = json_string_value(json_object_get(jcfg, "log.requests")); if (tmp_str) { srv.req_log = strdup(tmp_str); srv.req_fd = open(srv.req_log, O_WRONLY | O_CREAT | O_APPEND, 0666); if (srv.req_fd < 0) { syslogerr(srv.req_log); exit(1); } } tmp_str = json_string_value(json_object_get(jcfg, "log.shares")); if (tmp_str) { srv.share_log = strdup(tmp_str); srv.share_fd = open(srv.share_log, O_WRONLY | O_CREAT | O_APPEND, 0666); if (srv.share_fd < 0) { syslogerr(srv.share_log); exit(1); } } if (json_is_true(json_object_get(jcfg, "longpoll.disable"))) srv.disable_lp = true; cred_expire = json_object_get(jcfg, "auth.cred_cache.expire"); if (json_is_integer(cred_expire)) srv.cred_expire = json_integer_value(cred_expire); tmp_str = json_string_value(json_object_get(jcfg, "rpc.url")); if (!tmp_str) { applog(LOG_ERR, "error: no RPC URL specified"); exit(1); } srv.rpc_url = strdup(tmp_str); rpcuser = json_string_value(json_object_get(jcfg, "rpc.user")); rpcpass = json_string_value(json_object_get(jcfg, "rpc.pass")); if (!rpcuser || !rpcpass) { applog(LOG_ERR, "error: no RPC user and/or password specified"); exit(1); } if (asprintf(&srv.rpc_userpass, "%s:%s", rpcuser, rpcpass) < 0) { applog(LOG_ERR, "OOM"); exit(1); } if (json_is_true(json_object_get(jcfg, "rpc.target.rewrite"))) srv.easy_target = json_string(EASY_TARGET); if (!srv.pid_file) { if (!(srv.pid_file = strdup("/var/run/pushpoold.pid"))) { applog(LOG_ERR, "no core"); exit(1); } } json_decref(jcfg); }