summaryrefslogtreecommitdiff
path: root/src/analysis/scan/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/core.c')
-rw-r--r--src/analysis/scan/core.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/analysis/scan/core.c b/src/analysis/scan/core.c
index da3cf00..6316a53 100644
--- a/src/analysis/scan/core.c
+++ b/src/analysis/scan/core.c
@@ -46,13 +46,14 @@
#include "patterns/modifiers/hex.h"
#include "patterns/modifiers/plain.h"
#include "patterns/modifiers/rev.h"
+#include "patterns/modifiers/xor.h"
/* Liste des modificateurs disponibles */
typedef struct _available_modifier_t
{
- char *name; /* Désignation humaine */
+ sized_string_t name; /* Désignation humaine */
GScanTokenModifier *instance; /* Mécanisme correspondant */
} available_modifier_t;
@@ -76,18 +77,19 @@ static size_t __modifiers_count = 0;
bool register_scan_token_modifier(GScanTokenModifier *modifier)
{
bool result; /* Bilan à retourner */
- char *name; /* Nom donné au modificateur */
+ sized_string_t name; /* Nom donné au modificateur */
GScanTokenModifier *found; /* Alternative présente */
available_modifier_t *last; /* Emplacement disponible */
- name = g_scan_token_modifier_get_name(modifier);
+ name.data = g_scan_token_modifier_get_name(modifier);
+ name.len = strlen(name.data);
- found = find_scan_token_modifiers_for_name(name);
+ found = find_scan_token_modifiers_for_name(&name);
result = (found == NULL);
if (!result)
- free(name);
+ exit_szstr(&name);
else
{
@@ -137,6 +139,7 @@ bool load_all_known_scan_token_modifiers(void)
if (result) result = REGISTER_SCAN_MODIFIER(g_scan_hex_modifier_new());
if (result) result = REGISTER_SCAN_MODIFIER(g_scan_plain_modifier_new());
if (result) result = REGISTER_SCAN_MODIFIER(g_scan_reverse_modifier_new());
+ if (result) result = REGISTER_SCAN_MODIFIER(g_scan_xor_modifier_new());
return result;
@@ -160,7 +163,10 @@ void unload_all_scan_token_modifiers(void)
size_t i; /* Boucle de parcours */
for (i = 0; i < __modifiers_count; i++)
+ {
+ exit_szstr(&__modifiers[i].name);
g_object_unref(G_OBJECT(__modifiers[i].instance));
+ }
if (__modifiers != NULL)
free(__modifiers);
@@ -180,7 +186,7 @@ void unload_all_scan_token_modifiers(void)
* *
******************************************************************************/
-GScanTokenModifier *find_scan_token_modifiers_for_name(const char *name)
+GScanTokenModifier *find_scan_token_modifiers_for_name(const sized_string_t *name)
{
GScanTokenModifier *result; /* Instance à renvoyer */
size_t i; /* Boucle de parcours */
@@ -192,7 +198,10 @@ GScanTokenModifier *find_scan_token_modifiers_for_name(const char *name)
{
registered = __modifiers + i;
- if (strcmp(registered->name, name) == 0)
+ if (registered->name.len != name->len)
+ continue;
+
+ if (strncmp(registered->name.data, name->data, name->len) == 0)
{
result = registered->instance;
g_object_ref(G_OBJECT(result));