summaryrefslogtreecommitdiff
path: root/src/gui/panels
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/panels')
-rw-r--r--src/gui/panels/symbols.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/gui/panels/symbols.c b/src/gui/panels/symbols.c
index 6b0b999..d1e60fc 100644
--- a/src/gui/panels/symbols.c
+++ b/src/gui/panels/symbols.c
@@ -39,6 +39,7 @@
#include "panel-int.h"
#include "updating-int.h"
#include "../core/global.h"
+#include "../../common/extstr.h"
#include "../../format/format.h"
#include "../../format/symiter.h"
#include "../../gtkext/easygtk.h"
@@ -56,6 +57,7 @@ struct _GSymbolsPanel
GPanelItem parent; /* A laisser en premier */
GLoadedBinary *binary; /* Binaire à prendre en compte */
+ const char *sep; /* Délimitateur à utiliser */
size_t count; /* Quantité de symboles utiles */
@@ -164,7 +166,7 @@ static gboolean show_all_classes_in_tree_view(GtkTreeModel *, GtkTreePath *, Gtk
static GtkTreeIter update_symbol_partial_name_in_tree_view(GtkTreeStore *, GtkTreeIter *, const char *, const regmatch_t *, size_t);
/* Met en surbrillance les éléments recherchés dans les noms. */
-static void update_symbol_name_in_tree_view(GtkTreeStore *, const GBinSymbol *, const regmatch_t *);
+static void update_symbol_name_in_tree_view(const GSymbolsPanel *, GtkTreeStore *, const GBinSymbol *, const regmatch_t *);
@@ -655,8 +657,13 @@ static void change_symbols_panel_current_binary(GSymbolsPanel *panel, GLoadedBin
/* Si le panneau actif représente un binaire, actualisation de l'affichage */
if (binary != NULL)
+ {
+ panel->sep = "."/*"::"*/; /* FIXME */
+
run_panel_update(G_UPDATABLE_PANEL(panel), PUI_0);
+ }
+
}
@@ -941,10 +948,8 @@ static bool find_parent_for_symbol(const GSymbolsPanel *panel, const GBinSymbol
bool result; /* Bilan à retourner */
const char *label; /* Etiquette immuable */
char *string; /* Etiquette modifiable */
- const char *sep; /* Délimitateur à utiliser */
char *start; /* Début de boucle de parcours */
char *token; /* Partie de texte isolée */
- char *saveptr; /* Ctx. interne de découpage */
char *next; /* Prochaine partie à traiter */
result = false;
@@ -956,18 +961,16 @@ static bool find_parent_for_symbol(const GSymbolsPanel *panel, const GBinSymbol
string = strdup(label);
- sep = "."/*"::"*/; /* FIXME */
-
- for (start = string, token = strtok_r(start, sep, &saveptr); ; start = NULL, token = next)
+ for (start = string, token = strtok_w(&start, panel->sep); ; token = next)
{
- next = strtok_r(NULL, sep, &saveptr);
+ next = strtok_w(&start, panel->sep);
if (next == NULL)
{
*last = (token - string);
break;
}
- *parent = ensure_symbol_node_exist(panel, (start == string ? NULL : parent), token, match, token - string);
+ *parent = ensure_symbol_node_exist(panel, (token == string ? NULL : parent), token, match, token - string);
result = true;
@@ -1245,9 +1248,10 @@ static GtkTreeIter update_symbol_partial_name_in_tree_view(GtkTreeStore *store,
/******************************************************************************
* *
-* Paramètres : store = gestionnaire de données en arborescence. *
+* Paramètres : panel = panneau à mettre à jour. *
+* store = gestionnaire de données en arborescence. *
* symbol = routine ou objet à intégrer. *
-* match = portion de texte à mettre en évidence. *
+* match = portion de texte à mettre en évidence. *
* *
* Description : Met en surbrillance les éléments recherchés dans les noms. *
* *
@@ -1257,15 +1261,13 @@ static GtkTreeIter update_symbol_partial_name_in_tree_view(GtkTreeStore *store,
* *
******************************************************************************/
-static void update_symbol_name_in_tree_view(GtkTreeStore *store, const GBinSymbol *symbol, const regmatch_t *match)
+static void update_symbol_name_in_tree_view(const GSymbolsPanel *panel, GtkTreeStore *store, const GBinSymbol *symbol, const regmatch_t *match)
{
const char *label; /* Etiquette immuable */
char *string; /* Etiquette modifiable */
- const char *sep; /* Délimitateur à utiliser */
GtkTreeIter parent; /* Point d'analyse courant */
char *start; /* Début de boucle de parcours */
char *token; /* Partie de texte isolée */
- char *saveptr; /* Ctx. interne de découpage */
label = g_binary_symbol_get_label(symbol);
@@ -1273,13 +1275,11 @@ static void update_symbol_name_in_tree_view(GtkTreeStore *store, const GBinSymbo
{
string = strdup(label);
- sep = "."/*"::"*/; /* FIXME */
-
- for (start = string, token = strtok_r(start, sep, &saveptr);
+ for (start = string, token = strtok_w(&start, panel->sep);
token != NULL;
- start = NULL, token = strtok_r(NULL, sep, &saveptr))
+ token = strtok_w(&start, panel->sep))
{
- parent = update_symbol_partial_name_in_tree_view(store, (start == string ? NULL : &parent),
+ parent = update_symbol_partial_name_in_tree_view(store, (token == string ? NULL : &parent),
token, match, token - string);
}
@@ -1429,7 +1429,7 @@ static void do_filtering_on_symbols(const GSymbolsPanel *panel, GtkStatusStack *
if (*as_list)
update_symbol_name_in_list_view(store, iter, &match);
else
- update_symbol_name_in_tree_view(store, symbol, &match);
+ update_symbol_name_in_tree_view(panel, store, symbol, &match);
if (!shown)
update_symbol_visibility(store, iter, true);