comparison src/http/ngx_http_parse.c @ 201:267ea1d98683

nginx-0.0.1-2003-11-30-23:03:18 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 30 Nov 2003 20:03:18 +0000
parents abeaebe0a33c
children e0bcfb77d6c7
comparison
equal deleted inserted replaced
200:abeaebe0a33c 201:267ea1d98683
640 quoted_state = sw_usual; 640 quoted_state = sw_usual;
641 641
642 state = sw_usual; 642 state = sw_usual;
643 p = r->uri_start; 643 p = r->uri_start;
644 u = r->uri.data; 644 u = r->uri.data;
645 r->uri_ext = NULL;
645 646
646 ch = *p++; 647 ch = *p++;
647 648
648 while (p < r->uri_start + r->uri.len + 1) { 649 while (p < r->uri_start + r->uri.len + 1) {
649 650
652 653
653 switch (state) { 654 switch (state) {
654 case sw_usual: 655 case sw_usual:
655 switch(ch) { 656 switch(ch) {
656 case '/': 657 case '/':
658 r->uri_ext = NULL;
657 state = sw_slash; 659 state = sw_slash;
658 *u++ = ch; 660 *u++ = ch;
659 break; 661 break;
660 case '%': 662 case '%':
661 quoted_state = state; 663 quoted_state = state;
662 state = sw_quoted; 664 state = sw_quoted;
663 break; 665 break;
666 case '.':
667 r->uri_ext = u + 1;
664 default: 668 default:
665 *u++ = ch; 669 *u++ = ch;
666 break; 670 break;
667 } 671 }
668 ch = *p++; 672 ch = *p++;
809 } 813 }
810 814
811 r->uri.len = u - r->uri.data; 815 r->uri.len = u - r->uri.data;
812 r->uri.data[r->uri.len] = '\0'; 816 r->uri.data[r->uri.len] = '\0';
813 817
818 if (r->uri_ext) {
819 r->exten.len = u - r->uri_ext;
820
821 if (!(r->exten.data = ngx_palloc(r->pool, r->exten.len + 1))) {
822 return NGX_HTTP_INTERNAL_SERVER_ERROR;
823 }
824
825 ngx_cpystrn(r->exten.data, r->uri_ext, r->exten.len + 1);
826 }
827
828 r->uri_ext = NULL;
829
814 return NGX_OK; 830 return NGX_OK;
815 } 831 }