#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
+ * Get the first index of the string in the array or -1 if not found. Start
+ * searching a start.
+ * @param array The array the check
+ * @param s The string to find
+ * @param start Start index for search. If start is greater or
+ equal to array length, -1 will be returned.
* @return index of string in array or -1
*/
-AP_DECLARE(int) ap_array_index(const apr_array_header_t *array, const char *s);
+AP_DECLARE(int) ap_array_index(const apr_array_header_t *array,
+ const char *s,
+ apr_size_t start);
+
+/**
+ * Check if the string is member of the given array by strcmp.
+ * @param array The array the check
+ * @param s The string to find
+ * @return !=0 iff string is member of array
+ */
+AP_DECLARE(int) ap_array_contains(const apr_array_header_t *array,
+ const char *s);
#ifdef __cplusplus
}
/* Add all protocols we know (tls or clear) and that
* are part of the offerings (if there have been any).
*/
- if (!offers || ap_array_index(offers, *protos) >= 0) {
+ if (!offers || ap_array_contains(offers, *protos)) {
ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c,
"proposing protocol '%s'", *protos);
APR_ARRAY_PUSH(proposals, const char*) = *protos;
const char *proto2)
{
if (preferences && preferences->nelts > 0) {
- int index1 = ap_array_index(preferences, proto1);
- int index2 = ap_array_index(preferences, proto2);
+ int index1 = ap_array_index(preferences, proto1, 0);
+ int index2 = ap_array_index(preferences, proto2, 0);
if (index2 > index1) {
return (index1 >= 0) ? 1 : -1;
}
/* If the existing protocol has not been proposed, but is a choice,
* add it to the proposals implicitly.
*/
- if (ap_array_index(proposals, existing) < 0
- && ap_array_index(choices, existing) >= 0) {
+ if (!ap_array_contains(proposals, existing)
+ && ap_array_contains(choices, existing)) {
APR_ARRAY_PUSH(proposals, const char*) = existing;
}
for (i = 0; i < proposals->nelts; ++i) {
const char *p = APR_ARRAY_IDX(proposals, i, const char *);
if (conf->protocols->nelts > 0
- && ap_array_index(conf->protocols, p) < 0) {
+ && !ap_array_contains(conf->protocols, p)) {
/* not a permitted protocol here */
continue;
}
return apr_pstrndup(p, buf, k);
}
-AP_DECLARE(int) ap_array_index(const apr_array_header_t *array, const char *s)
+AP_DECLARE(int) ap_array_index(const apr_array_header_t *array,
+ const char *s,
+ apr_size_t start)
{
- int i;
- for (i = 0; i < array->nelts; i++) {
+ apr_size_t i;
+ for (i = start; i < array->nelts; i++) {
const char *p = APR_ARRAY_IDX(array, i, const char *);
if (!strcmp(p, s)) {
- return i;
+ return (int)i;
}
}
return -1;
}
+AP_DECLARE(int) ap_array_contains(const apr_array_header_t *array,
+ const char *s)
+{
+ return (ap_array_index(array, s, 0) >= 0);
+}
+