- xmlversion.h.in libxml.h: Cygwin patches
- tree.c: xmlFreeNodeList patch similar to xmlFreeNode one
- tree.h: cleanup
Daniel
diff --git a/ChangeLog b/ChangeLog
index ea96574..487405e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Jun 11 10:07:29 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
+
+ * xmlversion.h.in libxml.h: Cygwin patches
+ * tree.c: xmlFreeNodeList patch similar to xmlFreeNode one
+ * tree.h: cleanup
+
Sat Jun 9 19:16:00 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* tree.c: patched xmlFreeNode() to avoid freeing() a static
diff --git a/include/libxml/tree.h b/include/libxml/tree.h
index b13b0bc..272d21c 100644
--- a/include/libxml/tree.h
+++ b/include/libxml/tree.h
@@ -69,16 +69,6 @@
typedef unsigned char xmlChar;
-/*
- * Removed in 2.3.9 ... nobody should still use this
- *
-#ifndef WIN32
-#ifndef CHAR
-#define CHAR xmlChar
-#endif
-#endif
- */
-
/**
* BAD_CAST:
*
diff --git a/include/libxml/xmlversion.h.in b/include/libxml/xmlversion.h.in
index 5725123..1c6bdb0 100644
--- a/include/libxml/xmlversion.h.in
+++ b/include/libxml/xmlversion.h.in
@@ -129,7 +129,7 @@
*
* Whether iconv support is available
*/
-#ifndef WIN32
+#if !defined(WIN32) || defined(__CYGWIN__)
#if @WITH_ICONV@
#define LIBXML_ICONV_ENABLED
#else
diff --git a/libxml.h b/libxml.h
index ded5d37..647768c 100644
--- a/libxml.h
+++ b/libxml.h
@@ -9,7 +9,7 @@
#ifndef __XML_LIBXML_H__
#define __XML_LIBXML_H__
-#ifdef WIN32
+#if !defined(WIN32) || defined(__CYGWIN__)
#include "win32config.h"
#else
#include "config.h"
diff --git a/tree.c b/tree.c
index 670c139..b881ece 100644
--- a/tree.c
+++ b/tree.c
@@ -2369,11 +2369,30 @@
#else
if (cur->content != NULL) xmlBufferFree(cur->content);
#endif
+ /*
+ * When a node is a text node or a comment, it uses a global static
+ * variable for the name of the node.
+ *
+ * The xmlStrEqual comparisons need to be done when (happened with
+ * XML::libXML and XML::libXSLT) the library is included twice
+ * statically in the binary and a tree allocated by one occurent
+ * of the lib gets freed by the other occurence, in this case
+ * the string addresses compare are not sufficient.
+ */
if ((cur->name != NULL) &&
(cur->name != xmlStringText) &&
(cur->name != xmlStringTextNoenc) &&
- (cur->name != xmlStringComment))
- xmlFree((char *) cur->name);
+ (cur->name != xmlStringComment)) {
+ if (cur->type == XML_TEXT_NODE) {
+ if ((!xmlStrEqual(cur->name, xmlStringText)) &&
+ (!xmlStrEqual(cur->name, xmlStringTextNoenc)))
+ xmlFree((char *) cur->name);
+ } else if (cur->type == XML_COMMENT_NODE) {
+ if (!xmlStrEqual(cur->name, xmlStringComment))
+ xmlFree((char *) cur->name);
+ } else
+ xmlFree((char *) cur->name);
+ }
/* TODO : derecursivate this function */
if (cur->nsDef != NULL) xmlFreeNsList(cur->nsDef);
xmlFree(cur);
diff --git a/tree.h b/tree.h
index b13b0bc..272d21c 100644
--- a/tree.h
+++ b/tree.h
@@ -69,16 +69,6 @@
typedef unsigned char xmlChar;
-/*
- * Removed in 2.3.9 ... nobody should still use this
- *
-#ifndef WIN32
-#ifndef CHAR
-#define CHAR xmlChar
-#endif
-#endif
- */
-
/**
* BAD_CAST:
*
diff --git a/xmlversion.h.in b/xmlversion.h.in
index 5725123..1c6bdb0 100644
--- a/xmlversion.h.in
+++ b/xmlversion.h.in
@@ -129,7 +129,7 @@
*
* Whether iconv support is available
*/
-#ifndef WIN32
+#if !defined(WIN32) || defined(__CYGWIN__)
#if @WITH_ICONV@
#define LIBXML_ICONV_ENABLED
#else