diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/format/format.c | 62 | ||||
| -rw-r--r-- | src/format/symbol.c | 7 | 
2 files changed, 6 insertions, 63 deletions
diff --git a/src/format/format.c b/src/format/format.c index b43f78f..261f152 100644 --- a/src/format/format.c +++ b/src/format/format.c @@ -57,9 +57,6 @@ static void g_binary_format_finalize(GBinFormat *);  /* Retire un symbole de la collection du format binaire. */  static void _g_binary_format_remove_symbol(GBinFormat *, size_t); -/* Supprime les éventuels doublons au sein des symboles. */ -static void g_binary_format_delete_duplicated_symbols(GBinFormat *); -  /* Recherche le symbole associé à une adresse. */  static bool _g_binary_format_find_symbol(const GBinFormat *, const vmpa2t *, __compar_fn_t, size_t *, GBinSymbol **); @@ -219,8 +216,6 @@ static void g_binary_format_finalize(GBinFormat *format)  bool g_binary_format_complete_loading(GBinFormat *format, GtkStatusStack *status)  { -    g_binary_format_delete_duplicated_symbols(format); -      return true;  } @@ -929,63 +924,6 @@ void g_binary_format_remove_symbol(GBinFormat *format, GBinSymbol *symbol)  /******************************************************************************  *                                                                             * -*  Paramètres  : format = informations chargées à corriger si besoin est.     * -*                                                                             * -*  Description : Supprime les éventuels doublons au sein des symboles.        * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void g_binary_format_delete_duplicated_symbols(GBinFormat *format) -{ -    size_t i;                               /* Boucle de parcours          */ -    const mrange_t *range;                  /* Emplacement à consulter     */ -    mrange_t last;                          /* Dernière localisation vue   */ -    size_t index;                           /* Indice de suppression       */ - -    g_binary_format_lock_unlock_symbols_wr(format, true); - -    if (format->sym_count > 1) -    { -        range = g_binary_symbol_get_range(format->symbols[0]); -        copy_mrange(&last, range); -    } - -    for (i = 1; i < format->sym_count; i++) -    { -        range = g_binary_symbol_get_range(format->symbols[i]); - -        if (cmp_vmpa(get_mrange_addr(&last), get_mrange_addr(range)) == 0) -        { -            /* TODO : établir une meilleur comparaison pour trouver le bon candidat */ -            /* TODO : (éviter de) traiter selon le type aussi */ -            index = (get_mrange_length(&last) == 0 ? i - 1 : i); -            /* -            printf("DELETE @ %zu / 0x%08x '%s'\n", index, -                   (unsigned int)last.addr.virtual, -                   g_binary_symbol_get_label(format->symbols[index])); -            */ - -            _g_binary_format_remove_symbol(format, index); - -            i--; - -        } - -        copy_mrange(&last, range); - -    } - -    g_binary_format_lock_unlock_symbols_wr(format, false); - -} - - -/****************************************************************************** -*                                                                             *  *  Paramètres  : format = informations chargées à consulter.                  *  *                label  = étiquette à retrouver lors des recherches.          *  *                symbol = éventuel symbole trouvé à déréfenrencer. [OUT]      * diff --git a/src/format/symbol.c b/src/format/symbol.c index 899740a..22403c5 100644 --- a/src/format/symbol.c +++ b/src/format/symbol.c @@ -237,8 +237,13 @@ GBinSymbol *g_binary_symbol_new(const mrange_t *range, SymbolType type)  int g_binary_symbol_cmp(const GBinSymbol * const *a, const GBinSymbol * const *b)  {      int result;                             /* Bilan à retourner           */ +    const mrange_t *range_a;                /* Emplacement du symbole A    */ +    const mrange_t *range_b;                /* Emplacement du symbole B    */ -    result = cmp_mrange(&(*a)->range, &(*b)->range); +    range_a = &(*a)->range; +    range_b = &(*b)->range; + +    result = cmp_vmpa(get_mrange_addr(range_a), get_mrange_addr(range_b));      return result;  | 
