static int try_load(struct pattern* pattern) { if (extract_filename(&pattern->pattern)) { if (is_cdb(&filename)) return (pattern->cdb = open_cdb(&filename)) != 0; else return (pattern->file = load_text(&filename)) != 0; } return 1; }
int main(int argc, char* argv[]) { int fd; int list_s; struct cdb *db = NULL; struct sockaddr_in *serveraddr = NULL; parse_args(argc, argv); debug("Opening %s …", mycdb_options.filename); fd = open(mycdb_options.filename, O_RDONLY); check(fd, "FATAL: Error opening database file."); db = open_cdb(fd); check(db != NULL, "Can't initialize internal data structures."); // Set up the listening socket. list_s = socket(AF_INET, SOCK_STREAM, 0); check(list_s != -1, "Error creating listening socket"); // Set up the options for the listening socket. serveraddr = calloc(1, sizeof(struct sockaddr_in)); check_mem(serveraddr); serveraddr->sin_family = AF_INET; serveraddr->sin_addr.s_addr = htonl(INADDR_ANY); serveraddr->sin_port = htons(mycdb_options.port); // Bind the socket to the listening address. check(bind(list_s, (struct sockaddr *) serveraddr, sizeof(struct sockaddr_in)) == 0, "Error binding listening socket"); check(listen(list_s, MYCDB_LISTENQ) == 0, "Error listening on socket"); check(mycdb_listen_loop(list_s, db) == 0, "Error during request/response cycle"); mycdb_free(db); free(db); free(serveraddr); return EXIT_SUCCESS; error: if (db != NULL) free(db); if (serveraddr != NULL) free(serveraddr); return EXIT_FAILURE; }