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