Mercurial > hg > nginx
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; |