Fixed MDBProps memory leaks

This commit is contained in:
William Rogers
2013-06-14 12:36:20 -05:00
committed by Nirgal Vourgère
parent 23942c19d3
commit fd6e52f9bd
2 changed files with 25 additions and 4 deletions

View File

@@ -48,11 +48,21 @@ static char *type_name[] = {"Form",
void mdb_free_catalog(MdbHandle *mdb) void mdb_free_catalog(MdbHandle *mdb)
{ {
unsigned int i; unsigned int i, j;
MdbCatalogEntry *entry;
if ((!mdb) || (!mdb->catalog)) return; if ((!mdb) || (!mdb->catalog)) return;
for (i=0; i<mdb->catalog->len; i++) for (i=0; i<mdb->catalog->len; i++) {
g_free (g_ptr_array_index(mdb->catalog, i)); entry = (MdbCatalogEntry *)g_ptr_array_index(mdb->catalog, i);
if (entry) {
if (entry->props) {
for (j=0; j<entry->props->len; j++)
mdb_free_props(g_array_index(entry->props, MdbProperties*, j));
g_array_free(entry->props, TRUE);
}
g_free(entry);
}
}
g_ptr_array_free(mdb->catalog, TRUE); g_ptr_array_free(mdb->catalog, TRUE);
mdb->catalog = NULL; mdb->catalog = NULL;
} }

View File

@@ -50,12 +50,23 @@ mdb_read_props_list(MdbHandle *mdb, gchar *kkd, int len)
} }
return names; return names;
} }
static gboolean
free_hash_entry(gpointer key, gpointer value, gpointer user_data)
{
g_free(key);
g_free(value);
return TRUE;
}
void void
mdb_free_props(MdbProperties *props) mdb_free_props(MdbProperties *props)
{ {
if (!props) return; if (!props) return;
if (props->name) g_free(props->name); if (props->name) g_free(props->name);
if (props->hash) {
g_hash_table_foreach(props->hash, (GHFunc)free_hash_entry, 0);
g_hash_table_destroy(props->hash);
}
g_free(props); g_free(props);
} }
@@ -148,7 +159,7 @@ mdb_dump_props(MdbProperties *props, FILE *outfile, int show_name) {
/* /*
* That function takes a raw KKD/MR2 binary buffer, * That function takes a raw KKD/MR2 binary buffer,
* typically read from LvProp in table MSysbjects * typically read from LvProp in table MSysbjects
* and returns a GPtrArray of MdbProps* * and returns a GArray of MdbProps*
*/ */
GArray* GArray*
mdb_kkd_to_props(MdbHandle *mdb, void *buffer, size_t len) { mdb_kkd_to_props(MdbHandle *mdb, void *buffer, size_t len) {