--- parser3/src/targets/cgi/parser3.C 2001/11/16 12:38:44 1.136 +++ parser3/src/targets/cgi/parser3.C 2001/11/21 08:34:43 1.142 @@ -4,13 +4,16 @@ Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com) Author: Alexander Petrosyan (http://paf.design.ru) - $Id: parser3.C,v 1.136 2001/11/16 12:38:44 paf Exp $ + $Id: parser3.C,v 1.142 2001/11/21 08:34:43 paf Exp $ */ #include "pa_config_includes.h" #ifdef WIN32 # include +#endif + +#if _MSC_VER # include #endif @@ -111,16 +114,25 @@ void SAPI::log(Pool& , const char *fmt, } void SAPI::die(const char *fmt, ...) { +#ifdef DEBUG_POOL_MALLOC + extern void log_pool_stats(Pool& pool); + log_pool_stats(pool); +#endif + + // log + + // logging is more important than user + // she can cancel download, we'd get SIG_PIPE, + // nothing would be logged then va_list args; va_start(args,fmt); ::log(fmt, args); va_end(args); - char body[MAX_STRING]; - size_t size=vsnprintf(body, MAX_STRING, fmt, args); + // inform user - // - int content_length=strlen(body); + char body[MAX_STRING]; + int content_length=vsnprintf(body, MAX_STRING, fmt, args); // prepare header // let's be honest, that's bad we couldn't produce valid output @@ -289,7 +301,7 @@ void real_parser_handler( // prepare to process request Request request(pool, request_info, - cgi ? String::UL_OPTIMIZED_HTML : String::UL_AS_IS, + cgi ? String::UL_HTML|String::UL_OPTIMIZE_BIT : String::UL_AS_IS, true /* status_allowed */); // some root-controlled location @@ -370,7 +382,7 @@ void call_real_parser_handler__do_SEH( #endif } -#ifdef WIN32 +#if _MSC_VER int failed_new(size_t size) { SAPI::die("out of memory in 'new', failed to allocated %u bytes", size); return 0; // not reached @@ -414,6 +426,14 @@ int main(int argc, char *argv[]) { setmode(fileno(stderr), _O_BINARY); #endif +#if _MSC_VER + _set_new_handler(failed_new); +#endif + +#ifdef HAVE_SET_NEW_HANDLER + std::set_new_handler(failed_new); +#endif + char *filespec_to_process=cgi?getenv("PATH_TRANSLATED"):argv[1]; #ifdef WIN32 back_slashes_to_slashes(filespec_to_process); @@ -423,14 +443,6 @@ int main(int argc, char *argv[]) { const char *request_method=getenv("REQUEST_METHOD"); bool header_only=request_method && strcasecmp(request_method, "HEAD")==0; -#ifdef WIN32 - _set_new_handler(failed_new); -#endif - -#ifdef HAVE_SET_NEW_HANDLER - std::set_new_handler(failed_new); -#endif - try { // global try call_real_parser_handler__do_SEH( filespec_to_process,