Hello community,

here is the log from the commit of package gwenhywfar for openSUSE:Factory 
checked in at 2015-11-22 11:00:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gwenhywfar (Old)
 and      /work/SRC/openSUSE:Factory/.gwenhywfar.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gwenhywfar"

Changes:
--------
--- /work/SRC/openSUSE:Factory/gwenhywfar/gwenhywfar.changes    2015-04-27 
13:04:37.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.gwenhywfar.new/gwenhywfar.changes       
2015-11-22 11:02:53.000000000 +0100
@@ -1,0 +2,20 @@
+Thu Nov  5 23:39:26 UTC 2015 - nico.kru...@gmail.com
+
+- Update to 4.14.0:
+  + Fix segfault on windows when using HBCI with keyfile.
+  + Major speedup of GWEN_Directory_GetMatchingFilesRecursively().
+  + Re-work Compiler Symbol Visibility Check.
+  + Drop unused autoconf variable gwen_enable_export.
+  + Fix symbol visibilty check for GCC 5.x.
+  + Revert "Turn compiler warning for implicit function declaration
+    into error."
+  + Revert "Disable timestamps in HTML pages generated by Doxygen".
+  + Disable timestamps in HTML pages generated by Doxygen.
+  + typemaker2: Added support for _free-hooks, fixed many compiler
+    warnings.
+  + API ADDITION: Added 2 more virtual functions to
+    GWEN_MULTICACHE.
+  + Added functions
+    GWEN_Param_List_Get/SetCurrentValueAsInt/Double.
+
+-------------------------------------------------------------------

Old:
----
  gwenhywfar-4.13.1.tar.gz

New:
----
  gwenhywfar-4.14.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gwenhywfar.spec ++++++
--- /var/tmp/diff_new_pack.XkprTq/_old  2015-11-22 11:02:54.000000000 +0100
+++ /var/tmp/diff_new_pack.XkprTq/_new  2015-11-22 11:02:54.000000000 +0100
@@ -17,9 +17,9 @@
 
 
 %define        libversion      60
-%define devversion 4.13
+%define devversion 4.14
 Name:           gwenhywfar
-Version:        4.13.1
+Version:        4.14.0
 Release:        0
 Summary:        Multiplatform helper library for other libraries
 License:        GPL-2.0+ and LGPL-2.1+

++++++ gwenhywfar-4.13.1.tar.gz -> gwenhywfar-4.14.0.tar.gz ++++++
++++ 2258 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/ChangeLog new/gwenhywfar-4.14.0/ChangeLog
--- old/gwenhywfar-4.13.1/ChangeLog     2015-01-03 23:47:33.000000000 +0100
+++ new/gwenhywfar-4.14.0/ChangeLog     2015-05-25 18:18:59.000000000 +0200
@@ -1,4 +1,82 @@
 ------------------------------------------------------------------
+2015-05-25 18:18:53 +0200 Martin Preuss
+Prepared release 4.14.0.
+
+------------------------------------------------------------------
+2015-05-23 21:50:30 +0200 Christian Stimming
+Fix segfault on windows when using HBCI with keyfile.
+Reported by hbrunn on
+https://github.com/Gnucash/gnucash-on-windows/pull/5
+
+------------------------------------------------------------------
+2015-05-20 23:24:09 +0200 Martin Preuss
+Major speedup of GWEN_Directory_GetMatchingFilesRecursively().
+Don't check for duplicates when adding files or folders to the file/folder
+list. There should be no duplicate entries anyway inside a folder.
+
+------------------------------------------------------------------
+2015-05-17 10:22:06 +0200 Micha Lenk
+Re-work Compiler Symbol Visibility Check
+This was inspired by 
http://stackoverflow.com/questions/5987219/best-practices-for-probing-for-symbol-visibility-extensions-in-autoconf
+
+------------------------------------------------------------------
+2015-05-17 10:18:16 +0200 Micha Lenk
+Drop unused autoconf variable gwen_enable_export
+
+------------------------------------------------------------------
+2015-05-15 19:29:13 +0000 Micha Lenk
+Fix symbol visibilty check for GCC 5.x
+GCC 5.x supports the -fvisibility=hidden flag too.
+
+------------------------------------------------------------------
+2015-05-14 10:20:12 +0200 Martin Preuss
+Revert "Turn compiler warning for implicit function declaration into error."
+This reverts commit 9c20b0998c5f5825ede38ff22eb1b5211eda8741 because
+"-Werror=implicit-function-declaration" doesn't exist on my
+target build system.
+
+------------------------------------------------------------------
+2015-05-04 00:00:03 +0200 Micha Lenk
+Revert "Disable timestamps in HTML pages generated by Doxygen"
+This reverts commit f340c4a44b4f8a5148b02be0598f2ab63c45e924.
+
+Debian's Doxygen as of version 1.8.9.1-3 will have this disabled by default, so
+this change is not needed anymore.
+
+------------------------------------------------------------------
+2015-04-13 19:47:06 +0200 Micha Lenk
+Disable timestamps in HTML pages generated by Doxygen
+There is a Debian initiative working on making builds reproducible, i.e. to
+make it possible to reproduce byte-for-byte identical binary packages from a
+given source. https://wiki.debian.org/ReproducibleBuilds
+
+One reason why Gwenhywfar currently is not reproducible is the use of 
timestamps
+in HTML pages generated by Doxygen. More details about this particular issue
+can be found here:
+https://wiki.debian.org/ReproducibleBuilds/TimestampsInDocumentationGeneratedByDoxygen
+
+------------------------------------------------------------------
+2015-03-15 23:01:22 +0100 Martin Preuss
+typemaker2: Added support for _free-hooks, fixed many compiler warnings.
+- freeHooks can be used to insert code into the destructor for generated
+  types (used in ADCM_IMAGE_DATA of AqRadBase)
+- fixed many compiler warnings about defined but unused variables
+- fixed type definition for GWEN_BINDATA
+
+------------------------------------------------------------------
+2015-03-15 17:04:24 +0100 Martin Preuss
+API ADDITION: Added 2 more virtual functions to GWEN_MULTICACHE
+Added virtual functions GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN() and
+GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN(). Those functions have a pointer
+to the GWEN_MULTICACHE_TYPE as first argument.
+
+This is needed for AqRadBase's CUDA image cache.
+
+------------------------------------------------------------------
+2015-01-04 19:08:05 +0100 Martin Preuss
+Added functions GWEN_Param_List_Get/SetCurrentValueAsInt/Double.
+
+------------------------------------------------------------------
 2015-01-03 23:47:21 +0100 Martin Preuss
 Prepared release 4.13.1
 
@@ -553,86 +631,3 @@
 This allows connecting to Netbank/Sparda servers.
 
 git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2279 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 23:54:41 +0000 martin
-TLS: Fixed another problem.
-The string
- "SECURE256:SECURE128:-ARCFOUR-128:-AES-128-CBC:-CAMELLIA-128-CBC:-3DES-CBC"
-makes it impossible to connect to postbank.de. For whatever reason Postbank
-tries to enforce ARCFOUR-128 when given the opportunity to use a 128 bit
-algo, despite the fact that our list starts with SECURE256...
-
-Removing "SECURE128" leaves Postbank only the option to use a 256 bit algo,
-and that works.
-
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2278 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 23:54:37 +0000 martin
-Increased verbosity.
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2277 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 23:38:46 +0000 martin
-Added flags to force only safe TLS ciphers.
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2276 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 23:31:13 +0000 martin
-TLS: Added flag GWEN_SYNCIO_TLS_FLAGS_ONLY_SAFE_CIPHERS
-If this flag is set then ciphers known as unsafe will be disabled in the
-cipher priority list.
-
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2275 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 22:36:44 +0000 martin
-TLS: Fixed a type.
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2274 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 22:36:39 +0000 martin
-TLS: Show more session info.
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2273 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 22:08:14 +0000 martin
-TLS: Show session info.
-Maybe we might later add a warning for insecure ciphers...
-
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2272 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 21:25:36 +0000 martin
-TLS: Changed acceptable cipher list.
-The secure cipher lists don't work with some banks.
-
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2271 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 21:25:32 +0000 martin
-Show the ciphers used.
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2270 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-26 21:25:26 +0000 martin
-Decreased verbosity.
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2269 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-25 19:44:15 +0000 martin
-For GnuTLS >=3.2.4 insert "PFS" before "SECURE256".
-Followed a suggestion from Martin (MK).
-
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2268 
70169cfe-8b10-0410-8925-dcb4b91034d8
-
-------------------------------------------------------------------
-2013-11-25 08:20:31 +0000 mlenk
-Improve GnuTLS cipher settings
-- make cipher string a #define in syncio_tls_p.h
-- add facility to override cipher settings via environment variable 
GWEN_TLS_CIPHER_PRIORITIES
-- construct Force-SSLv3 cipher by adding prefix "+VERS-SSL3.0:"
-
-
-git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@2267 
70169cfe-8b10-0410-8925-dcb4b91034d8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/configure.ac new/gwenhywfar-4.14.0/configure.ac
--- old/gwenhywfar-4.13.1/configure.ac  2015-01-03 23:45:19.000000000 +0100
+++ new/gwenhywfar-4.14.0/configure.ac  2015-05-25 18:16:25.000000000 +0200
@@ -28,8 +28,8 @@
 # versions
 #
 GWENHYWFAR_VERSION_MAJOR=4
-GWENHYWFAR_VERSION_MINOR=13
-GWENHYWFAR_VERSION_PATCHLEVEL=1
+GWENHYWFAR_VERSION_MINOR=14
+GWENHYWFAR_VERSION_PATCHLEVEL=0
 GWENHYWFAR_VERSION_BUILD=0
 dnl "stable", "rcX", "betaX", "cvs"
 GWENHYWFAR_VERSION_TAG="stable"
@@ -40,9 +40,9 @@
 #
 # SO version for Gwenhywfar
 #
-GWENHYWFAR_SO_CURRENT="73"
-GWENHYWFAR_SO_AGE="13"
-GWENHYWFAR_SO_REVISION="1"
+GWENHYWFAR_SO_CURRENT="74"
+GWENHYWFAR_SO_AGE="14"
+GWENHYWFAR_SO_REVISION="0"
 GWENHYWFAR_SO_EFFECTIVE="`echo 
\$(($GWENHYWFAR_SO_CURRENT-$GWENHYWFAR_SO_AGE))`"
 
 
@@ -991,87 +991,30 @@
 
 ###-------------------------------------------------------------------------
 #
-# GCC version (check for usability)
+# Compiler check for symbol visibility
 #
-AC_MSG_CHECKING(if symbol visibility is supported)
-AC_ARG_ENABLE(visibility,
-  [  --enable-visibility             enable visibility (default=no)],
-  enable_visibility="$enableval",
-  enable_visibility="yes")
-AC_MSG_RESULT($enable_visibility)
-
-if test "$enable_visibility" = "yes"; then
-  AC_MSG_CHECKING(if symbol visibility is supported)
-  visibility_cflags=""
-  case `$CC --version|head -n1|cut -f1 -d " "` in 
-    *gcc*)
-       dnl Determine version number (watch out: the outside square
-       dnl parenteses are vitally important here!)
-       gccversion=["` ${CC} -dumpversion `"]
-       case $gccversion in
-         4.*)
-           # Activate -fvisibility=hidden only for explicit 4.x gcc
-           # versions. We never now what future gcc's might do with
-           # that argument, and we also can't be sure that other
-           # gcc's happen to show very weird version
-           # numbers. Therefore leave the default at non-activated.
-           visibility_supported="yes, gcc-${gccversion}"
-           AC_DEFINE(GCC_WITH_VISIBILITY_ATTRIBUTE, 1, [visibility])
-           visibility_cflags="-fvisibility=hidden"
-           ;;
-         *)
-           # Default: -fvisibility=hidden not activated.
-           visibility_supported="no (needs gcc >=4.0, you have 
gcc-${gccversion})"
-           ;;
-        esac
-        ;;
-    *)
-      visibility_supported="no (needs gcc >=4.0, you use $CC)"
-      ;;
-  esac
-  
-  # -fvisibility is at least not available on MinGW/gcc-3.4.4 (will
-  # give an "unrecognized cmdline option"). Also, unfortunately I
-  # don't know an easy way to ask the compiler here. Maybe
-  # http://autoconf-archive.cryp.to/ax_cflags_gcc_option.html
-  case "$OS_TYPE" in
-    windows)
-          visibility_supported="no (not yet on MinGW/Windows)"
-          visibility_cflags=""
-          ;;
-    *)
-          ;;
-  esac
-else
-  visibility_supported="no (not wanted)"
-  visibility_cflags=""
+AC_CACHE_CHECK([whether compiler supports symbol visibility],
+  ac_cv_hidden_visibility_attribute, [
+    echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; 
}' > conftest.c
+    ac_cv_hidden_visibility_attribute=no
+    if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 
1>&AS_MESSAGE_LOG_FD);
+    then
+      if grep '\.hidden.*foo' conftest.s >/dev/null;
+      then
+        ac_cv_hidden_visibility_attribute=yes
+      fi
+    fi
+    rm -f conftest.*
+  ])
+if test $ac_cv_hidden_visibility_attribute = yes;
+then
+  AC_DEFINE(GCC_WITH_VISIBILITY_ATTRIBUTE, 1, [visibility])
+  visibility_cflags="-fvisibility=hidden"
 fi
-
-
-AC_MSG_RESULT(${visibility_supported})
 AC_SUBST(visibility_cflags)
 
 
 
-###-------------------------------------------------------------------------
-#
-# enable export
-#
-AC_MSG_CHECKING(if symbol visibility is supported)
-AC_ARG_ENABLE(export,
-  [  --enable-export             enable export (default=yes)],
-  enable_export="$enableval",
-  enable_export="yes")
-AC_MSG_RESULT($enable_export)
-
-gwen_enable_export=0
-if test "$enable_export" = "yes"; then
-  gwen_enable_export=1
-fi
-AC_SUBST(gwen_enable_export)
-
-
-
 ###-------------------------------------------------------------------------
 #
 # check for MEMTRACE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/gui/gtk2/libtest.c 
new/gwenhywfar-4.14.0/gui/gtk2/libtest.c
--- old/gwenhywfar-4.13.1/gui/gtk2/libtest.c    2014-10-12 15:12:22.000000000 
+0200
+++ new/gwenhywfar-4.14.0/gui/gtk2/libtest.c    2015-05-25 18:15:30.000000000 
+0200
@@ -19,12 +19,6 @@
 #include <gwenhywfar/dialog.h>
 #include <gwenhywfar/debug.h>
 
-
-#ifdef OS_WIN32
-# include <windows.h>
-# define sleep(x) Sleep(x)
-#endif
-
 #include <unistd.h>
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/gui/testdialogs/dlg_test.c 
new/gwenhywfar-4.14.0/gui/testdialogs/dlg_test.c
--- old/gwenhywfar-4.13.1/gui/testdialogs/dlg_test.c    2014-10-12 
15:12:22.000000000 +0200
+++ new/gwenhywfar-4.14.0/gui/testdialogs/dlg_test.c    2015-05-25 
18:15:30.000000000 +0200
@@ -18,11 +18,6 @@
 #include <gwenhywfar/pathmanager.h>
 
 
-#ifdef OS_WIN32
-# include <windows.h>
-# define sleep(x) Sleep(x)
-#endif
-
 #include <unistd.h>
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/gui/testdialogs/dlg_test2.c 
new/gwenhywfar-4.14.0/gui/testdialogs/dlg_test2.c
--- old/gwenhywfar-4.13.1/gui/testdialogs/dlg_test2.c   2014-10-12 
15:12:22.000000000 +0200
+++ new/gwenhywfar-4.14.0/gui/testdialogs/dlg_test2.c   2015-05-25 
18:15:30.000000000 +0200
@@ -18,11 +18,6 @@
 #include <gwenhywfar/pathmanager.h>
 
 
-#ifdef OS_WIN32
-# include <windows.h>
-# define sleep(x) Sleep(x)
-#endif
-
 #include <unistd.h>
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/gwenhywfar.spec new/gwenhywfar-4.14.0/gwenhywfar.spec
--- old/gwenhywfar-4.13.1/gwenhywfar.spec       2015-01-03 23:45:36.000000000 
+0100
+++ new/gwenhywfar-4.14.0/gwenhywfar.spec       2015-05-25 18:16:39.000000000 
+0200
@@ -3,7 +3,7 @@
 
 
 %define name gwenhywfar
-%define version 4.13.1
+%define version 4.14.0
 %define rpm_cxxflags \"-O2 -march=i486 -mcpu=i586\"
 %define rpm_cflags \"-O2 -march=i486 -mcpu=i586\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/m4/acx_compile_warn.m4 
new/gwenhywfar-4.14.0/m4/acx_compile_warn.m4
--- old/gwenhywfar-4.13.1/m4/acx_compile_warn.m4        2015-01-03 
23:44:02.000000000 +0100
+++ new/gwenhywfar-4.14.0/m4/acx_compile_warn.m4        2015-05-14 
10:11:33.000000000 +0200
@@ -67,9 +67,9 @@
        *) AC_MSG_ERROR(bad value ${enableval} for --enable-error-on-warning) ;;
      esac
   ], [ 
-     # Default value if the argument was not given: At least error out on 
implicit function declarations.
-     CXXFLAGS="${CXXFLAGS} -Werror=implicit-function-declaration"
-     CFLAGS="${CFLAGS} -Werror=implicit-function-declaration"
+     # Default value if the argument was not given
+     CXXFLAGS="${CXXFLAGS}" 
+     CFLAGS="${CFLAGS}" 
   ])
 fi
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/base/multicache.c 
new/gwenhywfar-4.14.0/src/base/multicache.c
--- old/gwenhywfar-4.13.1/src/base/multicache.c 2014-10-12 15:12:22.000000000 
+0200
+++ new/gwenhywfar-4.14.0/src/base/multicache.c 2015-03-15 20:06:46.000000000 
+0100
@@ -379,14 +379,36 @@
 
 
 
+void GWEN_MultiCache_Type_SetAttachObjectFn(GWEN_MULTICACHE_TYPE *ct, 
GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN fn) {
+  assert(ct);
+  assert(ct->_refCount);
+
+  ct->attachObjectFn=fn;
+}
+
+
+
+void GWEN_MultiCache_Type_SetFreeObjectFn(GWEN_MULTICACHE_TYPE *ct, 
GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN fn) {
+  assert(ct);
+  assert(ct->_refCount);
+
+  ct->freeObjectFn=fn;
+}
+
+
+
 int GWEN_MultiCache_Type_AttachData(const GWEN_MULTICACHE_TYPE *ct, void *p) {
   assert(ct);
   assert(ct->_refCount);
 
+  /* try attachObjectFn first, because that has THIS object as first argument 
*/
+  if (ct->attachObjectFn)
+    return ct->attachObjectFn(ct, p);
+
   if (ct->attachFn)
     return ct->attachFn(p);
-  else
-    return GWEN_ERROR_NOT_IMPLEMENTED;
+
+  return GWEN_ERROR_NOT_IMPLEMENTED;
 }
 
 
@@ -395,10 +417,14 @@
   assert(ct);
   assert(ct->_refCount);
 
+  /* try freeObjectFn first, because that has THIS object as first argument */
+  if (ct->freeObjectFn)
+    return ct->freeObjectFn(ct, p);
+
   if (ct->freeFn)
     return ct->freeFn(p);
-  else
-    return GWEN_ERROR_NOT_IMPLEMENTED;
+
+  return GWEN_ERROR_NOT_IMPLEMENTED;
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/base/multicache.h 
new/gwenhywfar-4.14.0/src/base/multicache.h
--- old/gwenhywfar-4.13.1/src/base/multicache.h 2014-10-12 15:12:22.000000000 
+0200
+++ new/gwenhywfar-4.14.0/src/base/multicache.h 2015-03-15 16:58:45.000000000 
+0100
@@ -62,6 +62,9 @@
 typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_ATTACH_FN)(void *p);
 typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_FREE_FN)(void *p);
 
+typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN)(const 
GWEN_MULTICACHE_TYPE *ct, void *p);
+typedef int GWENHYWFAR_CB (*GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN)(const 
GWEN_MULTICACHE_TYPE *ct, void *p);
+
 
 
 /** @name Per-type Cache Objects
@@ -100,6 +103,11 @@
 
 GWENHYWFAR_API void GWEN_MultiCache_Type_SetFreeFn(GWEN_MULTICACHE_TYPE *ct, 
GWEN_MULTICACHE_TYPE_FREE_FN fn);
 
+
+GWENHYWFAR_API void 
GWEN_MultiCache_Type_SetAttachObjectFn(GWEN_MULTICACHE_TYPE *ct, 
GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN fn);
+
+GWENHYWFAR_API void GWEN_MultiCache_Type_SetFreeObjectFn(GWEN_MULTICACHE_TYPE 
*ct, GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN fn);
+
 /*@}*/
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/base/multicache_p.h 
new/gwenhywfar-4.14.0/src/base/multicache_p.h
--- old/gwenhywfar-4.13.1/src/base/multicache_p.h       2014-07-23 
22:28:23.000000000 +0200
+++ new/gwenhywfar-4.14.0/src/base/multicache_p.h       2015-03-15 
16:59:54.000000000 +0100
@@ -93,6 +93,9 @@
   GWEN_MULTICACHE_TYPE_ATTACH_FN attachFn;
   GWEN_MULTICACHE_TYPE_FREE_FN freeFn;
 
+  GWEN_MULTICACHE_TYPE_ATTACH_OBJECT_FN attachObjectFn;
+  GWEN_MULTICACHE_TYPE_FREE_OBJECT_FN freeObjectFn;
+
   uint32_t _refCount;
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/base/param_fns.c 
new/gwenhywfar-4.14.0/src/base/param_fns.c
--- old/gwenhywfar-4.13.1/src/base/param_fns.c  2014-09-17 22:19:38.000000000 
+0200
+++ new/gwenhywfar-4.14.0/src/base/param_fns.c  2015-01-04 19:06:24.000000000 
+0100
@@ -116,3 +116,51 @@
 
 
 
+
+
+
+int GWEN_Param_List_GetCurrentValueAsInt(const GWEN_PARAM_LIST *pl, const char 
*name, int defVal) {
+  GWEN_PARAM *p;
+
+  p=GWEN_Param_List_GetByName(pl, name);
+  if (p)
+    return GWEN_Param_GetCurrentValueAsInt(p);
+  return defVal;
+}
+
+
+
+void GWEN_Param_List_SetCurrentValueAsInt(GWEN_PARAM_LIST *pl, const char 
*name, int v) {
+  GWEN_PARAM *p;
+
+  p=GWEN_Param_List_GetByName(pl, name);
+  if (p)
+    GWEN_Param_SetCurrentValueAsInt(p, v);
+}
+
+
+
+double GWEN_Param_List_GetCurrentValueAsDouble(const GWEN_PARAM_LIST *pl, 
const char *name, double defVal) {
+  GWEN_PARAM *p;
+
+  p=GWEN_Param_List_GetByName(pl, name);
+  if (p)
+    return GWEN_Param_GetCurrentValueAsDouble(p);
+  return defVal;
+}
+
+
+
+void GWEN_Param_List_SetCurrentValueAsDouble(GWEN_PARAM_LIST *pl, const char 
*name, double v) {
+  GWEN_PARAM *p;
+
+  p=GWEN_Param_List_GetByName(pl, name);
+  if (p)
+    GWEN_Param_SetCurrentValueAsDouble(p, v);
+}
+
+
+
+
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/base/param_fns.h 
new/gwenhywfar-4.14.0/src/base/param_fns.h
--- old/gwenhywfar-4.13.1/src/base/param_fns.h  2014-09-17 22:19:38.000000000 
+0200
+++ new/gwenhywfar-4.14.0/src/base/param_fns.h  2015-01-04 19:06:53.000000000 
+0100
@@ -34,5 +34,15 @@
 
 
 
+GWENHYWFAR_API int GWEN_Param_List_GetCurrentValueAsInt(const GWEN_PARAM_LIST 
*pl, const char *name, int defVal);
+GWENHYWFAR_API void GWEN_Param_List_SetCurrentValueAsInt(GWEN_PARAM_LIST *pl, 
const char *name, int v);
+
+GWENHYWFAR_API double GWEN_Param_List_GetCurrentValueAsDouble(const 
GWEN_PARAM_LIST *pl, const char *name, double defVal);
+GWENHYWFAR_API void GWEN_Param_List_SetCurrentValueAsDouble(GWEN_PARAM_LIST 
*pl, const char *name, double v);
+
+
+
+
+
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/crypt3/cryptkey_be.h 
new/gwenhywfar-4.14.0/src/crypt3/cryptkey_be.h
--- old/gwenhywfar-4.13.1/src/crypt3/cryptkey_be.h      2014-10-12 
15:12:22.000000000 +0200
+++ new/gwenhywfar-4.14.0/src/crypt3/cryptkey_be.h      2015-05-25 
18:15:30.000000000 +0200
@@ -18,22 +18,22 @@
 
 
 
-typedef int (*GWEN_CRYPT_KEY_SIGN_FN)(GWEN_CRYPT_KEY *k,
+typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_SIGN_FN)(GWEN_CRYPT_KEY *k,
                                       const uint8_t *pInData,
                                       uint32_t inLen,
                                       uint8_t *pSignatureData,
                                       uint32_t *pSignatureLen);
-typedef int (*GWEN_CRYPT_KEY_VERIFY_FN)(GWEN_CRYPT_KEY *k,
+typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_VERIFY_FN)(GWEN_CRYPT_KEY *k,
                                         const uint8_t *pInData,
                                         uint32_t inLen,
                                         const uint8_t *pSignatureData,
                                         uint32_t signatureLen);
-typedef int (*GWEN_CRYPT_KEY_ENCIPHER_FN)(GWEN_CRYPT_KEY *k,
+typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_ENCIPHER_FN)(GWEN_CRYPT_KEY *k,
     const uint8_t *pInData,
     uint32_t inLen,
     uint8_t *pOutData,
     uint32_t *pOutLen);
-typedef int (*GWEN_CRYPT_KEY_DECIPHER_FN)(GWEN_CRYPT_KEY *k,
+typedef GWENHYWFAR_CB int (*GWEN_CRYPT_KEY_DECIPHER_FN)(GWEN_CRYPT_KEY *k,
     const uint8_t *pInData,
     uint32_t inLen,
     uint8_t *pOutData,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/crypt3/cryptkeysym.c 
new/gwenhywfar-4.14.0/src/crypt3/cryptkeysym.c
--- old/gwenhywfar-4.13.1/src/crypt3/cryptkeysym.c      2014-10-12 
15:12:22.000000000 +0200
+++ new/gwenhywfar-4.14.0/src/crypt3/cryptkeysym.c      2015-05-25 
18:15:30.000000000 +0200
@@ -29,7 +29,7 @@
 
 
 
-int GWEN_Crypt_KeySym_Encipher(GWEN_CRYPT_KEY *k,
+GWENHYWFAR_CB int GWEN_Crypt_KeySym_Encipher(GWEN_CRYPT_KEY *k,
                                const uint8_t *pInData,
                                uint32_t inLen,
                                uint8_t *pOutData,
@@ -53,7 +53,7 @@
 
 
 
-int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k,
+GWENHYWFAR_CB int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k,
                                const uint8_t *pInData,
                                uint32_t inLen,
                                uint8_t *pOutData,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/crypt3/cryptkeysym_p.h 
new/gwenhywfar-4.14.0/src/crypt3/cryptkeysym_p.h
--- old/gwenhywfar-4.13.1/src/crypt3/cryptkeysym_p.h    2014-10-12 
15:12:22.000000000 +0200
+++ new/gwenhywfar-4.14.0/src/crypt3/cryptkeysym_p.h    2015-05-25 
18:15:30.000000000 +0200
@@ -29,12 +29,12 @@
 
 static GWENHYWFAR_CB void GWEN_Crypt_KeySym_freeData(void *bp, void *p);
 
-static int GWEN_Crypt_KeySym_Encipher(GWEN_CRYPT_KEY *k,
+static GWENHYWFAR_CB int GWEN_Crypt_KeySym_Encipher(GWEN_CRYPT_KEY *k,
                                       const uint8_t *pInData,
                                       uint32_t inLen,
                                       uint8_t *pOutData,
                                       uint32_t *pOutLen);
-static int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k,
+static GWENHYWFAR_CB int GWEN_Crypt_KeySym_Decipher(GWEN_CRYPT_KEY *k,
                                       const uint8_t *pInData,
                                       uint32_t inLen,
                                       uint8_t *pOutData,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/os/directory_all.c 
new/gwenhywfar-4.14.0/src/os/directory_all.c
--- old/gwenhywfar-4.13.1/src/os/directory_all.c        2014-10-12 
15:12:22.000000000 +0200
+++ new/gwenhywfar-4.14.0/src/os/directory_all.c        2015-05-25 
18:15:30.000000000 +0200
@@ -549,8 +549,8 @@
 
 
 int GWEN_Directory_GetMatchingFilesRecursively(const char *folder,
-    GWEN_STRINGLIST *sl,
-    const char *mask) {
+                                               GWEN_STRINGLIST *sl,
+                                               const char *mask) {
   GWEN_DIRECTORY *d;
   int rv;
   char buffer[256];
@@ -583,10 +583,11 @@
       if (stat(GWEN_Buffer_GetStart(pbuf), &st)==0) {
         if (S_ISDIR(st.st_mode))
           /* add folders to the folder list */
-          GWEN_StringList_AppendString(folderList, GWEN_Buffer_GetStart(pbuf), 
0, 1);
+          GWEN_StringList_AppendString(folderList, GWEN_Buffer_GetStart(pbuf), 
0, 0);
         else {
           if (mask==NULL || GWEN_Text_ComparePattern(buffer, mask, 0)!=-1)
-            GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(pbuf), 0, 1);
+            /* don't check for duplicates here (i.e. last param =0) */
+            GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(pbuf), 0, 0);
         }
       }
       GWEN_Buffer_Crop(pbuf, 0, pos);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/ressource.rc new/gwenhywfar-4.14.0/src/ressource.rc
--- old/gwenhywfar-4.13.1/src/ressource.rc      2015-01-03 23:45:36.000000000 
+0100
+++ new/gwenhywfar-4.14.0/src/ressource.rc      2015-05-25 18:16:39.000000000 
+0200
@@ -43,8 +43,8 @@
 // Version
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 4, 13, 1, 0
- PRODUCTVERSION 4, 13, 1, 0
+ FILEVERSION 4, 14, 0, 0
+ PRODUCTVERSION 4, 14, 0, 0
  FILEFLAGSMASK 0x3fL
  FILEFLAGS 0x0L
  FILEOS 0x40004L      // Windows NT
@@ -58,14 +58,14 @@
             //VALUE "Comments", "\0"
             VALUE "CompanyName", " Aquamaniac\0"
             VALUE "FileDescription", "Multi purpose library\0"
-            VALUE "FileVersion", "v4.13.1\0"
+            VALUE "FileVersion", "v4.14.0\0"
             VALUE "InternalName", "Gwenhywfar\0"
             VALUE "LegalCopyright", "Copyright � 2003 by Martin Preuss\0"
             VALUE "LegalTrademarks", "Aquamaniac\0"
             VALUE "OriginalFilename", "GWENHYWFAR32.DLL\0"
             //VALUE "PrivateBuild", "\0"
             VALUE "ProductName", "Gwenhywfar\0"
-            VALUE "ProductVersion", "v4.13.1stable-0\0"
+            VALUE "ProductVersion", "v4.14.0stable-0\0"
             VALUE "Author", "Martin Preuss\0"
             VALUE "Email", "mar...@libchipcard.de\0"
             VALUE "Homepage", "http://gwenhywfar.sf.net/\0";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/sar/sar.c new/gwenhywfar-4.14.0/src/sar/sar.c
--- old/gwenhywfar-4.13.1/src/sar/sar.c 2014-12-31 14:29:02.000000000 +0100
+++ new/gwenhywfar-4.14.0/src/sar/sar.c 2015-05-25 18:15:30.000000000 +0200
@@ -614,7 +614,8 @@
 
 
 int GWEN_Sar_AddAndDigestFileLink(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER *fh, 
GWEN_MDIGEST *md) {
-#if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && 
_XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L || defined(OS_DARWIN)
+#if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && 
_XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && 
!defined(__MINGW32__)) || defined(OS_DARWIN)
+
   int rv;
   const char *fname;
   GWEN_BUFFER *hbuf;
@@ -1352,7 +1353,7 @@
 
 
 int GWEN_Sar_ExtractAndDigestFileLink(GWEN_SAR *sr, const GWEN_SAR_FILEHEADER 
*fh, int checkOnly) {
-#if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && 
_XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L || defined(OS_DARWIN)
+#if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && 
_XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && 
!defined(__MINGW32__)) || defined(OS_DARWIN)
   int rv;
   const char *fname;
   uint32_t perms;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/src/version.h new/gwenhywfar-4.14.0/src/version.h
--- old/gwenhywfar-4.13.1/src/version.h 2015-01-03 23:45:36.000000000 +0100
+++ new/gwenhywfar-4.14.0/src/version.h 2015-05-25 18:16:39.000000000 +0200
@@ -31,12 +31,12 @@
 
 #define GWEN_VERSION_MAJOR 4
 #define GWENHYWFAR_VERSION_MAJOR 4
-#define GWENHYWFAR_VERSION_MINOR 13
-#define GWENHYWFAR_VERSION_PATCHLEVEL 1
+#define GWENHYWFAR_VERSION_MINOR 14
+#define GWENHYWFAR_VERSION_PATCHLEVEL 0
 #define GWENHYWFAR_VERSION_BUILD 0
 #define GWENHYWFAR_VERSION_TAG "stable"
-#define GWENHYWFAR_VERSION_FULL_STRING "4.13.1stable-0"
-#define GWENHYWFAR_VERSION_STRING "4.13.1"
+#define GWENHYWFAR_VERSION_FULL_STRING "4.14.0stable-0"
+#define GWENHYWFAR_VERSION_STRING "4.14.0"
 
 #define GWENHYWFAR_SO_EFFECTIVE 60
 #define GWENHYWFAR_SO_EFFECTIVE_STR "60"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/tools/typemaker2/tm_builder_c.c 
new/gwenhywfar-4.14.0/tools/typemaker2/tm_builder_c.c
--- old/gwenhywfar-4.13.1/tools/typemaker2/tm_builder_c.c       2014-12-31 
14:29:02.000000000 +0100
+++ new/gwenhywfar-4.14.0/tools/typemaker2/tm_builder_c.c       2015-03-15 
19:53:21.000000000 +0100
@@ -479,9 +479,9 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   uint32_t flags;
-  TYPEMAKER2_TYPEMANAGER *tym;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
   GWEN_Buffer_AppendString(tbuf, "/* macro functions */\n");
@@ -831,6 +831,20 @@
   Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf));
   GWEN_Buffer_Reset(tbuf);
 
+  /* insert freeHook prototype, if needed */
+  s=Typemaker2_Type_GetFreeHook(ty);
+  if (s && *s) {
+    GWEN_Buffer_AppendString(tbuf, "static void ");
+    GWEN_Buffer_AppendString(tbuf, s);
+    GWEN_Buffer_AppendString(tbuf, "(");
+    s=Typemaker2_Type_GetIdentifier(ty);
+    GWEN_Buffer_AppendString(tbuf, s);
+    GWEN_Buffer_AppendString(tbuf, " *p_struct);\n");
+    Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf));
+    GWEN_Buffer_Reset(tbuf);
+  }
+
+
   /* implementation */
   GWEN_Buffer_AppendString(tbuf, "void ");
   s=Typemaker2_Type_GetPrefix(ty);
@@ -851,6 +865,14 @@
     GWEN_Buffer_AppendString(tbuf, "    
GWEN_SignalObject_free(p_struct->_signalObject);\n");
   }
 
+  /* insert freeHook, if any */
+  s=Typemaker2_Type_GetFreeHook(ty);
+  if (s && *s) {
+    GWEN_Buffer_AppendString(tbuf, "    ");
+    GWEN_Buffer_AppendString(tbuf, s);
+    GWEN_Buffer_AppendString(tbuf, "(p_struct);\n");
+  }
+
   if (flags & TYPEMAKER2_FLAGS_WITH_INHERIT) {
     GWEN_Buffer_AppendString(tbuf, "    GWEN_INHERIT_FINI(");
     s=Typemaker2_Type_GetIdentifier(ty);
@@ -1134,12 +1156,12 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   tml=Typemaker2_Type_GetMembers(ty);
   if (tml) {
@@ -1438,14 +1460,16 @@
        GWEN_Buffer_AppendString(tbuf, ") {\n");
   
        GWEN_Buffer_AppendString(tbuf, "  assert(p_struct);\n");
-       if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer &&
-           (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN)) {
-         GWEN_Buffer_AppendString(tbuf, "  if (p_struct->");
-         s=Typemaker2_Member_GetName(tm);
-         GWEN_Buffer_AppendString(tbuf, s);
-         GWEN_Buffer_AppendString(tbuf, ") {\n");
-  
-         /* free */
+        if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) {
+
+          if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) {
+            GWEN_Buffer_AppendString(tbuf, "  if (p_struct->");
+            s=Typemaker2_Member_GetName(tm);
+            GWEN_Buffer_AppendString(tbuf, s);
+            GWEN_Buffer_AppendString(tbuf, ") {\n");
+          }
+
+          /* free */
          if (1) {
            GWEN_BUFFER *srcbuf;
            int rv;
@@ -1469,9 +1493,11 @@
            GWEN_Buffer_AppendString(tbuf, "\n");
            GWEN_Buffer_free(srcbuf);
          }
-  
-         GWEN_Buffer_AppendString(tbuf, "  }\n");
-       }
+
+          if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) {
+            GWEN_Buffer_AppendString(tbuf, "  }\n");
+          }
+        } /* if own */
   
        if (Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_DUP) {
          if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer)
@@ -1685,13 +1711,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -1881,13 +1907,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -1994,13 +2020,13 @@
 static int _buildToDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2044,13 +2070,13 @@
 static int _buildFromDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2105,13 +2131,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2306,13 +2332,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2409,13 +2435,13 @@
 static int _buildToXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2459,13 +2485,13 @@
 static int _buildFromXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2520,13 +2546,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2692,13 +2718,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2806,13 +2832,13 @@
 static int _buildToObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2856,13 +2882,13 @@
 static int _buildFromObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -2930,13 +2956,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -3045,13 +3071,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -3299,13 +3325,13 @@
   GWEN_BUFFER *tbuf;
   const char *s;
   TYPEMAKER2_MEMBER_LIST *tml;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -3587,13 +3613,13 @@
 static int _buildList1Dup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   GWEN_Buffer_AppendString(tbuf, "/* list1 functions */\n");
@@ -3686,13 +3712,13 @@
 static int _buildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -3743,13 +3769,13 @@
 static int _buildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -3793,12 +3819,12 @@
 
 static int _buildDefineEnums(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_ENUM_LIST *enums;
-  TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
+  /* uint32_t flags; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   enums=Typemaker2_Type_GetEnums(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(enums);
   if (Typemaker2_Enum_List_GetCount(enums)) {
@@ -3897,12 +3923,12 @@
 
 int _buildDefineVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const 
char *loc) {
   TYPEMAKER2_VIRTUALFN_LIST *fns;
-  TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
+  /*uint32_t flags; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   fns=Typemaker2_Type_GetVirtualFns(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(fns);
   if (Typemaker2_VirtualFn_List_GetCount(fns)) {
@@ -4027,11 +4053,11 @@
 int _buildProtoVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_VIRTUALFN_LIST *fns;
   TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* uint32_t flags; */
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   fns=Typemaker2_Type_GetVirtualFns(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(fns);
   if (Typemaker2_VirtualFn_List_GetCount(fns)) {
@@ -4213,12 +4239,12 @@
 
 int _buildCodeVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_VIRTUALFN_LIST *fns;
-  TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
+  /* uint32_t flags; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   fns=Typemaker2_Type_GetVirtualFns(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(fns);
   if (Typemaker2_VirtualFn_List_GetCount(fns)) {
@@ -4366,11 +4392,11 @@
 int _buildProtoSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_VIRTUALFN_LIST *fns;
   TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* uint32_t flags; */
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   fns=Typemaker2_Type_GetVirtualFns(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(fns);
   if (Typemaker2_VirtualFn_List_GetCount(fns)) {
@@ -4463,12 +4489,12 @@
 
 int _buildSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_VIRTUALFN_LIST *fns;
-  TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
+  /* uint32_t flags; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   fns=Typemaker2_Type_GetVirtualFns(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(fns);
   if (Typemaker2_VirtualFn_List_GetCount(fns)) {
@@ -4572,12 +4598,12 @@
 
 static int _setEnumStringFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_ENUM_LIST *enums;
-  TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
+  /* uint32_t flags; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   enums=Typemaker2_Type_GetEnums(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(enums);
   if (Typemaker2_Enum_List_GetCount(enums)) {
@@ -4625,11 +4651,11 @@
 static int _buildEnumFromString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_ENUM_LIST *enums;
   TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* uint32_t flags; */
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   enums=Typemaker2_Type_GetEnums(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(enums);
   if (Typemaker2_Enum_List_GetCount(enums)) {
@@ -4757,11 +4783,11 @@
 static int _buildEnumToString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_ENUM_LIST *enums;
   TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* uint32_t flags; */
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   enums=Typemaker2_Type_GetEnums(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(enums);
   if (Typemaker2_Enum_List_GetCount(enums)) {
@@ -4880,14 +4906,14 @@
 static int _buildList1GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, 
TYPEMAKER2_MEMBER *tm) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
   TYPEMAKER2_TYPE *mty;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   mty=Typemaker2_Member_GetTypePtr(tm);
   assert(mty);
@@ -5031,14 +5057,14 @@
 static int _buildTreeGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, 
TYPEMAKER2_MEMBER *tm) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
   TYPEMAKER2_TYPE *mty;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   mty=Typemaker2_Member_GetTypePtr(tm);
   assert(mty);
@@ -5183,9 +5209,9 @@
   GWEN_BUFFER *tbuf;
   TYPEMAKER2_MEMBER_LIST *tml;
   uint32_t flags;
-  TYPEMAKER2_TYPEMANAGER *tym;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
   flags=Typemaker2_Type_GetFlags(ty);
@@ -5233,14 +5259,14 @@
 static int _buildList1SortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE 
*ty, TYPEMAKER2_MEMBER *tm) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
   TYPEMAKER2_TYPE *mty;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   mty=Typemaker2_Member_GetTypePtr(tm);
   assert(mty);
@@ -5428,13 +5454,11 @@
 
 
 static int _buildSortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
-  GWEN_BUFFER *tbuf;
   TYPEMAKER2_MEMBER_LIST *tml;
   uint32_t flags;
-  TYPEMAKER2_TYPEMANAGER *tym;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
-  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
 
   flags=Typemaker2_Type_GetFlags(ty);
 
@@ -5470,12 +5494,12 @@
 
 static int _buildDefineDefines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   TYPEMAKER2_DEFINE_LIST *defines;
-  TYPEMAKER2_TYPEMANAGER *tym;
-  uint32_t flags;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
+  /* uint32_t flags; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   defines=Typemaker2_Type_GetDefines(ty);
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   assert(defines);
   if (Typemaker2_Define_List_GetCount(defines)) {
@@ -5574,14 +5598,14 @@
 static int _buildToHashString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
   TYPEMAKER2_MEMBER_LIST *tml;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -5684,9 +5708,9 @@
 static int _buildInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   uint32_t flags;
-  TYPEMAKER2_TYPEMANAGER *tym;
+  /* TYPEMAKER2_TYPEMANAGER *tym; */
 
-  tym=Typemaker2_Builder_GetTypeManager(tb);
+  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
   flags=Typemaker2_Type_GetFlags(ty);
@@ -5757,13 +5781,13 @@
 static int _buildAttach(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   /* prototype */
   s=Typemaker2_TypeManager_GetApiDeclaration(tym);
@@ -5807,14 +5831,14 @@
 static int _buildSignalFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) {
   GWEN_BUFFER *tbuf;
   const char *s;
-  uint32_t flags;
+  /* uint32_t flags; */
   TYPEMAKER2_TYPEMANAGER *tym;
   TYPEMAKER2_SIGNAL_LIST *sigList;
 
   tym=Typemaker2_Builder_GetTypeManager(tb);
   tbuf=GWEN_Buffer_new(0, 256, 0, 1);
 
-  flags=Typemaker2_Type_GetFlags(ty);
+  /* flags=Typemaker2_Type_GetFlags(ty); */
 
   sigList=Typemaker2_Type_GetSignals(ty);
   if (sigList) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/tools/typemaker2/tm_type.c 
new/gwenhywfar-4.14.0/tools/typemaker2/tm_type.c
--- old/gwenhywfar-4.13.1/tools/typemaker2/tm_type.c    2014-07-23 
22:28:23.000000000 +0200
+++ new/gwenhywfar-4.14.0/tools/typemaker2/tm_type.c    2015-03-15 
18:13:10.000000000 +0100
@@ -76,6 +76,8 @@
       free(ty->aqdb_type);
       free(ty->baseFileName);
 
+      free(ty->freeHook);
+
       free(ty->descr);
 
       Typemaker2_Header_List_free(ty->headers);
@@ -214,6 +216,25 @@
 
 
 
+const char *Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty) {
+  assert(ty);
+  assert(ty->refCount);
+
+  return ty->freeHook;
+}
+
+
+
+void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s) {
+  assert(ty);
+  assert(ty->refCount);
+  free(ty->freeHook);
+  if (s && *s) ty->freeHook=strdup(s);
+  else ty->freeHook=NULL;
+}
+
+
+
 const char *Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty) {
   assert(ty);
   assert(ty->refCount);
@@ -692,6 +713,9 @@
   s=GWEN_XMLNode_GetCharValue(langNode, "basefilename", NULL);
   Typemaker2_Type_SetBaseFileName(ty, s);
 
+  s=GWEN_XMLNode_GetCharValue(langNode, "freeHook", NULL);
+  Typemaker2_Type_SetFreeHook(ty, s);
+
   /* read flags. this element exists for <type> elements.
    * For <typedef> elements the flags are stored in the <defaults> group. */
   s=GWEN_XMLNode_GetCharValue(langNode, "flags", NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/tools/typemaker2/tm_type.h 
new/gwenhywfar-4.14.0/tools/typemaker2/tm_type.h
--- old/gwenhywfar-4.13.1/tools/typemaker2/tm_type.h    2014-07-23 
22:28:23.000000000 +0200
+++ new/gwenhywfar-4.14.0/tools/typemaker2/tm_type.h    2015-03-15 
18:11:12.000000000 +0100
@@ -118,6 +118,9 @@
 const char *Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty);
 void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s);
 
+const char *Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty);
+void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s);
+
 uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty);
 void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/tools/typemaker2/tm_type_p.h 
new/gwenhywfar-4.14.0/tools/typemaker2/tm_type_p.h
--- old/gwenhywfar-4.13.1/tools/typemaker2/tm_type_p.h  2014-07-23 
22:28:23.000000000 +0200
+++ new/gwenhywfar-4.14.0/tools/typemaker2/tm_type_p.h  2015-03-15 
18:13:15.000000000 +0100
@@ -45,6 +45,8 @@
   char *aqdb_type;
   char *baseFileName;
 
+  char *freeHook;
+
 
   TYPEMAKER2_HEADER_LIST *headers;
   TYPEMAKER2_ENUM_LIST *enums;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gwenhywfar-4.13.1/tools/typemaker2/types/c/gwen_bindata.tm2 
new/gwenhywfar-4.14.0/tools/typemaker2/types/c/gwen_bindata.tm2
--- old/gwenhywfar-4.13.1/tools/typemaker2/types/c/gwen_bindata.tm2     
2014-07-23 22:28:23.000000000 +0200
+++ new/gwenhywfar-4.14.0/tools/typemaker2/types/c/gwen_bindata.tm2     
2015-03-15 19:59:03.000000000 +0100
@@ -35,7 +35,6 @@
       <codedef id="dup">
         <code>
           if ($(src).length &amp;&amp; $(src).pointer) {
-            free($(dst).pointer);
             $(dst).pointer=(uint8_t*) malloc($(src).length);
             if ($(dst).pointer) {
               $(dst).length=$(src).length;
@@ -46,6 +45,10 @@
               $(dst).length=0;
             }
           }
+          else {
+            $(dst).pointer=NULL;
+            $(dst).length=0;
+          }
         </code>
       </codedef>
 


Reply via email to