summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--plugins/androhelpers/switch.c3
-rw-r--r--src/glibext/delayed.c67
3 files changed, 68 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index ecfde9f..0463c1a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+12-12-29 Cyrille Bagard <nocbos@gmail.com>
+
+ * plugins/androhelpers/switch.c:
+ Fix an error about types of instructions.
+
+ * src/glibext/delayed.c:
+ Fix some GCC warnings and improve some GLib finalizations.
+
12-12-28 Cyrille Bagard <nocbos@gmail.com>
* plugins/pychrysa/analysis/binaries/module.c:
diff --git a/plugins/androhelpers/switch.c b/plugins/androhelpers/switch.c
index a6f6f5b..9e6f306 100644
--- a/plugins/androhelpers/switch.c
+++ b/plugins/androhelpers/switch.c
@@ -287,6 +287,9 @@ static void look_for_switch_instructions(const GDexMethod *method, GArchInstruct
iter != NULL;
iter = g_arch_instruction_get_next_iter(instrs, iter, end))
{
+ if (!G_IS_DALVIK_INSTRUCTION(iter))
+ continue;
+
opcode = g_dalvik_instruction_get_opcode(G_DALVIK_INSTRUCTION(iter));
if (opcode != DOP_PACKED_SWITCH && opcode != DOP_SPARSE_SWITCH)
diff --git a/src/glibext/delayed.c b/src/glibext/delayed.c
index e4dc37e..ae943d7 100644
--- a/src/glibext/delayed.c
+++ b/src/glibext/delayed.c
@@ -96,6 +96,12 @@ static void g_typed_queue_class_init(GTypedQueueClass *);
/* Initialise une instance de gestionnaire de travaux typés. */
static void g_typed_queue_init(GTypedQueue *);
+/* Supprime toutes les références externes. */
+static void g_typed_queue_dispose(GTypedQueue *);
+
+/* Procède à la libération totale de la mémoire. */
+static void g_typed_queue_finalize(GTypedQueue *);
+
/* Crée un nouveau thread dédié à un type de travaux donné. */
static GTypedQueue *g_typed_queue_new(GType, GtkExtStatusBar *);
@@ -214,14 +220,10 @@ static void g_delayed_work_init(GDelayedWork *work)
static void g_delayed_work_dispose(GDelayedWork *work)
{
- gpointer obj_class; /* Classe parente */
-
g_mutex_free(work->mutex);
g_cond_free(work->cond);
- obj_class = g_type_class_peek_parent(G_DELAYED_WORK_GET_CLASS(work));
-
- //G_OBJECT_CLASS(obj_class)->dispose(G_OBJECT(work));
+ G_OBJECT_CLASS(g_delayed_work_parent_class)->dispose(G_OBJECT(work));
}
@@ -240,11 +242,7 @@ static void g_delayed_work_dispose(GDelayedWork *work)
static void g_delayed_work_finalize(GDelayedWork *work)
{
- gpointer obj_class; /* Classe parente */
-
- obj_class = g_type_class_peek_parent(G_DELAYED_WORK_GET_CLASS(work));
-
- //G_OBJECT_CLASS(obj_class)->finalize(G_OBJECT(work));
+ G_OBJECT_CLASS(g_delayed_work_parent_class)->finalize(G_OBJECT(work));
}
@@ -326,6 +324,12 @@ G_DEFINE_TYPE(GTypedQueue, g_typed_queue, G_TYPE_OBJECT);
static void g_typed_queue_class_init(GTypedQueueClass *klass)
{
+ GObjectClass *object; /* Autre version de la classe */
+
+ object = G_OBJECT_CLASS(klass);
+
+ object->dispose = (GObjectFinalizeFunc/* ! */)g_typed_queue_dispose;
+ object->finalize = (GObjectFinalizeFunc)g_typed_queue_finalize;
}
@@ -367,6 +371,47 @@ static void g_typed_queue_init(GTypedQueue *queue)
/******************************************************************************
* *
+* Paramètres : queue = instance d'objet GLib à traiter. *
+* *
+* Description : Supprime toutes les références externes. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_typed_queue_dispose(GTypedQueue *queue)
+{
+ g_mutex_free(queue->mutex);
+ g_cond_free(queue->cond);
+
+ G_OBJECT_CLASS(g_typed_queue_parent_class)->dispose(G_OBJECT(queue));
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : queue = instance d'objet GLib à traiter. *
+* *
+* Description : Procède à la libération totale de la mémoire. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_typed_queue_finalize(GTypedQueue *queue)
+{
+ G_OBJECT_CLASS(g_typed_queue_parent_class)->finalize(G_OBJECT(queue));
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : type = type dont seront marqués tous les travaux donnés.*
* statusbar = barre de statut à tenir informée. *
* *
@@ -385,7 +430,9 @@ static GTypedQueue *g_typed_queue_new(GType type, GtkExtStatusBar *statusbar)
result = g_object_new(G_TYPE_TYPED_QUEUE, NULL);
result->type = type;
+
result->statusbar = statusbar;
+ g_object_ref(statusbar);
return result;