diff options
Diffstat (limited to 'src/arch/dalvik/operands/pool.c')
-rw-r--r-- | src/arch/dalvik/operands/pool.c | 52 |
1 files changed, 17 insertions, 35 deletions
diff --git a/src/arch/dalvik/operands/pool.c b/src/arch/dalvik/operands/pool.c index 4884867..be38ca3 100644 --- a/src/arch/dalvik/operands/pool.c +++ b/src/arch/dalvik/operands/pool.c @@ -33,6 +33,7 @@ #include "../../operand-int.h" #include "../../sharing/manager.h" +#include "../../../common/sort.h" #include "../../../format/dex/pool.h" @@ -75,11 +76,8 @@ static void g_dalvik_pool_operand_finalize(GDalvikPoolOperand *); /* Initialise un nouvel objet partagé avec des informations. */ static bool g_dalvik_pool_operand_do_init(GDalvikPoolOperand *, const GDalvikPoolOperand *); -/* Indique l'objet partagé correspond à une description donnée. */ -static gboolean g_dalvik_pool_operand_compare_info(const GDalvikPoolOperand *, const GDalvikPoolOperand *); - /* Compare un opérande avec un autre. */ -static bool g_dalvik_pool_operand_compare(const GDalvikPoolOperand *, const GDalvikPoolOperand *); +static int g_dalvik_pool_operand_compare(const GDalvikPoolOperand * const *, const GDalvikPoolOperand * const *); /* Traduit un opérande en version humainement lisible. */ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *, GBufferLine *, AsmSyntax); @@ -128,7 +126,6 @@ static void g_dalvik_pool_operand_class_init(GDalvikPoolOperandClass *klass) operand = G_ARCH_OPERAND_CLASS(klass); operand->init = (init_shared_fc)g_dalvik_pool_operand_do_init; - operand->cmp_info = (compare_shared_info_fc)g_dalvik_pool_operand_compare_info; operand->compare = (operand_compare_fc)g_dalvik_pool_operand_compare; operand->print = (operand_print_fc)g_dalvik_pool_operand_print; @@ -241,7 +238,7 @@ GArchOperand *g_dalvik_pool_operand_new(GDexFormat *format, DalvikPoolType type, fake.type = type; fake.index = (size == MDS_8_BITS ? index8 : index16); - result = G_ARCH_OPERAND(g_share_manager_get(_dalvik_pool_operand_manager, &fake)); + result = G_ARCH_OPERAND(g_share_manager_get(_dalvik_pool_operand_manager, (GSharedInstance *)&fake)); gdpon_exit: @@ -278,30 +275,6 @@ static bool g_dalvik_pool_operand_do_init(GDalvikPoolOperand *operand, const GDa /****************************************************************************** * * -* Paramètres : operand = objet partagé à consulter. * -* fake = coquille vide contenant les infos à comparer. * -* * -* Description : Indique l'objet partagé correspond à une description donnée. * -* * -* Retour : TRUE si les détails centraux sont partagés, FALSE sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static gboolean g_dalvik_pool_operand_compare_info(const GDalvikPoolOperand *operand, const GDalvikPoolOperand *fake) -{ - gboolean result; /* Bilan à retourner */ - - result = g_dalvik_pool_operand_compare(operand, fake); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : a = premier opérande à consulter. * * b = second opérande à consulter. * * * @@ -313,13 +286,22 @@ static gboolean g_dalvik_pool_operand_compare_info(const GDalvikPoolOperand *ope * * ******************************************************************************/ -static bool g_dalvik_pool_operand_compare(const GDalvikPoolOperand *a, const GDalvikPoolOperand *b) +static int g_dalvik_pool_operand_compare(const GDalvikPoolOperand * const *a, const GDalvikPoolOperand * const *b) { - bool result; /* Bilan à renvoyer */ + int result; /* Bilan à renvoyer */ + const GDalvikPoolOperand *_a; /* Accès rapide à l'élément A */ + const GDalvikPoolOperand *_b; /* Accès rapide à l'élément B */ + + _a = *a; + _b = *b; + + result = sort_unsigned_long((unsigned long)_a->format, (unsigned long)_b->format); + + if (result == 0) + result = sort_unsigned_long(_a->type, _b->type); - result = (a->format == b->format); - result &= (a->type == b->type); - result &= (a->index == b->index); + if (result == 0) + result = sort_unsigned_long(_a->index, _b->index); return result; |