diff -ruN recode.orig/files/patch-src::names.c recode/files/patch-src::names.c --- recode.orig/files/patch-src::names.c Thu Jan 1 03:00:00 1970 +++ recode/files/patch-src::names.c Fri Dec 2 16:13:10 2005 @@ -0,0 +1,33 @@ +--- src/names.c.orig Wed Dec 6 21:41:29 2000 ++++ src/names.c Fri Dec 2 16:12:26 2005 +@@ -101,6 +101,21 @@ + return strcmp (first->name, second->name) == 0; + } + ++static void ++alias_freer (void *param) ++{ ++ RECODE_ALIAS alias = param; ++ struct recode_surface_list *next = alias->implied_surfaces; ++ struct recode_surface_list *p; ++ while (next) ++ { ++ p = next->next; ++ free(next); ++ next = p; ++ } ++ free(alias); ++} ++ + bool + prepare_for_aliases (RECODE_OUTER outer) + { +@@ -108,7 +123,7 @@ + outer->number_of_symbols = 0; + + outer->alias_table +- = hash_initialize (800, NULL, alias_hasher, alias_comparator, free); ++ = hash_initialize (800, NULL, alias_hasher, alias_comparator, alias_freer); + if (!outer->alias_table) + return false; + diff -ruN recode.orig/files/patch-src::outer.c recode/files/patch-src::outer.c --- recode.orig/files/patch-src::outer.c Thu Jan 1 03:00:00 1970 +++ recode/files/patch-src::outer.c Fri Dec 2 16:14:07 2005 @@ -0,0 +1,18 @@ +--- src/outer.c.orig Wed Aug 30 23:16:14 2000 ++++ src/outer.c Fri Dec 2 16:12:26 2005 +@@ -617,7 +617,14 @@ + if (outer->alias_table) + hash_free (outer->alias_table); + if (outer->argmatch_charset_array) +- free (outer->argmatch_charset_array); ++ { ++ char **cursor; ++ for (cursor = outer->argmatch_charset_array; *cursor; cursor++) ++ free (*cursor); ++ for (cursor = outer->argmatch_surface_array; *cursor; cursor++) ++ free (*cursor); ++ free (outer->argmatch_charset_array); ++ } + if (outer->one_to_same) + free ((void *) outer->one_to_same); + free (outer);