Пример #1
0
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;
}
Пример #2
0
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;
}