summaryrefslogtreecommitdiff
path: root/src/format/format.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/format.c')
-rw-r--r--src/format/format.c26
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));
}