diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 887c82809c..5b4a816d29 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,22 @@ The license applies to all entries newer than 2009-04-28. */ +2012-11-06 04:14 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * harbour/contrib/hbmxml/3rd/minixml/mxml_nod.c + ! applied once again fix for mxmlDelete() - respect reference counters + It was lost in one of Mini-XML updates. + It's extremely important fix. Without it our howl wrapper does not + work correctly corrupting memory. Please keep it in next updates. + + * harbour/contrib/hbmxml/3rd/minixml/mxml.hbp + * added URL for Mini-XML 2.7 source code + + + harbour/contrib/hbmxml/3rd/minixml/minixml.dif + + added diff file created by + hbmk2 ../../../../bin/3rdpatch.hb -rediff + ; TOFIX: We have in our repository mxml-set.c v. 426 instead of + mxml-set.c v. 441 which is inside mxml-2.7.tar.gz. Why? + 2012-11-05 12:32 UTC+0100 Viktor Szakats (harbour syenar.net) * contrib/hbamf/tests/tstendin.prg * contrib/hbblat/blatcls.prg diff --git a/harbour/contrib/hbmxml/3rd/minixml/minixml.dif b/harbour/contrib/hbmxml/3rd/minixml/minixml.dif new file mode 100644 index 0000000000..0b18a0c469 --- /dev/null +++ b/harbour/contrib/hbmxml/3rd/minixml/minixml.dif @@ -0,0 +1,483 @@ +diff -urN minixml.orig/config.h minixml/config.h +--- minixml.orig/config.h 2012-11-06 03:46:33.084020512 +0100 ++++ minixml/config.h 2012-11-06 03:46:33.084020512 +0100 +@@ -1,6 +1,8 @@ + /* +- * "$Id: config.h.in 408 2010-09-19 05:26:46Z mike $" +- * ++ * $Id: config.h 18162 2012-09-27 21:08:47Z vszakats $ ++ */ ++ ++/* + * Configuration file for Mini-XML, a small XML-like file parsing library. + * + * Copyright 2003-2010 by Michael R Sweet. +@@ -18,62 +20,89 @@ + * Include necessary headers... + */ + +-#include +-#include +-#include +-#include +-#include ++#define _CRT_SECURE_NO_DEPRECATE ++#define _CRT_SECURE_NO_WARNINGS + ++#include "hbdefs.h" ++#include "hb_io.h" ++ ++#include "hbapi.h" ++#define HAVE_SNPRINTF 1 ++#undef snprintf ++#define snprintf hb_snprintf ++ ++#define HAVE_VSNPRINTF 1 ++#undef vsnprintf ++#define vsnprintf hb_vsnprintf ++ ++#if defined ( _MSC_VER ) ++#define close _close ++#define open _open ++#define read _read ++/* #define snprintf _snprintf */ ++#define strdup _strdup ++/* #define vsnprintf _vsnprintf */ ++#define write _write ++#endif + + /* + * Version number... + */ + +-#define MXML_VERSION "" ++#define MXML_VERSION "Mini-XML v2.7" + + + /* + * Inline function support... + */ + +-#define inline ++#define inline _HB_INLINE_ + + + /* + * Long long support... + */ + +-#undef HAVE_LONG_LONG ++#ifndef __BORLANDC__ ++#define HAVE_LONG_LONG 1 ++#endif + + + /* + * Do we have the snprintf() and vsnprintf() functions? + */ + +-#undef HAVE_SNPRINTF +-#undef HAVE_VSNPRINTF ++/* #define HAVE_SNPRINTF 1 */ ++/* #define HAVE_VSNPRINTF 1 */ + + + /* + * Do we have the strXXX() functions? + */ + +-#undef HAVE_STRDUP ++/* #define HAVE_STRDUP 1 */ + + + /* + * Do we have threading support? + */ + +-#undef HAVE_PTHREAD_H ++/* #undef HAVE_PTHREAD_H */ + + + /* + * Define prototypes for string functions as needed... + */ + ++# ifdef __cplusplus ++extern "C" { ++# endif /* __cplusplus */ ++ + # ifndef HAVE_STRDUP + extern char *_mxml_strdup(const char *); ++# if defined( strdup ) ++# undef strdup ++# endif + # define strdup _mxml_strdup + # endif /* !HAVE_STRDUP */ + +@@ -82,14 +111,20 @@ + + # ifndef HAVE_SNPRINTF + extern int _mxml_snprintf(char *, size_t, const char *, ...); ++# if defined( snprintf ) ++# undef snprintf ++# endif + # define snprintf _mxml_snprintf + # endif /* !HAVE_SNPRINTF */ + + # ifndef HAVE_VSNPRINTF + extern int _mxml_vsnprintf(char *, size_t, const char *, va_list); ++# if defined( vsnprintf ) ++# undef vsnprintf ++# endif + # define vsnprintf _mxml_vsnprintf + # endif /* !HAVE_VSNPRINTF */ + +-/* +- * End of "$Id: config.h.in 408 2010-09-19 05:26:46Z mike $". +- */ ++# ifdef __cplusplus ++} ++# endif /* __cplusplus */ +diff -urN minixml.orig/mxml_fil.c minixml/mxml_fil.c +--- minixml.orig/mxml_fil.c 2012-11-06 03:46:33.092020512 +0100 ++++ minixml/mxml_fil.c 2012-11-06 03:46:33.092020512 +0100 +@@ -329,8 +329,14 @@ + return (-1); + + if (col > 0) ++ { ++#ifdef _EOL_CRLF ++ if (mxml_fd_putc('\r', &buf) < 0) ++ return (-1); ++#endif + if (mxml_fd_putc('\n', &buf) < 0) + return (-1); ++ } + + /* + * Flush and return... +@@ -368,8 +374,14 @@ + return (-1); + + if (col > 0) ++ { ++#ifdef _EOL_CRLF ++ if (putc('\r', fp) < 0) ++ return (-1); ++#endif + if (putc('\n', fp) < 0) + return (-1); ++ } + + /* + * Return 0 (success)... +@@ -416,7 +428,12 @@ + return (-1); + + if (col > 0) ++ { ++#ifdef _EOL_CRLF ++ mxml_string_putc('\r', ptr); ++#endif + mxml_string_putc('\n', ptr); ++ } + + /* + * Nul-terminate the buffer... +@@ -1056,7 +1073,7 @@ + while ((bytes = read(buf->fd, buf->buffer, sizeof(buf->buffer))) < 0) + #ifdef EINTR + if (errno != EAGAIN && errno != EINTR) +-#else ++#elif defined( EAGAIN ) + if (errno != EAGAIN) + #endif /* EINTR */ + return (-1); +@@ -2786,6 +2803,10 @@ + + if (global->wrap > 0 && (col + width) > global->wrap) + { ++#ifdef _EOL_CRLF ++ if ((*putc_cb)('\r', p) < 0) ++ return (-1); ++#endif + if ((*putc_cb)('\n', p) < 0) + return (-1); + +@@ -2896,6 +2917,10 @@ + { + if (global->wrap > 0 && col > global->wrap) + { ++#ifdef _EOL_CRLF ++ if ((*putc_cb)('\r', p) < 0) ++ return (-1); ++#endif + if ((*putc_cb)('\n', p) < 0) + return (-1); + +@@ -2926,6 +2951,10 @@ + { + if (global->wrap > 0 && col > global->wrap) + { ++#ifdef _EOL_CRLF ++ if ((*putc_cb)('\r', p) < 0) ++ return (-1); ++#endif + if ((*putc_cb)('\n', p) < 0) + return (-1); + +@@ -2949,6 +2978,10 @@ + { + if (global->wrap > 0 && col > global->wrap) + { ++#ifdef _EOL_CRLF ++ if ((*putc_cb)('\r', p) < 0) ++ return (-1); ++#endif + if ((*putc_cb)('\n', p) < 0) + return (-1); + +diff -urN minixml.orig/mxml.h minixml/mxml.h +--- minixml.orig/mxml.h 2012-11-06 03:46:33.100020512 +0100 ++++ minixml/mxml.h 2012-11-06 03:46:33.100020512 +0100 +@@ -29,8 +29,16 @@ + # include + # include + # include +-# include +- ++# if defined( UNDER_CE ) || defined( __CEGCC__ ) || defined( __MINGW32CE__ ) || \ ++ defined( _WINCE ) ++# include ++# if !defined( UNDER_CE ) ++# define UNDER_CE ++# endif ++# define strerror(e) "" ++# else ++# include ++# endif + + /* + * Constants... +diff -urN minixml.orig/mxml_nod.c minixml/mxml_nod.c +--- minixml.orig/mxml_nod.c 2012-11-06 03:46:33.096020512 +0100 ++++ minixml/mxml_nod.c 2012-11-06 03:46:33.096020512 +0100 +@@ -221,7 +221,11 @@ + */ + + while (node->child) +- mxmlDelete(node->child); ++ { ++ mxml_node_t *child = node->child; ++ mxmlRemove(child); ++ mxmlRelease(child); ++ } + + /* + * Now delete any node data... +diff -urN minixml.orig/mxml_pri.c minixml/mxml_pri.c +--- minixml.orig/mxml_pri.c 2012-11-06 03:46:33.096020512 +0100 ++++ minixml/mxml_pri.c 2012-11-06 03:46:33.096020512 +0100 +@@ -1,5 +1,5 @@ + /* +- * "$Id: mxml-private.c 422 2010-11-07 22:55:11Z mike $" ++ * "$Id: mxml_pri.c 422 2010-11-07 22:55:11Z mike $" + * + * Private functions for Mini-XML, a small XML-like file parsing library. + * +@@ -327,5 +327,5 @@ + + + /* +- * End of "$Id: mxml-private.c 422 2010-11-07 22:55:11Z mike $". ++ * End of "$Id: mxml_pri.c 422 2010-11-07 22:55:11Z mike $". + */ +diff -urN minixml.orig/mxml_pri.h minixml/mxml_pri.h +--- minixml.orig/mxml_pri.h 2012-11-06 03:46:33.096020512 +0100 ++++ minixml/mxml_pri.h 2012-11-06 03:46:33.096020512 +0100 +@@ -1,5 +1,5 @@ + /* +- * "$Id: mxml-private.h 408 2010-09-19 05:26:46Z mike $" ++ * "$Id: mxml_pri.h 408 2010-09-19 05:26:46Z mike $" + * + * Private definitions for Mini-XML, a small XML-like file parsing library. + * +@@ -46,5 +46,5 @@ + + + /* +- * End of "$Id: mxml-private.h 408 2010-09-19 05:26:46Z mike $". ++ * End of "$Id: mxml_pri.h 408 2010-09-19 05:26:46Z mike $". + */ +diff -urN minixml.orig/mxml_set.c minixml/mxml_set.c +--- minixml.orig/mxml_set.c 2012-11-06 03:46:33.100020512 +0100 ++++ minixml/mxml_set.c 2012-11-06 03:46:33.100020512 +0100 +@@ -1,5 +1,5 @@ + /* +- * "$Id: mxml-set.c 441 2011-12-09 23:49:00Z mike $" ++ * "$Id: mxml-set.c 426 2011-01-01 23:42:17Z mike $" + * + * Node set functions for Mini-XML, a small XML-like file parsing library. + * +@@ -37,7 +37,7 @@ + /* + * 'mxmlSetCDATA()' - Set the element name of a CDATA node. + * +- * The node is not changed if it (or its first child) is not a CDATA element node. ++ * The node is not changed if it is not a CDATA element node. + * + * @since Mini-XML 2.3@ + */ +@@ -50,12 +50,6 @@ + * Range check input... + */ + +- if (node && node->type == MXML_ELEMENT && +- strncmp(node->value.element.name, "![CDATA[", 8) && +- node->child && node->child->type == MXML_ELEMENT && +- !strncmp(node->child->value.element.name, "![CDATA[", 8)) +- node = node->child; +- + if (!node || node->type != MXML_ELEMENT || !data || + strncmp(node->value.element.name, "![CDATA[", 8)) + return (-1); +@@ -76,7 +70,7 @@ + /* + * 'mxmlSetCustom()' - Set the data and destructor of a custom data node. + * +- * The node is not changed if it (or its first child) is not a custom node. ++ * The node is not changed if it is not a custom node. + * + * @since Mini-XML 2.1@ + */ +@@ -91,10 +85,6 @@ + * Range check input... + */ + +- if (node && node->type == MXML_ELEMENT && +- node->child && node->child->type == MXML_CUSTOM) +- node = node->child; +- + if (!node || node->type != MXML_CUSTOM) + return (-1); + +@@ -145,7 +135,7 @@ + /* + * 'mxmlSetInteger()' - Set the value of an integer node. + * +- * The node is not changed if it (or its first child) is not an integer node. ++ * The node is not changed if it is not an integer node. + */ + + int /* O - 0 on success, -1 on failure */ +@@ -156,10 +146,6 @@ + * Range check input... + */ + +- if (node && node->type == MXML_ELEMENT && +- node->child && node->child->type == MXML_INTEGER) +- node = node->child; +- + if (!node || node->type != MXML_INTEGER) + return (-1); + +@@ -176,7 +162,7 @@ + /* + * 'mxmlSetOpaque()' - Set the value of an opaque node. + * +- * The node is not changed if it (or its first child) is not an opaque node. ++ * The node is not changed if it is not an opaque node. + */ + + int /* O - 0 on success, -1 on failure */ +@@ -187,10 +173,6 @@ + * Range check input... + */ + +- if (node && node->type == MXML_ELEMENT && +- node->child && node->child->type == MXML_OPAQUE) +- node = node->child; +- + if (!node || node->type != MXML_OPAQUE || !opaque) + return (-1); + +@@ -210,7 +192,7 @@ + /* + * 'mxmlSetReal()' - Set the value of a real number node. + * +- * The node is not changed if it (or its first child) is not a real number node. ++ * The node is not changed if it is not a real number node. + */ + + int /* O - 0 on success, -1 on failure */ +@@ -221,10 +203,6 @@ + * Range check input... + */ + +- if (node && node->type == MXML_ELEMENT && +- node->child && node->child->type == MXML_REAL) +- node = node->child; +- + if (!node || node->type != MXML_REAL) + return (-1); + +@@ -241,7 +219,7 @@ + /* + * 'mxmlSetText()' - Set the value of a text node. + * +- * The node is not changed if it (or its first child) is not a text node. ++ * The node is not changed if it is not a text node. + */ + + int /* O - 0 on success, -1 on failure */ +@@ -253,10 +231,6 @@ + * Range check input... + */ + +- if (node && node->type == MXML_ELEMENT && +- node->child && node->child->type == MXML_TEXT) +- node = node->child; +- + if (!node || node->type != MXML_TEXT || !string) + return (-1); + +@@ -277,7 +251,7 @@ + /* + * 'mxmlSetTextf()' - Set the value of a text node to a formatted string. + * +- * The node is not changed if it (or its first child) is not a text node. ++ * The node is not changed if it is not a text node. + */ + + int /* O - 0 on success, -1 on failure */ +@@ -293,10 +267,6 @@ + * Range check input... + */ + +- if (node && node->type == MXML_ELEMENT && +- node->child && node->child->type == MXML_TEXT) +- node = node->child; +- + if (!node || node->type != MXML_TEXT || !format) + return (-1); + +@@ -345,5 +315,5 @@ + + + /* +- * End of "$Id: mxml-set.c 441 2011-12-09 23:49:00Z mike $". ++ * End of "$Id: mxml-set.c 426 2011-01-01 23:42:17Z mike $". + */ +diff -urN minixml.orig/mxml_str.c minixml/mxml_str.c +--- minixml.orig/mxml_str.c 2012-11-06 03:46:33.100020512 +0100 ++++ minixml/mxml_str.c 2012-11-06 03:46:33.100020512 +0100 +@@ -28,6 +28,9 @@ + + #include "config.h" + ++#ifndef HAVE_VSNPRINTF ++# include ++#endif + + /* + * The va_copy macro is part of C99, but many compilers don't implement it. diff --git a/harbour/contrib/hbmxml/3rd/minixml/mxml.hbp b/harbour/contrib/hbmxml/3rd/minixml/mxml.hbp index cf6539baa2..38acac0174 100644 --- a/harbour/contrib/hbmxml/3rd/minixml/mxml.hbp +++ b/harbour/contrib/hbmxml/3rd/minixml/mxml.hbp @@ -34,7 +34,7 @@ mxml_str.c # ORIGIN http://www.minixml.org # VER 2.7 -# URL +# URL http://ftp.easysw.com/pub/mxml/2.7/mxml-2.7.tar.gz # DIFF minixml.dif # # MAP COPYING diff --git a/harbour/contrib/hbmxml/3rd/minixml/mxml_nod.c b/harbour/contrib/hbmxml/3rd/minixml/mxml_nod.c index 44af759f9d..2ee3e0abd6 100644 --- a/harbour/contrib/hbmxml/3rd/minixml/mxml_nod.c +++ b/harbour/contrib/hbmxml/3rd/minixml/mxml_nod.c @@ -221,7 +221,11 @@ mxmlDelete(mxml_node_t *node) /* I - Node to delete */ */ while (node->child) - mxmlDelete(node->child); + { + mxml_node_t *child = node->child; + mxmlRemove(child); + mxmlRelease(child); + } /* * Now delete any node data...