--- parser3/src/targets/cgi/parser3.C 2002/02/20 09:13:08 1.160 +++ parser3/src/targets/cgi/parser3.C 2002/03/27 15:30:37 1.165 @@ -4,7 +4,7 @@ Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) - $Id: parser3.C,v 1.160 2002/02/20 09:13:08 paf Exp $ + $Id: parser3.C,v 1.165 2002/03/27 15:30:37 paf Exp $ */ #include "pa_config_includes.h" @@ -29,15 +29,13 @@ #endif //#define DEBUG_POOL_MALLOC -#define DEBUG_STRING_APPENDS_VS_EXPANDS +//#define DEBUG_STRING_APPENDS_VS_EXPANDS #ifdef DEBUG_STRING_APPENDS_VS_EXPANDS extern ulong string_piece_appends, - string_string_appends, wcontext_result_size, total_alloc_size, - double_appends, string_string_shortcut_economy; #endif @@ -63,7 +61,8 @@ const char **RCSIds[]={ 0 }; -const char *PARSER_ROOT_CONFIG_ENV_NAME="PARSER_ROOT_CONFIG"; +const char *PARSER_ROOT_CONFIG_ENV_NAME="HTTP_PARSER_ROOT_CONFIG"; +const char *PARSER_SITE_CONFIG_ENV_NAME="HTTP_PARSER_SITE_CONFIG"; /// IIS refuses to read bigger chunks const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M @@ -198,7 +197,7 @@ void SAPI::send_body(Pool& , const void char *full_file_spec(char *file_name) { if(file_name && !strchr(file_name, '/')) { - static char cwd[MAX_STRING]; getcwd(cwd, MAX_STRING); + char cwd[MAX_STRING]; getcwd(cwd, MAX_STRING); static char buf[MAX_STRING]; snprintf(buf, MAX_STRING, "%s/%s", cwd, file_name); return buf; @@ -241,11 +240,11 @@ void real_parser_handler( memcpy(buf, filespec_to_process, len); buf[len]=0; request_info.document_root=buf; } else - throw Exception(0, 0, - 0, - "CGI: no PATH_INFO defined(in reinventing DOCUMENT_ROOT)"); + throw Exception("parser.runtime", + 0, + "CGI: no PATH_INFO defined(in reinventing DOCUMENT_ROOT)"); } else { - static char buf[MAX_STRING]; + char buf[MAX_STRING]; strncpy(buf, filespec_to_process, MAX_STRING-1); buf[MAX_STRING-1]=0; if(rsplit(buf, '/') || rsplit(buf, '\\')) // strip filename request_info.document_root=buf; @@ -271,9 +270,9 @@ void real_parser_handler( } else request_info.uri=path_info; else - throw Exception(0, 0, - 0, - "CGI: no PATH_INFO defined(in reinventing REQUEST_URI)"); + throw Exception("parser.runtime", + 0, + "CGI: no PATH_INFO defined(in reinventing REQUEST_URI)"); #ifndef WIN32 // they've changed this under IIS5. @@ -330,26 +329,31 @@ void real_parser_handler( #endif } + const char *site_config_filespec; + if(const char *site_config_by_env=getenv(PARSER_SITE_CONFIG_ENV_NAME)) + site_config_filespec=site_config_by_env; + else { // beside by binary // @todo full path, not ./! - static char site_config_path[MAX_STRING]; - strncpy(site_config_path, argv0, MAX_STRING-1); site_config_path[MAX_STRING-1]=0; // filespec of my binary - if(!( - rsplit(site_config_path, '/') || - rsplit(site_config_path, '\\'))) { // strip filename - // no path, just filename - site_config_path[0]='.'; site_config_path[1]=0; + char beside_binary_path[MAX_STRING]; + strncpy(beside_binary_path, argv0, MAX_STRING-1); beside_binary_path[MAX_STRING-1]=0; // filespec of my binary + if(!( + rsplit(beside_binary_path, '/') || + rsplit(beside_binary_path, '\\'))) { // strip filename + // no path, just filename + beside_binary_path[0]='.'; beside_binary_path[1]=0; + } + char buf[MAX_STRING]; + snprintf(buf, MAX_STRING, + "%s/%s", + beside_binary_path, CONFIG_FILE_NAME); + site_config_filespec=buf; } - char site_config_filespec[MAX_STRING]; - snprintf(site_config_filespec, MAX_STRING, - "%s/%s", - site_config_path, CONFIG_FILE_NAME); - // process the request request.core( - root_config_filespec, false, - site_config_filespec, false, + root_config_filespec, false /*don't fail_on_read_problem*/, + site_config_filespec, false /*don't fail_on_read_problem*/, header_only); // @@ -362,11 +366,9 @@ void real_parser_handler( #ifdef DEBUG_STRING_APPENDS_VS_EXPANDS SAPI::log(pool, - "string piece appends=%lu, string string appends=%lu, wcontext_result_size=%lu, double_appends=%lu, string_string_shortcut_economy=%lu, total_alloc_size=%lu", + "string piece appends=%lu, wcontext_result_size=%lu, string_string_shortcut_economy_closer=%lu, total_alloc_size=%lu", string_piece_appends, - string_string_appends, wcontext_result_size, - double_appends, string_string_shortcut_economy, total_alloc_size); #endif @@ -391,13 +393,13 @@ void call_real_parser_handler__do_SEH( if(system_exception) if(_EXCEPTION_RECORD *er=system_exception->ExceptionRecord) - throw Exception(0, 0, - 0, - "Exception 0x%08X at 0x%08X", er->ExceptionCode, er->ExceptionAddress); + throw Exception(0, + 0, + "Exception 0x%08X at 0x%08X", er->ExceptionCode, er->ExceptionAddress); else - throw Exception(0, 0, 0, "Exception "); + throw Exception(0, 0, "Exception "); else - throw Exception(0, 0, 0, "Exception "); + throw Exception(0, 0, "Exception "); } #endif }