From: Adam Dickmeiss Date: Fri, 1 May 2009 11:06:16 +0000 (+0200) Subject: Simplifications WRT show raw (immediate). X-Git-Tag: v1.1.0~27 X-Git-Url: http://sru.miketaylor.org.uk/cgi-bin?a=commitdiff_plain;h=e86cbd0da167e0e72b1d4f180b51a9a9acbbc694;p=pazpar2-moved-to-github.git Simplifications WRT show raw (immediate). --- diff --git a/src/client.c b/src/client.c index e1ced23..c5b10a8 100644 --- a/src/client.c +++ b/src/client.c @@ -157,13 +157,12 @@ static void client_send_raw_present(struct client *cl); static int nativesyntax_to_type(struct session_database *sdb, char *type, ZOOM_record rec); -int client_show_raw_immediate(struct client *cl, int position, - const char *syntax, const char *esn, - void *data, - void (*error_handler)(void *data, const char *addinfo), - void (*record_handler)(void *data, const char *buf, - size_t sz), - int binary) +static void client_show_immediate(struct client *cl, int position, + void *data, + void (*error_handler)(void *data, const char *addinfo), + void (*record_handler)(void *data, const char *buf, + size_t sz), + int binary) { struct connection *co = cl->connection; struct session_database *sdb = client_get_database(cl); @@ -173,20 +172,19 @@ int client_show_raw_immediate(struct client *cl, int position, const char *buf; int len; - if (!co) - return -1; + assert(co); resultset = connection_get_resultset(co); if (!resultset) { error_handler(data, "no resultset"); - return 0; + return; } rec = ZOOM_resultset_record(resultset, position-1); if (!rec) { error_handler(data, "no record"); - return 0; + return; } if (binary) strcpy(type, "raw"); @@ -196,10 +194,9 @@ int client_show_raw_immediate(struct client *cl, int position, if (!buf) { error_handler(data, "no record"); - return 0; + return; } record_handler(data, buf, len); - return 0; } @@ -209,47 +206,51 @@ int client_show_raw_begin(struct client *cl, int position, void (*error_handler)(void *data, const char *addinfo), void (*record_handler)(void *data, const char *buf, size_t sz), - void **data2, int binary) { - struct show_raw *rr, **rrp; if (!cl->connection) - { /* the client has no connection */ return -1; - } - rr = xmalloc(sizeof(*rr)); - *data2 = rr; - rr->position = position; - rr->active = 0; - rr->data = data; - rr->error_handler = error_handler; - rr->record_handler = record_handler; - rr->binary = binary; - if (syntax) - rr->syntax = xstrdup(syntax); - else - rr->syntax = 0; - if (esn) - rr->esn = xstrdup(esn); - else - rr->esn = 0; - rr->next = 0; - - for (rrp = &cl->show_raw; *rrp; rrp = &(*rrp)->next) - ; - *rrp = rr; - if (cl->state == Client_Failed) - { - client_show_raw_error(cl, "client failed"); - } - else if (cl->state == Client_Disconnected) - { - client_show_raw_error(cl, "client disconnected"); - } + if (syntax == 0 && esn == 0) + client_show_immediate(cl, position, data, + error_handler, record_handler, + binary); else { - client_send_raw_present(cl); + struct show_raw *rr, **rrp; + rr = xmalloc(sizeof(*rr)); + rr->position = position; + rr->active = 0; + rr->data = data; + rr->error_handler = error_handler; + rr->record_handler = record_handler; + rr->binary = binary; + if (syntax) + rr->syntax = xstrdup(syntax); + else + rr->syntax = 0; + if (esn) + rr->esn = xstrdup(esn); + else + rr->esn = 0; + rr->next = 0; + + for (rrp = &cl->show_raw; *rrp; rrp = &(*rrp)->next) + ; + *rrp = rr; + + if (cl->state == Client_Failed) + { + client_show_raw_error(cl, "client failed"); + } + else if (cl->state == Client_Disconnected) + { + client_show_raw_error(cl, "client disconnected"); + } + else + { + client_send_raw_present(cl); + } } return 0; } diff --git a/src/client.h b/src/client.h index 64713a1..5772481 100644 --- a/src/client.h +++ b/src/client.h @@ -43,17 +43,8 @@ int client_show_raw_begin(struct client *cl, int position, void (*error_handler)(void *data, const char *addinfo), void (*record_handler)(void *data, const char *buf, size_t sz), - void **data2, int binary); -int client_show_raw_immediate(struct client *cl, int position, - const char *syntax, const char *esn, - void *data, - void (*error_handler)(void *data, const char *addinfo), - void (*record_handler)(void *data, const char *buf, - size_t sz), - int binary); - void client_show_raw_remove(struct client *cl, void *rr); const char *client_get_state_str(struct client *cl); diff --git a/src/http_command.c b/src/http_command.c index 9ca5481..1a38a82 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -593,45 +593,22 @@ static void cmd_record(struct http_channel *c) error(rs, PAZPAR2_RECORD_FAIL, "no record at offset given"); return; } - else if (syntax == 0 && esn == 0) - { - http_channel_observer_t obs = - http_add_observer(c, r->client, show_raw_reset); - int ret = client_show_raw_immediate( - r->client, r->position, syntax, esn, - obs, - show_raw_record_error, - (binary ? - show_raw_record_ok_binary : - show_raw_record_ok), - (binary ? 1 : 0)); - if (ret == -1) - { - http_remove_observer(obs); - error(rs, PAZPAR2_NO_SESSION, 0); - return; - } - } else { - void *data2; http_channel_observer_t obs = http_add_observer(c, r->client, show_raw_reset); - int ret = - client_show_raw_begin( - r->client, r->position, syntax, esn, - obs /* data */, - show_raw_record_error, - (binary ? - show_raw_record_ok_binary : - show_raw_record_ok), - &data2, - (binary ? 1 : 0)); + int ret = client_show_raw_begin(r->client, r->position, + syntax, esn, + obs /* data */, + show_raw_record_error, + (binary ? + show_raw_record_ok_binary : + show_raw_record_ok), + (binary ? 1 : 0)); if (ret == -1) { http_remove_observer(obs); error(rs, PAZPAR2_NO_SESSION, 0); - return; } } }