X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Flogic.c;h=f6f6cbda6ff89f8a029f09c1d239957f4714279d;hb=ebf24e785974c368809d73394a24eb80506598fd;hp=57f36b426f143d7ed59131504bf958d5b3774bb6;hpb=31f6b164fd451ef9254545a38e7b6ffc1543854f;p=pazpar2-moved-to-github.git diff --git a/src/logic.c b/src/logic.c index 57f36b4..f6f6cbd 100644 --- a/src/logic.c +++ b/src/logic.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2009 Index Data + Copyright (C) 2006-2010 Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -92,7 +92,7 @@ static void log_xml_doc(xmlDoc *doc) #endif if (lf && len) { - fwrite(result, 1, len, lf); + (void) fwrite(result, 1, len, lf); fprintf(lf, "\n"); } xmlFree(result); @@ -297,7 +297,7 @@ void session_settings_dump(struct session *se, // Will be extended to take into account user associated with session const char *session_setting_oneval(struct session_database *db, int offset) { - if (!db->settings[offset]) + if (offset >= db->num_settings || !db->settings[offset]) return ""; return db->settings[offset]->value; } @@ -491,7 +491,8 @@ enum pazpar2_error_code search(struct session *se, { no_working++; if (client_prep_connection(cl, se->service->z3950_operation_timeout, - se->service->z3950_session_timeout)) + se->service->z3950_session_timeout, + se->service->server->iochan_man)) client_start_search(cl); } } @@ -523,7 +524,10 @@ static void session_init_databases_fun(void *context, struct database *db) sizeof(struct settings *) * db->num_settings); new->num_settings = db->num_settings; for (i = 0; i < db->num_settings; i++) - new->settings[i] = db->settings[i]; + { + struct setting *setting = db->settings[i]; + new->settings[i] = setting; + } new->next = se->databases; se->databases = new; } @@ -547,11 +551,12 @@ void session_init_databases(struct session *se) static struct session_database *load_session_database(struct session *se, char *id) { - struct database *db = find_database(id, se->service); + struct database *db = new_database(id, se->session_nmem); - resolve_database(db); + resolve_database(se->service, db); session_init_databases_fun((void*) se, db); + // New sdb is head of se->databases list return se->databases; } @@ -806,21 +811,6 @@ void statistics(struct session *se, struct statistics *stat) stat->num_clients = count; } - -// Master list of connections we're handling events to -static IOCHAN channel_list = 0; /* thread pr */ - -void pazpar2_add_channel(IOCHAN chan) -{ - chan->next = channel_list; - channel_list = chan; -} - -void pazpar2_event_loop() -{ - event_loop(&channel_list); -} - static struct record_metadata *record_metadata_init( NMEM nmem, const char *value, enum conf_metadata_type type, struct _xmlAttr *attr) @@ -897,15 +887,15 @@ static int get_mergekey_from_doc(xmlDoc *doc, xmlNode *root, const char *name, service->mergekey_pct, (const char *) value, 0); + if (wrbuf_len(norm_wr) > 0) + wrbuf_puts(norm_wr, " "); wrbuf_puts(norm_wr, name); - wrbuf_puts(norm_wr, "="); while ((norm_str = pp2_relevance_token_next(prt))) { if (*norm_str) { - if (wrbuf_len(norm_wr)) - wrbuf_puts(norm_wr, " "); + wrbuf_puts(norm_wr, " "); wrbuf_puts(norm_wr, norm_str); } }