/*################################################################################### # # Embperl - Copyright (c) 1997-2005 Gerald Richter / ECOS # # You may distribute under the terms of either the GNU General Public # License or the Artistic License, as specified in the Perl README file. # For use with Apache httpd and mod_perl, see also Apache copyright. # # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. # # $Id$ # ###################################################################################*/ #include "ep.h" #include "epmacro.h" /*--------------------------------------------------------------------------- * DoLogError */ /*! * * \_en * Logs the occurence of an error to the embperl logfile and the httpd error log * * @param r the request object (maybe NULL) * @param a the application object (maybe NULL) * @param rc the error code * @param errdat1 addtional informations * @param errdat2 addtional informations * \endif * * \_de * logged das auftreten eines Fehler in das Embperl Logfile und den httpd * error log * * @param r das Requestobjekt (kann NULL sein) * @param a das Applikationobjekt (kann NULL sein) * @param rc Fehlercode * @param errdat1 Zusätzliche Informationen * @param errdat2 Zusätzliche Informationen * \endif * * ------------------------------------------------------------------------ */ static char * DoLogError (/*i/o*/ struct tReq * r, /*i/o*/ struct tApp * a, /*in*/ int rc, /*in*/ const char * errdat1, /*in*/ const char * errdat2) { const char * msg ; char * sText ; SV * pSV ; SV * pSVLine = NULL ; STRLEN l ; pid_t nPid ; #ifdef PERL_IMPLICIT_CONTEXT pTHX ; if (r) aTHX = r -> pPerlTHX ; else if (a) aTHX = a -> pPerlTHX ; else aTHX = PERL_GET_THX ; #endif if (r) { r -> errdat1 [sizeof (r -> errdat1) - 1] = '\0' ; r -> errdat2 [sizeof (r -> errdat2) - 1] = '\0' ; GetLineNo (r) ; errdat1 = r -> errdat1 ; errdat2 = r -> errdat2 ; if (rc != rcPerlWarn) r -> bError = 1 ; nPid = r -> pThread -> nPid ; a = r -> pApp ; } else if (a) { nPid = a -> pThread -> nPid ; } else nPid = getpid() ; if (!errdat1) errdat1 = "" ; if (!errdat2) errdat2 = "" ; switch (rc) { case ok: msg ="[%d]ERR: %d: %s ok%s%s" ; break ; case rcStackOverflow: msg ="[%d]ERR: %d: %s Stack Overflow%s%s" ; break ; case rcArgStackOverflow: msg ="[%d]ERR: %d: %s Argumnet Stack Overflow (%s)%s" ; break ; case rcStackUnderflow: msg ="[%d]ERR: %d: %s Stack Underflow%s%s" ; break ; case rcEndifWithoutIf: msg ="[%d]ERR: %d: %s endif without if%s%s" ; break ; case rcElseWithoutIf: msg ="[%d]ERR: %d: %s else without if%s%s" ; break ; case rcEndwhileWithoutWhile: msg ="[%d]ERR: %d: %s endwhile without while%s%s" ; break ; case rcEndtableWithoutTable: msg ="[%d]ERR: %d: %s blockend <%s> does not match blockstart <%s>" ; break ; case rcTablerowOutsideOfTable: msg ="[%d]ERR: %d: %s outside of table%s%s" ; break ; case rcCmdNotFound: msg ="[%d]ERR: %d: %s Unknown Command %s%s" ; break ; case rcOutOfMemory: msg ="[%d]ERR: %d: %s Out of memory %s %s" ; break ; case rcPerlVarError: msg ="[%d]ERR: %d: %s Perl variable error %s%s" ; break ; case rcHashError: msg ="[%d]ERR: %d: %s Perl hash error, %%%s does not exist%s" ; break ; case rcArrayError: msg ="[%d]ERR: %d: %s Perl array error , @%s does not exist%s" ; break ; case rcFileOpenErr: msg ="[%d]ERR: %d: %s File %s open error: %s" ; break ; case rcLogFileOpenErr: msg ="[%d]ERR: %d: %s Logfile %s open error: %s" ; break ; case rcMissingRight: msg ="[%d]ERR: %d: %s Missing right %s%s" ; break ; case rcNoRetFifo: msg ="[%d]ERR: %d: %s No Return Fifo%s%s" ; break ; case rcMagicError: msg ="[%d]ERR: %d: %s Perl Magic Error%s%s" ; break ; case rcWriteErr: msg ="[%d]ERR: %d: %s File write Error%s%s" ; break ; case rcUnknownNameSpace: msg ="[%d]ERR: %d: %s Namespace %s unknown%s" ; break ; case rcInputNotSupported: msg ="[%d]ERR: %d: %s Input not supported in mod_perl mode%s%s" ; break ; case rcCannotUsedRecursive: msg ="[%d]ERR: %d: %s Cannot be called recursivly in mod_perl mode%s%s" ; break ; case rcEndtableWithoutTablerow: msg ="[%d]ERR: %d: %s without %s%s" ; break ; case rcEndtextareaWithoutTextarea: msg ="[%d]ERR: %d: %s without