From 9c5ccb137df7649582a7812fd4bf65ceeb38dd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Thu, 28 Nov 2013 03:04:35 +0100 Subject: [PATCH] =?UTF-8?q?2013-11-28=2003:04=20UTC+0100=20Przemyslaw=20Cz?= =?UTF-8?q?erpak=20(druzus/at/poczta.onet.pl)=20=20=20*=20contrib/hbmxml/3?= =?UTF-8?q?rd/minixml/mxml=5Ffil.c=20=20=20=20=20!=20fixed=20mxmlLoadStrin?= =?UTF-8?q?g()=20with=20top=20node=20-=20patch=20by=20Fran=C4=8Dek=20Prija?= =?UTF-8?q?telj?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * contrib/hbmxml/core.c ! fixed mxml node reference counter in mxmlAdd() - it fixes 2-dn problem reported by Franček Prijatelj --- ChangeLog.txt | 8 ++++++++ contrib/hbmxml/3rd/minixml/mxml_fil.c | 2 +- contrib/hbmxml/core.c | 15 ++++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 943421be36..5ed892031b 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,14 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2013-11-28 03:04 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * contrib/hbmxml/3rd/minixml/mxml_fil.c + ! fixed mxmlLoadString() with top node - patch by Franček Prijatelj + + * contrib/hbmxml/core.c + ! fixed mxml node reference counter in mxmlAdd() - it fixes 2-dn + problem reported by Franček Prijatelj + 2013-11-27 20:32 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/gtxwc/gtxwc.c ! fixed typo which broke event loop processing - changed state diff --git a/contrib/hbmxml/3rd/minixml/mxml_fil.c b/contrib/hbmxml/3rd/minixml/mxml_fil.c index 887e731d4a..ec8a288949 100644 --- a/contrib/hbmxml/3rd/minixml/mxml_fil.c +++ b/contrib/hbmxml/3rd/minixml/mxml_fil.c @@ -2091,7 +2091,7 @@ mxml_load_data( { node = parent; - while (parent->parent != top && parent->parent) + while (parent != top && parent->parent) parent = parent->parent; if (node != parent) diff --git a/contrib/hbmxml/core.c b/contrib/hbmxml/core.c index 5f5e021adb..56b85228d2 100644 --- a/contrib/hbmxml/core.c +++ b/contrib/hbmxml/core.c @@ -272,6 +272,19 @@ HB_FUNC( HB_MXMLVERSION ) /* void mxmlAdd( mxml_node_t * parent, int where, mxml_node_t * child, mxml_node_t * node ) */ +/* mxmlAdd() does not update reference counters, we use our own + * wrapper which does it [druzus] + */ + +static void mxmlAddRef( mxml_node_t * parent, int where, mxml_node_t * child, mxml_node_t * node ) +{ + mxml_node_t * old_parent = node->parent; + + mxmlAdd( parent, where, ( child != NULL ) ? child : MXML_ADD_TO_PARENT, node ); + if( ! old_parent ) + mxmlRetain( node ); +} + HB_FUNC( MXMLADD ) { mxml_node_t * parent = mxml_node_param( 1 ); @@ -283,7 +296,7 @@ HB_FUNC( MXMLADD ) { where = ( where == MXML_ADD_BEFORE ) ? MXML_ADD_BEFORE : MXML_ADD_AFTER; - mxmlAdd( parent, where, ( child != NULL ) ? child : MXML_ADD_TO_PARENT, node ); + mxmlAddRef( parent, where, ( child != NULL ) ? child : MXML_ADD_TO_PARENT, node ); } else MXML_ERR_ARGS;