From: Stefan Eissing Date: Mon, 17 Aug 2015 12:45:57 +0000 (+0000) Subject: introducing ap_array_index in util, used in protocol and mod_h2 X-Git-Tag: 2.5.0-alpha~2955 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0ca4ab131ef9c00d3c3e6515b309f12dd8e5359;p=thirdparty%2Fapache%2Fhttpd.git introducing ap_array_index in util, used in protocol and mod_h2 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1696264 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/httpd.h b/include/httpd.h index 285b76b8215..d68db185c43 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -2402,6 +2402,14 @@ AP_DECLARE(char *) ap_get_exec_line(apr_pool_t *p, #define AP_NORESTART APR_OS_START_USEERR + 1 +/** + * Get the index of the string in the array or -1 if not found. + * @param array the array the check + * @param s the string to find + * @return index of string in array or -1 + */ +AP_DECLARE(int) ap_array_index(apr_array_header_t *array, const char *s); + #ifdef __cplusplus } #endif diff --git a/modules/http2/h2_switch.c b/modules/http2/h2_switch.c index 2d521fc9396..ae138ace44f 100644 --- a/modules/http2/h2_switch.c +++ b/modules/http2/h2_switch.c @@ -60,18 +60,6 @@ apr_status_t h2_switch_init(apr_pool_t *pool, server_rec *s) static const char *const mod_ssl[] = { "mod_ssl.c", NULL}; static const char *const mod_core[] = { "core.c", NULL}; -static int h2_util_array_index(const apr_array_header_t *array, const char *s) -{ - int i; - for (i = 0; i < array->nelts; i++) { - const char *p = APR_ARRAY_IDX(array, i, const char*); - if (!strcmp(p, s)) { - return i; - } - } - return -1; -} - static int h2_protocol_propose(conn_rec *c, request_rec *r, server_rec *s, const apr_array_header_t *offers, @@ -125,7 +113,7 @@ static int h2_protocol_propose(conn_rec *c, request_rec *r, /* Add all protocols we know (tls or clear) and that * were offered as options for the switch. */ - if (h2_util_array_index(offers, *protos) >= 0) { + if (ap_array_index(offers, *protos) >= 0) { ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "proposing protocol '%s'", *protos); APR_ARRAY_PUSH(proposals, const char*) = *protos; diff --git a/server/protocol.c b/server/protocol.c index bb2951560ab..444e25cc18f 100644 --- a/server/protocol.c +++ b/server/protocol.c @@ -1947,19 +1947,6 @@ AP_DECLARE(void) ap_send_interim_response(request_rec *r, int send_headers) apr_brigade_destroy(x.bb); } -/* Something like this must be in APR, only I do not find it... */ -static int array_index(apr_array_header_t *array, const char *s) -{ - int i; - for (i = 0; i < array->nelts; i++) { - const char *p = APR_ARRAY_IDX(array, i, const char *); - if (!strcmp(p, s)) { - return i; - } - } - return -1; -} - /* * Compare two protocol identifier. Result is similar to strcmp(): * 0 gives same precedence, >0 means proto1 is preferred. @@ -1969,8 +1956,8 @@ static int protocol_cmp(apr_array_header_t *preferences, const char *proto2) { if (preferences && preferences->nelts > 0) { - int index1 = array_index(preferences, proto1); - int index2 = array_index(preferences, proto2); + int index1 = ap_array_index(preferences, proto1); + int index2 = ap_array_index(preferences, proto2); if (index2 > index1) { return (index1 >= 0) ? 1 : -1; } @@ -2013,8 +2000,8 @@ AP_DECLARE(const char *) ap_select_protocol(conn_rec *c, request_rec *r, /* If the existing protocol has not been proposed, but is a choice, * add it to the proposals implicitly. */ - if (array_index(proposals, existing) < 0 - && array_index(choices, existing) >= 0) { + if (ap_array_index(proposals, existing) < 0 + && ap_array_index(choices, existing) >= 0) { APR_ARRAY_PUSH(proposals, const char*) = existing; } @@ -2028,7 +2015,7 @@ AP_DECLARE(const char *) ap_select_protocol(conn_rec *c, request_rec *r, for (i = 0; i < proposals->nelts; ++i) { const char *p = APR_ARRAY_IDX(proposals, i, const char *); if (conf->protocols->nelts > 0 - && array_index(conf->protocols, p) < 0) { + && ap_array_index(conf->protocols, p) < 0) { /* not a permitted protocol here */ continue; } diff --git a/server/util.c b/server/util.c index c8932a2e772..6f764e6a67c 100644 --- a/server/util.c +++ b/server/util.c @@ -3148,3 +3148,16 @@ AP_DECLARE(char *) ap_get_exec_line(apr_pool_t *p, return apr_pstrndup(p, buf, k); } + +AP_DECLARE(int) ap_array_index(apr_array_header_t *array, const char *s) +{ + int i; + for (i = 0; i < array->nelts; i++) { + const char *p = APR_ARRAY_IDX(array, i, const char *); + if (!strcmp(p, s)) { + return i; + } + } + return -1; +} +