diff options
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/symbol.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/format/symbol.c b/src/format/symbol.c index 3f8e808..9c8a6e0 100644 --- a/src/format/symbol.c +++ b/src/format/symbol.c @@ -30,6 +30,7 @@ #include "symbol-int.h" +#include "../glibext/gbinarycursor.h" #include "../glibext/linegen-int.h" @@ -61,10 +62,10 @@ static void g_binary_symbol_finalize(GBinSymbol *); static size_t g_binary_symbol_count_lines(const GBinSymbol *); /* Retrouve l'emplacement correspondant à une position donnée. */ -static void g_binary_symbol_compute_addr(const GBinSymbol *, gint, vmpa2t *, size_t, size_t); +static void g_binary_symbol_compute_cursor(const GBinSymbol *, gint, size_t, size_t, GLineCursor **); /* Détermine si le conteneur s'inscrit dans une plage donnée. */ -static int g_binary_symbol_contains_addr(const GBinSymbol *, const vmpa2t *, size_t, size_t); +static int g_binary_symbol_contains_cursor(const GBinSymbol *, size_t, size_t, const GLineCursor *); /* Renseigne sur les propriétés liées à un générateur. */ static BufferLineFlags g_binary_symbol_get_flags(const GBinSymbol *, size_t, size_t); @@ -144,8 +145,8 @@ static void g_binary_symbol_init(GBinSymbol *symbol) static void g_binary_symbol_interface_init(GLineGeneratorInterface *iface) { iface->count = (linegen_count_lines_fc)g_binary_symbol_count_lines; - iface->compute = (linegen_compute_fc)g_binary_symbol_compute_addr; - iface->contains = (linegen_contains_fc)g_binary_symbol_contains_addr; + iface->compute = (linegen_compute_fc)g_binary_symbol_compute_cursor; + iface->contains = (linegen_contains_fc)g_binary_symbol_contains_cursor; iface->get_flags = (linegen_get_flags_fc)g_binary_symbol_get_flags; iface->print = (linegen_print_fc)g_binary_symbol_print; @@ -503,9 +504,9 @@ static size_t g_binary_symbol_count_lines(const GBinSymbol *symbol) * * * Paramètres : symbol = générateur à consulter. * * x = position géographique sur la ligne concernée. * -* addr = position en mémoire à analyser. * * index = indice de cette même ligne dans le tampon global. * * repeat = indice d'utilisations successives du générateur. * +* cursor = emplacement à constituer. [OUT] * * * * Description : Retrouve l'emplacement correspondant à une position donnée. * * * @@ -515,9 +516,11 @@ static size_t g_binary_symbol_count_lines(const GBinSymbol *symbol) * * ******************************************************************************/ -void g_binary_symbol_compute_addr(const GBinSymbol *symbol, gint x, vmpa2t *addr, size_t index, size_t repeat) +void g_binary_symbol_compute_cursor(const GBinSymbol *symbol, gint x, size_t index, size_t repeat, GLineCursor **cursor) { - copy_vmpa(addr, get_mrange_addr(&symbol->range)); + *cursor = g_binary_cursor_new(); + + g_binary_cursor_update(G_BINARY_CURSOR(*cursor), get_mrange_addr(&symbol->range)); } @@ -525,9 +528,9 @@ void g_binary_symbol_compute_addr(const GBinSymbol *symbol, gint x, vmpa2t *addr /****************************************************************************** * * * Paramètres : symbol = générateur à consulter. * -* addr = position en mémoire à analyser. * * index = indice de cette même ligne dans le tampon global. * * repeat = indice d'utilisations successives du générateur. * +* cursor = emplacement à analyser. * * * * Description : Détermine si le conteneur s'inscrit dans une plage donnée. * * * @@ -537,9 +540,14 @@ void g_binary_symbol_compute_addr(const GBinSymbol *symbol, gint x, vmpa2t *addr * * ******************************************************************************/ -static int g_binary_symbol_contains_addr(const GBinSymbol *symbol, const vmpa2t *addr, size_t index, size_t repeat) +static int g_binary_symbol_contains_cursor(const GBinSymbol *symbol, size_t index, size_t repeat, const GLineCursor *cursor) { int result; /* Conclusion à retourner */ + vmpa2t addr; /* Autre emplacement à comparer*/ + + assert(G_IS_BINARY_CURSOR(cursor)); + + g_binary_cursor_get_info(G_BINARY_CURSOR(cursor), &addr); /** * En tant que générateur, le symbole ne couvre qu'une ou plusieurs lignes @@ -552,7 +560,7 @@ static int g_binary_symbol_contains_addr(const GBinSymbol *symbol, const vmpa2t * */ - result = cmp_vmpa(addr, get_mrange_addr(&symbol->range)); + result = cmp_vmpa(&addr, get_mrange_addr(&symbol->range)); return result; |