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;