From: Stephan Bosch Date: Tue, 8 Oct 2019 16:57:00 +0000 (+0200) Subject: plugins: fts-solr: solr-reponse - Move init/deinit of struct solr_response_parser... X-Git-Tag: 2.3.10~149 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d01fc90f2a9eece6f18d272b7e973d113c8aba40;p=thirdparty%2Fdovecot%2Fcore.git plugins: fts-solr: solr-reponse - Move init/deinit of struct solr_response_parser to separate functions. --- diff --git a/src/plugins/fts-solr/solr-connection.c b/src/plugins/fts-solr/solr-connection.c index 104d9359f8..4ee5482161 100644 --- a/src/plugins/fts-solr/solr-connection.c +++ b/src/plugins/fts-solr/solr-connection.c @@ -188,28 +188,10 @@ int solr_connection_select(struct solr_connection *conn, const char *query, i_zero(&lctx); lctx.conn = conn; - i_zero(&parser); - parser.result_pool = pool; + solr_response_parser_init(&parser, pool); lctx.parser = &parser; - parser.xml_parser = XML_ParserCreate("UTF-8"); - if (parser.xml_parser == NULL) { - i_fatal_status(FATAL_OUTOFMEM, - "fts_solr: Failed to allocate XML parser"); - } - - hash_table_create(&parser.mailboxes, default_pool, 0, - str_hash, strcmp); - p_array_init(&parser.results, pool, 32); - i_free_and_null(conn->http_failure); - parser.xml_failed = FALSE; - XML_ParserReset(parser.xml_parser, "UTF-8"); - XML_SetElementHandler(parser.xml_parser, - solr_lookup_xml_start, solr_lookup_xml_end); - XML_SetCharacterDataHandler(parser.xml_parser, solr_lookup_xml_data); - XML_SetUserData(parser.xml_parser, &parser); - url = t_strconcat(conn->http_base_url, "select?", query, NULL); http_req = http_client_request(solr_http_client, "GET", @@ -232,8 +214,7 @@ int solr_connection_select(struct solr_connection *conn, const char *query, return -1; parse_ret = solr_xml_parse(&parser, "", 0, TRUE); - hash_table_destroy(&parser.mailboxes); - XML_ParserFree(parser.xml_parser); + solr_response_parser_deinit(&parser); array_append_zero(&parser.results); *box_results_r = array_front_modifiable(&parser.results); diff --git a/src/plugins/fts-solr/solr-response.c b/src/plugins/fts-solr/solr-response.c index cc3f6b436e..e0022c1ac6 100644 --- a/src/plugins/fts-solr/solr-response.c +++ b/src/plugins/fts-solr/solr-response.c @@ -283,3 +283,33 @@ static void solr_lookup_xml_data(void *context, const char *str, int len) break; } } + +void solr_response_parser_init(struct solr_response_parser *parser, + pool_t result_pool) +{ + i_zero(parser); + + parser->xml_parser = XML_ParserCreate("UTF-8"); + if (parser->xml_parser == NULL) { + i_fatal_status(FATAL_OUTOFMEM, + "fts_solr: Failed to allocate XML parser"); + } + + hash_table_create(&parser->mailboxes, default_pool, 0, + str_hash, strcmp); + + parser->result_pool = result_pool; + p_array_init(&parser->results, result_pool, 32); + + parser->xml_failed = FALSE; + XML_SetElementHandler(parser->xml_parser, + solr_lookup_xml_start, solr_lookup_xml_end); + XML_SetCharacterDataHandler(parser->xml_parser, solr_lookup_xml_data); + XML_SetUserData(parser->xml_parser, parser); +} + +void solr_response_parser_deinit(struct solr_response_parser *parser) +{ + hash_table_destroy(&parser->mailboxes); + XML_ParserFree(parser->xml_parser); +} diff --git a/src/plugins/fts-solr/solr-response.h b/src/plugins/fts-solr/solr-response.h index 1c105a56ba..aabc9ba116 100644 --- a/src/plugins/fts-solr/solr-response.h +++ b/src/plugins/fts-solr/solr-response.h @@ -4,6 +4,8 @@ #include "seq-range-array.h" #include "fts-api.h" +struct solr_response_parser; + struct solr_result { const char *box_id; @@ -11,4 +13,8 @@ struct solr_result { ARRAY_TYPE(fts_score_map) scores; }; +void solr_response_parser_init(struct solr_response_parser *parser, + pool_t result_pool); +void solr_response_parser_deinit(struct solr_response_parser *parser); + #endif