From e75a1aea506869d441fc084f78102367be1f9ed2 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Mon, 13 Apr 2020 20:41:28 +0200 Subject: Simplified the loading process of binary contents. --- plugins/pychrysalide/analysis/loading.c | 43 ------------ src/analysis/loading.c | 114 ++------------------------------ src/analysis/loading.h | 8 +-- src/analysis/project.c | 12 +--- 4 files changed, 6 insertions(+), 171 deletions(-) diff --git a/plugins/pychrysalide/analysis/loading.c b/plugins/pychrysalide/analysis/loading.c index a0b9c38..dea4e31 100644 --- a/plugins/pychrysalide/analysis/loading.c +++ b/plugins/pychrysalide/analysis/loading.c @@ -44,9 +44,6 @@ /* Ajoute un nouveau contenu découvert au crédit d'un groupe. */ static PyObject *py_content_explorer_populate_group(PyObject *, PyObject *); -/* Note un contenu chargé pour future intégration guidée. */ -static PyObject *py_content_explorer_note_detected(PyObject *, PyObject *); - /* ------------------- RESOLUTION DE CONTENUS BINAIRES EN CHARGES ------------------- */ @@ -97,41 +94,6 @@ static PyObject *py_content_explorer_populate_group(PyObject *self, PyObject *ar } -/****************************************************************************** -* * -* Paramètres : self = classe représentant un binaire. * -* args = arguments fournis à l'appel. * -* * -* Description : Note un contenu chargé pour future intégration guidée. * -* * -* Retour : None. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_content_explorer_note_detected(PyObject *self, PyObject *args) -{ - PyObject *result; /* Valeur à retourner */ - unsigned long long wid; /* Identifiant de groupe */ - GLoadedContent *loaded; /* Contenu chargé au final */ - int ret; /* Bilan de lecture des args. */ - GContentExplorer *explorer; /* Explorateur à manipuler */ - - ret = PyArg_ParseTuple(args, "KO&", &wid, convert_to_loaded_content, &loaded); - if (!ret) return NULL; - - explorer = G_CONTENT_EXPLORER(pygobject_get(self)); - - g_content_explorer_note_detected(explorer, wid, loaded); - - result = Py_None; - Py_INCREF(result); - - return result; - -} - /****************************************************************************** * * @@ -153,11 +115,6 @@ PyTypeObject *get_python_content_explorer_type(void) METH_VARARGS, "populate_group($self, wid, content, /)\n--\n\nPush a new binary content into the list to explore." }, - { - "note_detected", py_content_explorer_note_detected, - METH_VARARGS, - "note_detected($self, wid, loaded, /)\n--\n\nMark a loaded content as one final candidate." - }, { NULL } }; diff --git a/src/analysis/loading.c b/src/analysis/loading.c index a376b4b..842628d 100644 --- a/src/analysis/loading.c +++ b/src/analysis/loading.c @@ -113,9 +113,6 @@ typedef struct _exploring_group GBinContent **contents; /* Contenus reconnus dispos. */ size_t count; /* Taille de cette liste */ - GLoadedContent **loaded; /* Contenus reconnus à intégrer*/ - size_t noted; /* Taille de cette liste */ - } exploring_group; /* Exploration de contenus binaires (instance) */ @@ -732,9 +729,6 @@ wgroup_id_t g_content_explorer_create_group(GContentExplorer *explorer, GBinCont group->contents = NULL; group->count = 0; - group->loaded = NULL; - group->noted = 0; - /* Alimentation du contenu initial */ work = g_exploring_work_new(content); @@ -790,12 +784,6 @@ void g_content_explorer_delete_group(GContentExplorer *explorer, wgroup_id_t wid if (group->contents != NULL) free(group->contents); - for (i = 0; i < group->noted; i++) - g_object_unref(G_OBJECT(group->loaded[i])); - - if (group->loaded != NULL) - free(group->loaded); - /* Réorganisation de la liste */ index = group - explorer->groups; @@ -866,39 +854,6 @@ void g_content_explorer_populate_group(GContentExplorer *explorer, wgroup_id_t w /****************************************************************************** * * * Paramètres : explorer = gestionnaire d'explorations à consulter. * -* wid = identifiant du groupe recherché. * -* loaded = contenu chargé et pouvant être représenté. * -* * -* Description : Note un contenu chargé pour future intégration guidée. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_content_explorer_note_detected(GContentExplorer *explorer, wgroup_id_t wid, GLoadedContent *loaded) -{ - exploring_group *group; /* Groupe d'opération concerné */ - - g_mutex_lock(&explorer->mutex); - - group = g_content_explorer_find_group(explorer, wid); - assert(group != NULL); - - group->loaded = realloc(group->loaded, ++group->noted * sizeof(GLoadedContent *)); - - group->loaded[group->noted - 1] = loaded; - g_object_ref(G_OBJECT(loaded)); - - g_mutex_unlock(&explorer->mutex); - -} - - -/****************************************************************************** -* * -* Paramètres : explorer = gestionnaire d'explorations à consulter. * * wid = identifiant du groupe à parcourir. * * count = nombre de contenus binaires retournés. [OUT] * * * @@ -949,53 +904,6 @@ GBinContent **g_content_explorer_get_all(GContentExplorer *explorer, wgroup_id_t } -/****************************************************************************** -* * -* Paramètres : explorer = gestionnaire d'explorations à consulter. * -* wid = identifiant du groupe à parcourir. * -* noted = nombre de contenus chargés retournés. [OUT] * -* * -* Description : Fournit la liste de tous les contenus préalablement détectés.* -* * -* Retour : Liste de contenus chargés enregistrés. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GLoadedContent **g_content_explorer_get_detected(GContentExplorer *explorer, wgroup_id_t wid, size_t *noted) -{ - GLoadedContent **result; /* Trouvailles à retourner */ - exploring_group *group; /* Groupe d'opération concerné */ - size_t i; /* Boucle de parcours */ - - g_mutex_lock(&explorer->mutex); - - group = g_content_explorer_find_group(explorer, wid); - assert(group != NULL); - - /* Allocation de la liste finale */ - - *noted = group->noted; - result = (GLoadedContent **)malloc(*noted * sizeof(GLoadedContent *)); - - /* On parcourt les éventuels contenus encapsulés découverts */ - - for (i = 0; i < group->noted; i++) - { - result[i] = group->loaded[i]; - - g_object_ref(G_OBJECT(result[i])); - - } - - g_mutex_unlock(&explorer->mutex); - - return result; - -} - - /* ---------------------------------------------------------------------------------- */ /* TACHE DE RESOLUTION DE CONTENU */ @@ -1401,8 +1309,6 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w * wid = identifiant du groupe de tâches réservé. * * contents = contenus à analyser. * * count = nombre de ces contenus. * -* detected = contenus préalablement détectés. * -* noted = nombre de contenus chargés. * * * * Description : Initie une nouvelle vague de résolution de contenus. * * * @@ -1412,7 +1318,7 @@ static void g_content_resolver_ack(GContentResolver *resolver, GResolvingWork *w * * ******************************************************************************/ -void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid, GBinContent **contents, size_t count, GLoadedContent **detected, size_t noted) +void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid, GBinContent **contents, size_t count) { resolving_group *group; /* Groupe ciblé par l'opération*/ GWorkQueue *queue; /* Gestionnaire de différés */ @@ -1434,21 +1340,6 @@ void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid group->loaded = NULL; group->count = 0; - /* Insertion des résultats préalables */ - - if (noted > 0) - { - group->count = noted; - group->loaded = realloc(group->loaded, group->count * sizeof(GLoadedContent *)); - - for (i = 0; i < noted; i++) - { - group->loaded[i] = detected[i]; - g_object_ref(G_OBJECT(detected[i])); - } - - } - /* Alimentation du contenu initial */ queue = get_work_queue(); @@ -1466,6 +1357,9 @@ void g_content_resolver_create_group(GContentResolver *resolver, wgroup_id_t wid g_mutex_unlock(&resolver->mutex); + if (count == 0) + g_signal_emit_by_name(resolver, "resolved", wid); + } diff --git a/src/analysis/loading.h b/src/analysis/loading.h index d3b9ed9..2310aef 100644 --- a/src/analysis/loading.h +++ b/src/analysis/loading.h @@ -67,15 +67,9 @@ void g_content_explorer_delete_group(GContentExplorer *, wgroup_id_t); /* Ajoute un nouveau contenu découvert au crédit d'un groupe. */ void g_content_explorer_populate_group(GContentExplorer *, wgroup_id_t, GBinContent *); -/* Note un contenu chargé pour future intégration guidée. */ -void g_content_explorer_note_detected(GContentExplorer *, wgroup_id_t, GLoadedContent *); - /* Fournit la liste de tous les contenus disponibles. */ GBinContent **g_content_explorer_get_all(GContentExplorer *, wgroup_id_t, size_t *); -/* Fournit la liste de tous les contenus préalablement détectés. */ -GLoadedContent **g_content_explorer_get_detected(GContentExplorer *, wgroup_id_t, size_t *); - /* ------------------- RESOLUTION DE CONTENUS BINAIRES EN CHARGES ------------------- */ @@ -103,7 +97,7 @@ GType g_content_resolver_get_type(void); GContentResolver *g_content_resolver_new(void); /* Initie une nouvelle vague de résolution de contenus. */ -void g_content_resolver_create_group(GContentResolver *, wgroup_id_t, GBinContent **, size_t, GLoadedContent **, size_t); +void g_content_resolver_create_group(GContentResolver *, wgroup_id_t, GBinContent **, size_t); /* Termine une vague de résolution de contenu. */ void g_content_resolver_delete_group(GContentResolver *, wgroup_id_t); diff --git a/src/analysis/project.c b/src/analysis/project.c index e3b38b2..71e0f43 100644 --- a/src/analysis/project.c +++ b/src/analysis/project.c @@ -1246,8 +1246,6 @@ static void on_new_content_explored(GContentExplorer *explorer, wgroup_id_t wid, { GBinContent **available; /* Contenus binaires présents */ size_t count; /* Quantité de ces contenus */ - GLoadedContent **detected; /* Contenus chargés présents */ - size_t noted; /* Quantité de ces contenus */ GContentResolver *resolver; /* Resolveur de contenus */ size_t i; /* Boucle de parcours */ @@ -1256,11 +1254,9 @@ static void on_new_content_explored(GContentExplorer *explorer, wgroup_id_t wid, available = g_content_explorer_get_all(explorer, wid, &count); assert(count > 0); - detected = g_content_explorer_get_detected(explorer, wid, ¬ed); - resolver = get_current_content_resolver(); - g_content_resolver_create_group(resolver, wid, available, count, detected, noted); + g_content_resolver_create_group(resolver, wid, available, count); g_object_unref(G_OBJECT(resolver)); @@ -1269,12 +1265,6 @@ static void on_new_content_explored(GContentExplorer *explorer, wgroup_id_t wid, free(available); - for (i = 0; i < noted; i++) - g_object_unref(G_OBJECT(detected[i])); - - if (detected != NULL) - free(detected); - } } -- cgit v0.11.2-87-g4458