another patch from Aleksey Sanin Daniel

* c14n.c: another patch from Aleksey Sanin
Daniel
diff --git a/ChangeLog b/ChangeLog
index f9a79be..f64fbaf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Mar 15 10:41:50 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+	* c14n.c: another patch from Aleksey Sanin
+
 Fri Mar 15 08:55:55 CET 2002 Daniel Veillard <daniel@veillard.com>
 
 	* c14n.c: applied patch from Aleksey Sanin fixing a problem in the
diff --git a/c14n.c b/c14n.c
index 27e25b8..0a58a61 100644
--- a/c14n.c
+++ b/c14n.c
@@ -787,6 +787,7 @@
 {
     int ret;
     int ns_rendered_pos = 0;
+    int parent_is_doc = 0;
 
     if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
 #ifdef DEBUG_C14N
@@ -818,8 +819,11 @@
         ns_rendered_pos = ctx->ns_rendered->nodeNr;
     }
 
-    if (visible) {
+    if (visible) {	
         if (ctx->parent_is_doc) {
+	    /* save this flag into the stack */
+	    parent_is_doc = ctx->parent_is_doc;
+	    ctx->parent_is_doc = 0;
             ctx->pos = XMLC14N_INSIDE_DOCUMENT_ELEMENT;
         }
         xmlOutputBufferWriteString(ctx->buf, "<");
@@ -874,8 +878,10 @@
         }
         xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
         xmlOutputBufferWriteString(ctx->buf, ">");
-        if (ctx->parent_is_doc) {
-            ctx->pos = XMLC14N_AFTER_DOCUMENT_ELEMENT;
+        if (parent_is_doc) {
+	    /* restore this flag from the stack for next node */
+            ctx->parent_is_doc = parent_is_doc;
+	    ctx->pos = XMLC14N_AFTER_DOCUMENT_ELEMENT;
         }
     }