From: Stephan Bosch Date: Tue, 8 Oct 2019 16:56:57 +0000 (+0200) Subject: plugins: fts-solr: Move solr_lookup_xml_data() from solr-connection.c to solr-response.c. X-Git-Tag: 2.3.10~156 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c3b6bbd3ada856b1a3321ecbeaa93feb855fbb6a;p=thirdparty%2Fdovecot%2Fcore.git plugins: fts-solr: Move solr_lookup_xml_data() from solr-connection.c to solr-response.c. --- diff --git a/src/plugins/fts-solr/solr-connection.c b/src/plugins/fts-solr/solr-connection.c index 375d034ce5..99e579855c 100644 --- a/src/plugins/fts-solr/solr-connection.c +++ b/src/plugins/fts-solr/solr-connection.c @@ -126,66 +126,6 @@ void solr_connection_deinit(struct solr_connection **_conn) i_free(conn); } -static int uint32_parse(const char *str, int len, uint32_t *value_r) -{ - uint32_t value = 0; - int i; - - for (i = 0; i < len; i++) { - if (str[i] < '0' || str[i] > '9') - break; - value = value*10 + str[i]-'0'; - } - if (i != len) - return -1; - - *value_r = value; - return 0; -} - -static void solr_lookup_xml_data(void *context, const char *str, int len) -{ - struct solr_lookup_xml_context *ctx = context; - char *new_name; - - switch (ctx->content_state) { - case SOLR_XML_CONTENT_STATE_NONE: - break; - case SOLR_XML_CONTENT_STATE_UID: - if (uint32_parse(str, len, &ctx->uid) < 0 || ctx->uid == 0) { - i_error("fts_solr: received invalid uid '%s'", - t_strndup(str, len)); - ctx->content_state = SOLR_XML_CONTENT_STATE_ERROR; - } - break; - case SOLR_XML_CONTENT_STATE_SCORE: - T_BEGIN { - ctx->score = strtod(t_strndup(str, len), NULL); - } T_END; - break; - case SOLR_XML_CONTENT_STATE_MAILBOX: - /* this may be called multiple times, for example if input - contains '&' characters */ - new_name = ctx->mailbox == NULL ? i_strndup(str, len) : - i_strconcat(ctx->mailbox, t_strndup(str, len), NULL); - i_free(ctx->mailbox); - ctx->mailbox = new_name; - break; - case SOLR_XML_CONTENT_STATE_NAMESPACE: - new_name = ctx->ns == NULL ? i_strndup(str, len) : - i_strconcat(ctx->ns, t_strndup(str, len), NULL); - i_free(ctx->ns); - ctx->ns = new_name; - break; - case SOLR_XML_CONTENT_STATE_UIDVALIDITY: - if (uint32_parse(str, len, &ctx->uidvalidity) < 0) - i_error("fts_solr: received invalid uidvalidity"); - break; - case SOLR_XML_CONTENT_STATE_ERROR: - break; - } -} - static void solr_connection_payload_input(struct solr_connection *conn) { const unsigned char *data; diff --git a/src/plugins/fts-solr/solr-response.c b/src/plugins/fts-solr/solr-response.c index 2a5c4847f9..383a836b82 100644 --- a/src/plugins/fts-solr/solr-response.c +++ b/src/plugins/fts-solr/solr-response.c @@ -218,3 +218,63 @@ static void solr_lookup_xml_end(void *context, const char *name ATTR_UNUSED) } ctx->depth--; } + +static int uint32_parse(const char *str, int len, uint32_t *value_r) +{ + uint32_t value = 0; + int i; + + for (i = 0; i < len; i++) { + if (str[i] < '0' || str[i] > '9') + break; + value = value*10 + str[i]-'0'; + } + if (i != len) + return -1; + + *value_r = value; + return 0; +} + +static void solr_lookup_xml_data(void *context, const char *str, int len) +{ + struct solr_lookup_xml_context *ctx = context; + char *new_name; + + switch (ctx->content_state) { + case SOLR_XML_CONTENT_STATE_NONE: + break; + case SOLR_XML_CONTENT_STATE_UID: + if (uint32_parse(str, len, &ctx->uid) < 0 || ctx->uid == 0) { + i_error("fts_solr: received invalid uid '%s'", + t_strndup(str, len)); + ctx->content_state = SOLR_XML_CONTENT_STATE_ERROR; + } + break; + case SOLR_XML_CONTENT_STATE_SCORE: + T_BEGIN { + ctx->score = strtod(t_strndup(str, len), NULL); + } T_END; + break; + case SOLR_XML_CONTENT_STATE_MAILBOX: + /* this may be called multiple times, for example if input + contains '&' characters */ + new_name = ctx->mailbox == NULL ? i_strndup(str, len) : + i_strconcat(ctx->mailbox, t_strndup(str, len), NULL); + i_free(ctx->mailbox); + ctx->mailbox = new_name; + break; + case SOLR_XML_CONTENT_STATE_NAMESPACE: + new_name = ctx->ns == NULL ? i_strndup(str, len) : + i_strconcat(ctx->ns, t_strndup(str, len), NULL); + i_free(ctx->ns); + ctx->ns = new_name; + break; + case SOLR_XML_CONTENT_STATE_UIDVALIDITY: + if (uint32_parse(str, len, &ctx->uidvalidity) < 0) + i_error("fts_solr: received invalid uidvalidity"); + break; + case SOLR_XML_CONTENT_STATE_ERROR: + break; + } +}