summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-03-21 18:45:37 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-03-21 18:45:37 (GMT)
commit88e34a085a69d23da262a92641a80f409931ea82 (patch)
tree1a918d76943ed06bba249a74cfaa57dd35add93b
parent02993e7f7d215ae29a041941d686ceab965d0b97 (diff)
Displayed the first line content of each entry point again.
-rw-r--r--ChangeLog10
-rw-r--r--src/glibext/gbufferline.c22
-rw-r--r--src/glibext/linecolumn.c44
-rw-r--r--src/glibext/linecolumn.h3
-rw-r--r--src/gui/dialogs/gotox.c21
5 files changed, 82 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 53b4404..b8cd12c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+17-03-21 Cyrille Bagard <nocbos@gmail.com>
+
+ * src/glibext/gbufferline.c:
+ * src/glibext/linecolumn.c:
+ * src/glibext/linecolumn.h:
+ Update code.
+
+ * src/gui/dialogs/gotox.c:
+ Display the first line content of each entry point again.
+
17-03-20 Cyrille Bagard <nocbos@gmail.com>
* src/format/elf/strings.c:
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index 4eb56d9..8c8f4f6 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -666,8 +666,7 @@ bool g_buffer_line_has_text(const GBufferLine *line, BufferLineColumn first, Buf
char *g_buffer_line_get_text(const GBufferLine *line, BufferLineColumn first, BufferLineColumn end, bool markup)
{
char *result; /* Construction à retourner */
- BufferLineColumn i; /* Boucle de parcours #1 */
- size_t j; /* Boucle de parcours #2 */
+ BufferLineColumn i; /* Boucle de parcours */
char *extra; /* Contenu à intégrer au texte */
result = NULL;
@@ -679,19 +678,18 @@ char *g_buffer_line_get_text(const GBufferLine *line, BufferLineColumn first, Bu
if (i > first && result != NULL)
result = stradd(result, " ");
- for (j = 0; j < line->columns[i].count; j++)
- {
- extra = get_line_segment_text(line->columns[i].segments[j], markup);
+ extra = get_line_column_text(&line->columns[i], markup);
- if (result == NULL)
- result = extra;
+ /* Si la colonne était vide, suivante ! */
+ if (extra == NULL) continue;
- else
- {
- result = stradd(result, extra);
- free(extra);
- }
+ if (result == NULL)
+ result = extra;
+ else
+ {
+ result = stradd(result, extra);
+ free(extra);
}
}
diff --git a/src/glibext/linecolumn.c b/src/glibext/linecolumn.c
index 0c4a77d..0d38b90 100644
--- a/src/glibext/linecolumn.c
+++ b/src/glibext/linecolumn.c
@@ -28,6 +28,9 @@
#include <malloc.h>
+#include "../common/extstr.h"
+
+
/******************************************************************************
* *
@@ -429,6 +432,47 @@ void draw_line_column_segments(const line_column *column, cairo_t *cairo, gint x
/******************************************************************************
* *
+* Paramètres : column = colonne de ligne de texte à venir consulter. *
+* markup = indique si le texte doit être décoré ou non. *
+* *
+* Description : Donne le texte représenté par une colonne de ligne de texte. *
+* *
+* Retour : Texte à libérer de la mémoire après usage. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+char *get_line_column_text(const line_column *column, bool markup)
+{
+ char *result; /* Construction à retourner */
+ size_t i; /* Boucle de parcours */
+ char *extra; /* Contenu à intégrer au texte */
+
+ result = NULL;
+
+ for (i = 0; i < column->count; i++)
+ {
+ extra = get_line_segment_text(column->segments[i], markup);
+
+ if (result == NULL)
+ result = extra;
+
+ else
+ {
+ result = stradd(result, extra);
+ free(extra);
+ }
+
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : column = colonne de ligne de texte à manipuler. *
* ctx = éléments à disposition pour l'exportation. *
* type = type d'exportation attendue. *
diff --git a/src/glibext/linecolumn.h b/src/glibext/linecolumn.h
index c88baec..5877e36 100644
--- a/src/glibext/linecolumn.h
+++ b/src/glibext/linecolumn.h
@@ -85,6 +85,9 @@ line_segment *get_line_column_content_from_index(const line_column *, size_t);
/* Imprime le contenu d'une colonne de ligne de texte. */
void draw_line_column_segments(const line_column *, cairo_t *, gint, gint, const segcnt_list *);
+/* Donne le texte représenté par une colonne de ligne de texte. */
+char *get_line_column_text(const line_column *, bool);
+
/* Exporte la ligne de texte représentée. */
void export_line_column_segments(const line_column *, buffer_export_context *, BufferExportType, int);
diff --git a/src/gui/dialogs/gotox.c b/src/gui/dialogs/gotox.c
index c666ccb..e467f8e 100644
--- a/src/gui/dialogs/gotox.c
+++ b/src/gui/dialogs/gotox.c
@@ -342,8 +342,8 @@ GtkWidget *create_gotox_dialog_for_cross_references(GtkWindow *parent, GLoadedBi
static void add_new_location_to_list(GtkTreeStore *store, GLoadedBinary *binary, const vmpa2t *addr, GBinSymbol *hint)
{
-#if 0
- GCodeBuffer *buffer; /* Tampon de désassemblage */
+ GBufferCache *cache; /* Tampon de désassemblage */
+ size_t index; /* Indice de ligne à traiter */
GBufferLine *line; /* Ligne présente à l'adresse */
char *virtual; /* Transcription d'adresse */
const char *label; /* Etiquette de symbole trouvé */
@@ -356,10 +356,19 @@ static void add_new_location_to_list(GtkTreeStore *store, GLoadedBinary *binary,
char *content; /* Contenu de la ligne visée */
GtkTreeIter iter; /* Point d'insertion */
- /* Adresse en mémoire virtuelle */
+ /* Détermination de la ligne concernée */
+
+ cache = g_loaded_binary_get_disassembled_cache(binary);
+
+ index = g_buffer_cache_find_index_by_addr(cache, addr, true);
+
+ index = g_buffer_cache_look_for_flag(cache, index, BLF_HAS_CODE);
- buffer = g_loaded_binary_get_disassembled_buffer(binary);
- line = g_code_buffer_find_line_by_addr(buffer, addr, BLF_HAS_CODE, NULL);
+ line = g_buffer_cache_find_line_by_index(cache, index);
+
+ g_object_unref(G_OBJECT(cache));
+
+ /* Adresse en mémoire virtuelle */
if (line != NULL)
virtual = g_buffer_line_get_text(line, BLC_VIRTUAL, BLC_VIRTUAL + 1, true);
@@ -466,7 +475,7 @@ static void add_new_location_to_list(GtkTreeStore *store, GLoadedBinary *binary,
if (line != NULL)
g_object_unref(G_OBJECT(line));
-#endif
+
}