--- parser3/src/targets/cgi/parser3.C 2001/09/04 19:05:04 1.108 +++ parser3/src/targets/cgi/parser3.C 2001/09/26 11:48:04 1.115 @@ -2,10 +2,10 @@ Parser: scripting and CGI main. Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com) - Author: Alexander Petrosyan (http://design.ru/paf) + + $Id: parser3.C,v 1.115 2001/09/26 11:48:04 parser Exp $ */ -static const char *RCSId="$Id: parser3.C,v 1.108 2001/09/04 19:05:04 parser Exp $"; #include "pa_config_includes.h" @@ -22,6 +22,27 @@ static const char *RCSId="$Id: parser3.C //#define DEBUG_POOL_MALLOC +// consts + +extern const char *main_RCSIds[]; +#ifdef SMTP +extern const char *smtp_RCSIds[]; +#endif +extern const char *gd_RCSIds[]; +extern const char *classes_RCSIds[]; +extern const char *types_RCSIds[]; +extern const char *parser3_RCSIds[]; +const char **RCSIds[]={ + main_RCSIds, +#ifdef SMTP + smtp_RCSIds, +#endif + gd_RCSIds, + classes_RCSIds, + types_RCSIds, + parser3_RCSIds, + 0 +}; /// IIS refuses to read bigger chunks const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M @@ -87,13 +108,8 @@ void SAPI::log(Pool& pool, const char *f fflush(f); } -static char *_getenv(const char *name) { - char *result=getenv(name); - return result && *result ? result : 0; -} - const char *SAPI::get_env(Pool& pool, const char *name) { - return _getenv(name); + return getenv(name); } size_t SAPI::read_post(Pool& pool, char *buf, size_t max_bytes) { @@ -149,16 +165,17 @@ char *full_file_spec(char *file_name) { wich is tested but seems slow. */ int main(int argc, char *argv[]) { + int result; argv0=argv[0]; umask(2); // were we started as CGI? cgi= - _getenv("SERVER_SOFTWARE") || - _getenv("SERVER_NAME") || - _getenv("GATEWAY_INTERFACE") || - _getenv("REQUEST_METHOD"); + getenv("SERVER_SOFTWARE") || + getenv("SERVER_NAME") || + getenv("GATEWAY_INTERFACE") || + getenv("REQUEST_METHOD"); if(!cgi) { if(argc<2) { @@ -179,13 +196,13 @@ int main(int argc, char *argv[]) { setmode(fileno(stderr), _O_BINARY); #endif - char *filespec_to_process=cgi?_getenv("PATH_TRANSLATED"):argv[1]; + char *filespec_to_process=cgi?getenv("PATH_TRANSLATED"):argv[1]; #ifdef WIN32 back_slashes_to_slashes(filespec_to_process); #endif filespec_to_process=full_file_spec(filespec_to_process); - const char *request_method=_getenv("REQUEST_METHOD"); + const char *request_method=getenv("REQUEST_METHOD"); bool header_only=request_method && strcasecmp(request_method, "HEAD")==0; PTRY { // global try // must be first in PTRY{}PCATCH @@ -278,31 +295,42 @@ int main(int argc, char *argv[]) { // some root-controlled location #ifdef SYSCONFDIR - const char *root_auto_path=SYSCONFDIR; + const char *root_config_filespec=SYSCONFDIR "/" CONFIG_FILE_NAME; #else # ifdef WIN32 // c:\windows - static char root_auto_path[MAX_STRING]; - GetWindowsDirectory(root_auto_path, MAX_STRING); + char root_config_path[MAX_STRING]; + GetWindowsDirectory(root_config_path, MAX_STRING); + + char root_config_filespec[MAX_STRING]; + snprintf(root_config_filespec, MAX_STRING, + "%s/%s", + root_config_path, CONFIG_FILE_NAME); # else #error must be compiled either configure/make or MSVC++ # endif #endif // beside by binary - static char site_auto_path[MAX_STRING]; - strncpy(site_auto_path, argv0, MAX_STRING-1); site_auto_path[MAX_STRING-1]=0; // filespec of my 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_auto_path, '/') || - rsplit(site_auto_path, '\\'))) { // strip filename + rsplit(site_config_path, '/') || + rsplit(site_config_path, '\\'))) { // strip filename // no path, just filename - site_auto_path[0]='.'; site_auto_path[1]=0; + site_config_path[0]='.'; site_config_path[1]=0; } + + 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_auto_path, false, - site_auto_path, false, + root_config_filespec, false, + site_config_filespec, false, header_only); // @@ -318,14 +346,8 @@ int main(int argc, char *argv[]) { SetUnhandledExceptionFilter(0); #endif -#ifndef WIN32 - // - if(!cgi) - SAPI::send_body(pool, "\n", 1); -#endif - // successful finish - return 0; + result=0; } PCATCH(e) { // global problem // must be first in PCATCH{} #ifdef WIN32 @@ -355,14 +377,15 @@ int main(int argc, char *argv[]) { if(!header_only) SAPI::send_body(pool, body, content_length); -#ifndef WIN32 - // - if(!cgi) - SAPI::send_body(pool, "\n", 1); -#endif - // unsuccessful finish - return 1; + result=1; } PEND_CATCH + +#ifndef WIN32 + // + if(!cgi) + SAPI::send_body(pool, "\n", 1); +#endif + return result; }