[4suite-checkins] In 4Suite/Ft/Xml/src/domlette, files expat_module.c

Jeremy Kloth jkloth at 4suite.org
Tue Dec 19 17:57:11 MST 2006


Modified Files:
    expat_module.c

Log Message:
Forward port changes from XML1_0-maint.
Updated XML1_0-maint-merge tag

ViewCVS diff:
  http://cvs.4suite.org/viewcvs/4Suite/Ft/Xml/src/domlette/expat_module.c.diff?r1=1.114&r2=1.115
ViewCVS view:
  http://cvs.4suite.org/viewcvs/4Suite/Ft/Xml/src/domlette/expat_module.c?rev=1.115&content-type=text/vnd.viewcvs-markup

Index: expat_module.c
===================================================================
RCS file: /var/local/cvsroot/4Suite/Ft/Xml/src/domlette/expat_module.c,v
retrieving revision 1.114
retrieving revision 1.115
diff -U2 -r1.114 -r1.115
--- expat_module.c	19 Dec 2006 00:36:07 -0000	1.114
+++ expat_module.c	20 Dec 2006 00:57:10 -0000	1.115
@@ -1855,4 +1855,40 @@
 }
 
+static void popElementState(ExpatParser parser)
+{
+  PyObject *temp;
+
+  temp = Stack_Pop(parser->xml_base_stack);
+  Py_DECREF(temp);
+
+  temp = Stack_Pop(parser->xml_lang_stack);
+  Py_DECREF(temp);
+
+  temp = Stack_Pop(parser->xml_space_stack);
+  Py_DECREF(temp);
+
+  temp = Stack_Pop(parser->preserve_whitespace_stack);
+  Py_DECREF(temp);
+}
+
+static ExpatStatus validateEndElement(ExpatParser parser,
+                                      const XML_Char *name)
+{
+  ExpatExpandedName *expanded_name;
+
+  switch (Validator_EndElement(parser->context->dtd->validator)) {
+  case 0:
+    expanded_name = makeExpandedName(parser, name);
+    if (expanded_name == NULL) {
+      return Expat_FatalError(parser);
+    }
+    return Expat_ReportError(parser, "INCOMPLETE_ELEMENT", "{sO}",
+                             "element", expanded_name->qualifiedName);
+  case 1:
+    return EXPAT_STATUS_OK;
+  default:
+    return Expat_FatalError(parser);
+  }
+}
 
 /** XInclude Processing ***********************************************/
@@ -2789,24 +2825,7 @@
         }
         if (Expat_HasFlag(parser, EXPAT_FLAG_VALIDATE)) {
-          ExpatExpandedName *expanded_name;
-          switch (Validator_EndElement(parser->context->dtd->validator)) {
-          case 0:
-            expanded_name = makeExpandedName(parser, name);
-            if (expanded_name == NULL) {
-              Expat_FatalError(parser);
-              return;
-            }
-            if (Expat_ReportError(parser, "INCOMPLETE_ELEMENT", "{sO}",
-                                  "element", expanded_name->qualifiedName)
-                == EXPAT_STATUS_ERROR) {
-              return;
-            }
-          case 1:
-            break;
-          default:
-            Expat_FatalError(parser);
-            return;
-          }
+          if (validateEndElement(parser, name) == EXPAT_STATUS_ERROR) return;
         }
+        popElementState(parser);
       }
 #ifdef DEBUG_XINCLUDE
@@ -3484,5 +3503,4 @@
   ExpatStatus status;
   ExpatExpandedName *expanded_name;
-  PyObject *temp;
 
   Debug_ParserFunctionCall(expat_EndElement, parser);
@@ -3503,17 +3521,5 @@
 
   if (Expat_HasFlag(parser, EXPAT_FLAG_VALIDATE)) {
-    switch (Validator_EndElement(parser->context->dtd->validator)) {
-    case 0:
-      if (Expat_ReportError(parser, "INCOMPLETE_ELEMENT", "{sO}",
-                            "element", expanded_name->qualifiedName)
-          == EXPAT_STATUS_ERROR) {
-        return;
-      }
-    case 1:
-      break;
-    default:
-      Expat_FatalError(parser);
-      return;
-    }
+    if (validateEndElement(parser, name) == EXPAT_STATUS_ERROR) return;
   }
 
@@ -3521,15 +3527,5 @@
   if (status == EXPAT_STATUS_ERROR) Expat_FatalError(parser);
 
-  temp = Stack_Pop(parser->xml_base_stack);
-  Py_DECREF(temp);
-
-  temp = Stack_Pop(parser->xml_lang_stack);
-  Py_DECREF(temp);
-
-  temp = Stack_Pop(parser->xml_space_stack);
-  Py_DECREF(temp);
-
-  temp = Stack_Pop(parser->preserve_whitespace_stack);
-  Py_DECREF(temp);
+  popElementState(parser);
 }
 
@@ -5108,4 +5104,7 @@
   }
 
+  if (parser->context) {
+    destroyContexts(parser);
+  }
   /* set after creation */
   if (parser->whitespace_rules) {


More information about the 4suite-checkins mailing list