diff options
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | plugins/androhelpers/switch.c | 3 | ||||
| -rw-r--r-- | src/glibext/delayed.c | 67 | 
3 files changed, 68 insertions, 10 deletions
| @@ -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; | 
