comparison src/http/modules/ngx_http_geo_module.c @ 2452:95f078e7d743

allow insertion range if its start or end is the same as existent one
author Igor Sysoev <igor@sysoev.ru>
date Fri, 16 Jan 2009 16:29:23 +0000
parents b70e7f34d92b
children 1aff348d9aa8
comparison
equal deleted inserted replaced
2451:b70e7f34d92b 2452:95f078e7d743
613 613
614 range[i + 2].start = (u_short) (e + 1); 614 range[i + 2].start = (u_short) (e + 1);
615 range[i + 2].end = range[i].end; 615 range[i + 2].end = range[i].end;
616 range[i + 2].value = range[i].value; 616 range[i + 2].value = range[i].value;
617 617
618 range[i].end = (u_short) (s - 1);
619
620 range[i + 1].start = (u_short) s; 618 range[i + 1].start = (u_short) s;
621 range[i + 1].end = (u_short) e; 619 range[i + 1].end = (u_short) e;
622 range[i + 1].value = ctx->value; 620 range[i + 1].value = ctx->value;
621
622 range[i].end = (u_short) (s - 1);
623
624 goto next;
625 }
626
627 if (s == (ngx_uint_t) range[i].start
628 && e < (ngx_uint_t) range[i].end)
629 {
630 /* shift the range start and insert the new range */
631
632 range = ngx_array_push(a);
633 if (range == NULL) {
634 return NGX_CONF_ERROR;
635 }
636
637 range = a->elts;
638
639 ngx_memcpy(&range[i + 2], &range[i + 1],
640 (a->nelts - 2 - i) * sizeof(ngx_http_geo_range_t));
641
642 range[i + 1].start = (u_short) (e + 1);
643
644 range[i].start = (u_short) s;
645 range[i].end = (u_short) e;
646 range[i].value = ctx->value;
647
648 goto next;
649 }
650
651 if (s > (ngx_uint_t) range[i].start
652 && e == (ngx_uint_t) range[i].end)
653 {
654 /* shift the range end and insert the new range */
655
656 range = ngx_array_push(a);
657 if (range == NULL) {
658 return NGX_CONF_ERROR;
659 }
660
661 range = a->elts;
662
663 ngx_memcpy(&range[i + 2], &range[i + 1],
664 (a->nelts - 2 - i) * sizeof(ngx_http_geo_range_t));
665
666 range[i + 1].start = (u_short) s;
667 range[i + 1].end = (u_short) e;
668 range[i + 1].value = ctx->value;
669
670 range[i].end = (u_short) (s - 1);
623 671
624 goto next; 672 goto next;
625 } 673 }
626 674
627 s = (ngx_uint_t) range[i].start; 675 s = (ngx_uint_t) range[i].start;