Annotation of parser3/src/main/pa_exception.C, revision 1.43.2.1

1.13      parser      1: /** @file
                      2:        Parser: exception class.
                      3: 
1.43      paf         4:        Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com)
1.38      paf         5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.41      paf         6: */
1.13      parser      7: 
1.43.2.1! paf         8: static const char* IDENT_EXCEPTION_C="$Date: 2003/01/21 15:51:14 $";
1.13      parser      9: 
1.43.2.1! paf        10: //#include "pa_common.h"
1.13      parser     11: #include "pa_exception.h"
1.43.2.1! paf        12: //#include "pa_globals.h"
1.39      paf        13: #include "pa_sapi.h"
1.43.2.1! paf        14: #include "pa_string.h"
1.13      parser     15: 
1.23      paf        16: Exception::Exception() {
1.40      paf        17:        ftype=0;
                     18:        fproblem_source=0;
1.26      paf        19:        owns_comment=false; fcomment=0;
1.23      paf        20: }
1.40      paf        21: Exception::Exception(const char *atype, 
1.34      paf        22:                                          const String *aproblem_source, 
                     23:                                          const char *comment_fmt, ...) {
1.15      parser     24:        //_asm int 3;
1.27      paf        25: //__asm__("int3");
1.30      paf        26:        ftype=atype;
                     27:        fproblem_source=aproblem_source;
                     28:        owns_comment=true;
1.27      paf        29: 
1.13      parser     30:        if(comment_fmt) {
1.26      paf        31:                fcomment=(char *)malloc(MAX_STRING);
1.39      paf        32:                if(!fcomment)
                     33:                        SAPI::die("out of memory in 'Exception::Exception', failed to allocated %u bytes", MAX_STRING);
1.34      paf        34:                va_list args;
                     35:                va_start(args, comment_fmt);
1.13      parser     36:                vsnprintf(fcomment, MAX_STRING, comment_fmt, args);
1.34      paf        37:                va_end(args);
1.26      paf        38:        } else
                     39:                fcomment=0;
                     40: }
1.33      paf        41: 
                     42: #ifdef XML
1.28      paf        43: Exception::Exception(
                     44:        const String *aproblem_source, 
                     45:        GdomeException& exc) :
1.40      paf        46:        ftype("xml"),
1.28      paf        47:        fproblem_source(aproblem_source),
                     48:        owns_comment(true) {
                     49: 
1.31      paf        50:        const char *xml_generic_errors=xmlGenericErrors();
                     51:        if(xml_generic_errors || exc) {
1.28      paf        52:                const char *s;
                     53:                switch((GdomeExceptionCode)exc) {
                     54:                case GDOME_NOEXCEPTION_ERR: s="NOEXCEPTION_ERR"; break;
                     55:                case GDOME_INDEX_SIZE_ERR: s="INDEX_SIZE_ERR"; break;
                     56:                case GDOME_DOMSTRING_SIZE_ERR: s="DOMSTRING_SIZE_ERR"; break;
                     57:                case GDOME_HIERARCHY_REQUEST_ERR: s="HIERARCHY_REQUEST_ERR"; break;
                     58:                case GDOME_WRONG_DOCUMENT_ERR: s="WRONG_DOCUMENT_ERR"; break;
                     59:                case GDOME_INVALID_CHARACTER_ERR: s="INVALID_CHARACTER_ERR"; break;
                     60:                case GDOME_NO_DATA_ALLOWED_ERR: s="NO_DATA_ALLOWED_ERR"; break;
                     61:                case GDOME_NO_MODIFICATION_ALLOWED_ERR: s="NO_MODIFICATION_ALLOWED_ERR"; break;
                     62:                case GDOME_NOT_FOUND_ERR: s="NOT_FOUND_ERR"; break;
                     63:                case GDOME_NOT_SUPPORTED_ERR: s="NOT_SUPPORTED_ERR"; break;
                     64:                case GDOME_INUSE_ATTRIBUTE_ERR: s="INUSE_ATTRIBUTE_ERR"; break;
                     65:                case GDOME_INVALID_STATE_ERR: s="INVALID_STATE_ERR"; break;
                     66:                case GDOME_SYNTAX_ERR: s="SYNTAX_ERR"; break;
                     67:                case GDOME_INVALID_MODIFICATION_ERR: s="INVALID_MODIFICATION_ERR"; break;
                     68:                case GDOME_NAMESPACE_ERR: s="NAMESPACE_ERR"; break;
                     69:                case GDOME_INVALID_ACCESS_ERR: s="INVALID_ACCESS_ERR"; break;
                     70:                case GDOME_NULL_POINTER_ERR: s="NULL_POINTER_ERR"; break;
                     71:                default: s="<UNKNOWN CODE>"; break;
                     72:                }
                     73:                
                     74:                fcomment=(char *)malloc(MAX_STRING);
1.36      paf        75:                const char *xml_error_message;
                     76:                const char *xml_error_prefix;
                     77:                if(xml_generic_errors) {
                     78:                        xml_error_prefix="\n";
                     79:                        xml_error_message=xml_generic_errors;
                     80:                } else {
                     81:                        xml_error_prefix="";
                     82:                        xml_error_message="";
                     83:                }
1.32      paf        84:                if(exc)
                     85:                        snprintf(fcomment, MAX_STRING, 
1.35      paf        86:                                "DOMException %s (%d)."
                     87:                                "%s%s", 
1.32      paf        88:                                        s,  // decoded code of exception
                     89:                                        exc, // DOM exception code
1.35      paf        90:                                        xml_error_prefix, xml_error_message // xml generic messages accumulated
1.32      paf        91:                        );
                     92:                else // no DOM exception
                     93:                        snprintf(fcomment, MAX_STRING, 
                     94:                                "%s", 
                     95:                                        xml_error_message // xml generic messages accumulated
                     96:                        );
1.31      paf        97:                if(xml_generic_errors)
                     98:                        free((void *)xml_generic_errors);
1.28      paf        99:        } else
1.29      paf       100:                fcomment=0;
1.28      paf       101: }
1.18      parser    102: #endif
1.43.2.1! paf       103: 
        !           104: object_ptr<const String> Exception::problem_source() const { 
        !           105:        return fproblem_source && fproblem_source->size()?fproblem_source:0; 
        !           106: }

E-mail: