29 if (len != (
size_t) elt->
len) {
33 for (i = 0; i < len; i++) {
34 if (name[i] != elt->
name[i]) {
65 if (name[n - 1] ==
'.') {
74 for (i = n; i < len; i++) {
101 if ((uintptr_t) value & 2) {
107 if ((uintptr_t) value & 1) {
112 ((uintptr_t) value & (uintptr_t) ~3);
127 if ((uintptr_t) value & 1) {
136 return (
void *) ((uintptr_t) value & (uintptr_t) ~3);
158 for (i = 0; i < len; i++) {
159 if (name[i] ==
'.') {
188 if ((uintptr_t) value & 2) {
248 #define NGX_HASH_ELT_SIZE(name) \
249 (sizeof(void *) + ngx_align((name)->key.len + 2, sizeof(void *)))
260 for (n = 0; n < nelts; n++) {
264 "could not build the %s, you should "
265 "increase %s_bucket_size: %i",
278 start = nelts / (bucket_size / (2 *
sizeof(
void *)));
279 start = start ? start : 1;
285 for (size = start; size < hinit->
max_size; size++) {
289 for (n = 0; n < nelts; n++) {
290 if (names[n].key.data == NULL) {
299 "%ui: %ui %ui \"%V\"",
300 size, key, test[key], &names[n].
key);
303 if (test[key] > (u_short) bucket_size) {
316 "could not build the %s, you should increase "
317 "either %s_max_size: %i or %s_bucket_size: %i",
327 for (i = 0; i < size; i++) {
328 test[
i] =
sizeof(
void *);
331 for (n = 0; n < nelts; n++) {
332 if (names[n].key.data == NULL) {
342 for (i = 0; i < size; i++) {
343 if (test[i] ==
sizeof(
void *)) {
352 if (hinit->
hash == NULL) {
355 if (hinit->
hash == NULL) {
365 if (buckets == NULL) {
379 for (i = 0; i < size; i++) {
380 if (test[i] ==
sizeof(
void *)) {
389 for (i = 0; i < size; i++) {
393 for (n = 0; n < nelts; n++) {
394 if (names[n].key.data == NULL) {
402 elt->
len = (u_short) names[n].key.len;
409 for (i = 0; i < size; i++) {
410 if (buckets[i] == NULL) {
426 for (i = 0; i < size; i++) {
445 "%ui: %p \"%V\" %ui", i, elt, &val, key);
469 if (ngx_array_init(&curr_names, hinit->
temp_pool, nelts,
476 if (ngx_array_init(&next_names, hinit->
temp_pool, nelts,
483 for (n = 0; n < nelts; n =
i) {
487 "wc0: \"%V\"", &names[n].
key);
492 for (len = 0; len < names[n].
key.
len; len++) {
493 if (names[n].key.data[len] ==
'.') {
511 "wc1: \"%V\" %ui", &name->
key, dot);
520 next_names.
nelts = 0;
522 if (names[n].key.len != len) {
524 if (next_name == NULL) {
535 "wc2: \"%V\"", &next_name->
key);
539 for (i = n + 1; i < nelts; i++) {
545 && names[i].key.len > len
546 && names[i].
key.
data[len] !=
'.')
552 if (next_name == NULL) {
563 "wc3: \"%V\"", &next_name->
key);
567 if (next_names.
nelts) {
581 if (names[n].key.len == len) {
585 name->
value = (
void *) ((uintptr_t) wdc | (dot ? 3 : 2));
588 name->
value = (
void *) ((uintptr_t) name->
value | 1);
610 for (i = 0; i < len; i++) {
625 for (i = 0; i < len; i++) {
728 for (i = 0; i < key->
len; i++) {
730 if (key->
data[i] ==
'*') {
736 if (key->
data[i] ==
'.' && key->
data[i + 1] ==
'.') {
741 if (key->
len > 1 && key->
data[0] ==
'.') {
748 if (key->
data[0] ==
'*' && key->
data[1] ==
'.') {
753 if (key->
data[i - 2] ==
'.' && key->
data[i - 1] ==
'*') {
769 for (i = 0; i < last; i++) {
784 if (last != name[i].len) {
839 if (len != name[i].len) {
862 name->
len = last - 1;
864 if (name->
data == NULL) {
887 for (i = last - 1;
i; i--) {
888 if (key->
data[i] ==
'.') {
934 for (i = 0; i < keys->
nelts; i++) {
935 if (len != name[i].len) {
956 name->
len = last - skip;
958 if (name->
data == NULL) {