diff options
Diffstat (limited to 'src/format/format.c')
-rw-r--r-- | src/format/format.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/format/format.c b/src/format/format.c index cd71a21..ab4864f 100644 --- a/src/format/format.c +++ b/src/format/format.c @@ -156,10 +156,19 @@ static void g_binary_format_init(GBinFormat *format) static void g_binary_format_dispose(GBinFormat *format) { - g_clear_object(&format->demangler); + size_t i; /* Boucle de parcours */ + + g_clear_object(&format->content); + + g_rw_lock_clear(&format->pt_lock); g_clear_object(&format->info); + g_clear_object(&format->demangler); + + for (i = 0; i < format->sym_count; i++) + g_clear_object(&format->symbols[i]); + g_rw_lock_clear(&format->syms_lock); g_mutex_clear(&format->error_mutex); @@ -185,6 +194,15 @@ static void g_binary_format_finalize(GBinFormat *format) { size_t i; /* Boucle de parcours */ + if (format->entry_points != NULL) + free(format->entry_points); + + if (format->extra_points != NULL) + free(format->extra_points); + + if (format->symbols != NULL) + free(format->symbols); + if (format->errors != NULL) { for (i = 0; i < format->error_count; i++) @@ -386,8 +404,7 @@ void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool ent if (entry) { - format->entry_points = (virt_t *)realloc(format->entry_points, - ++format->ep_count * sizeof(virt_t)); + format->entry_points = realloc(format->entry_points, ++format->ep_count * sizeof(virt_t)); format->entry_points[format->ep_count - 1] = pt; @@ -398,8 +415,7 @@ void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool ent { format->xp_allocated += EXTRA_POINT_BLOCK; - format->extra_points = (virt_t *)realloc(format->extra_points, - format->xp_allocated * sizeof(virt_t)); + format->extra_points = realloc(format->extra_points, format->xp_allocated * sizeof(virt_t)); } |