Mercurial > hg > nginx-ranges
comparison src/http/ngx_http_parse.c @ 22:8b6db3bda591 NGINX_0_1_11
nginx 0.1.11
*) Feature: the worker_priority directive.
*) Change: both tcp_nopush and tcp_nodelay directives affect the
transferred response.
*) Bugfix: nginx did not call initgroups().
Thanks to Andrew Sitnikov and Andrei Nigmatulin.
*) Change: now the ngx_http_autoindex_module shows the file size in the
bytes.
*) Bugfix: the ngx_http_autoindex_module returned the 500 error if the
broken symlink was in a directory.
*) Bugfix: the files bigger than 4G could not be transferred using
sendfile.
*) Bugfix: if the backend was resolved to several backends and there
was an error while the response waiting then process may got caught
in an endless loop.
*) Bugfix: the worker process may exit with the "unknown cycle" message
when the /dev/poll method was used.
*) Bugfix: "close() channel failed" errors.
*) Bugfix: the autodetection of the "nobody" and "nogroup" groups.
*) Bugfix: the send_lowat directive did not work on Linux.
*) Bugfix: the segmentation fault occurred if there was no events
section in configuration.
*) Bugfix: nginx could not be built on OpenBSD.
*) Bugfix: the double slashes in "://" in the URI were converted to
":/".
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Thu, 02 Dec 2004 00:00:00 +0300 |
parents | 636dad238b63 |
children | 7ca9bdc82b3f |
comparison
equal
deleted
inserted
replaced
21:4eeb9cfef970 | 22:8b6db3bda591 |
---|---|
663 ngx_int_t ngx_http_parse_complex_uri(ngx_http_request_t *r) | 663 ngx_int_t ngx_http_parse_complex_uri(ngx_http_request_t *r) |
664 { | 664 { |
665 u_char c, ch, decoded, *p, *u; | 665 u_char c, ch, decoded, *p, *u; |
666 enum { | 666 enum { |
667 sw_usual = 0, | 667 sw_usual = 0, |
668 sw_colon, | |
669 sw_colon_slash, | |
668 sw_slash, | 670 sw_slash, |
669 sw_dot, | 671 sw_dot, |
670 sw_dot_dot, | 672 sw_dot_dot, |
671 #if (NGX_WIN32) | 673 #if (NGX_WIN32) |
672 sw_dot_dot_dot, | 674 sw_dot_dot_dot, |
728 state = sw_quoted; | 730 state = sw_quoted; |
729 break; | 731 break; |
730 case '?': | 732 case '?': |
731 r->args_start = p; | 733 r->args_start = p; |
732 break; | 734 break; |
735 case ':': | |
736 state = sw_colon; | |
737 *u++ = ch; | |
738 break; | |
733 case '.': | 739 case '.': |
734 r->uri_ext = u + 1; | 740 r->uri_ext = u + 1; |
735 default: | 741 *u++ = ch; |
742 break; | |
743 default: | |
744 *u++ = ch; | |
745 break; | |
746 } | |
747 ch = *p++; | |
748 break; | |
749 | |
750 case sw_colon: | |
751 switch(ch) { | |
752 #if (NGX_WIN32) | |
753 case '\\': | |
754 state = sw_colon_slash; | |
755 *u++ = '/'; | |
756 break; | |
757 #endif | |
758 case '/': | |
759 state = sw_colon_slash; | |
760 *u++ = ch; | |
761 break; | |
762 case ':': | |
763 *u++ = ch; | |
764 break; | |
765 case '%': | |
766 quoted_state = state; | |
767 state = sw_quoted; | |
768 break; | |
769 default: | |
770 state = sw_usual; | |
771 *u++ = ch; | |
772 break; | |
773 } | |
774 ch = *p++; | |
775 break; | |
776 | |
777 case sw_colon_slash: | |
778 switch(ch) { | |
779 #if (NGX_WIN32) | |
780 case '\\': | |
781 state = sw_slash; | |
782 *u++ = '/'; | |
783 break; | |
784 #endif | |
785 case '/': | |
786 state = sw_slash; | |
787 *u++ = ch; | |
788 break; | |
789 case '.': | |
790 state = sw_dot; | |
791 *u++ = ch; | |
792 break; | |
793 case '%': | |
794 quoted_state = state; | |
795 state = sw_quoted; | |
796 break; | |
797 default: | |
798 state = sw_usual; | |
736 *u++ = ch; | 799 *u++ = ch; |
737 break; | 800 break; |
738 } | 801 } |
739 ch = *p++; | 802 ch = *p++; |
740 break; | 803 break; |