summaryrefslogtreecommitdiff
path: root/plugins/yaml/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/yaml/node.c')
-rw-r--r--plugins/yaml/node.c130
1 files changed, 21 insertions, 109 deletions
diff --git a/plugins/yaml/node.c b/plugins/yaml/node.c
index 7b3413d..ff6fa7e 100644
--- a/plugins/yaml/node.c
+++ b/plugins/yaml/node.c
@@ -1,8 +1,8 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
- * node.c - définition de noeud Yaml
+ * node.c - définition de noeud YAML
*
- * Copyright (C) 2019-2020 Cyrille Bagard
+ * Copyright (C) 2019-2023 Cyrille Bagard
*
* This file is part of Chrysalide.
*
@@ -24,17 +24,14 @@
#include "node.h"
-#include <string.h>
-
-
#include "node-int.h"
-/* Initialise la classe des noeuds d'arborescence Yaml. */
+/* Initialise la classe des noeuds d'arborescence YAML. */
static void g_yaml_node_class_init(GYamlNodeClass *);
-/* Initialise une instance de noeud d'arborescence Yaml. */
+/* Initialise une instance de noeud d'arborescence YAML. */
static void g_yaml_node_init(GYamlNode *);
/* Supprime toutes les références externes. */
@@ -45,7 +42,7 @@ static void g_yaml_node_finalize(GYamlNode *);
-/* Indique le type défini pour un noeud d'arborescence Yaml. */
+/* Indique le type défini pour un noeud d'arborescence YAML. */
G_DEFINE_TYPE(GYamlNode, g_yaml_node, G_TYPE_OBJECT);
@@ -53,7 +50,7 @@ G_DEFINE_TYPE(GYamlNode, g_yaml_node, G_TYPE_OBJECT);
* *
* Paramètres : klass = classe à initialiser. *
* *
-* Description : Initialise la classe des noeuds d'arborescence Yaml. *
+* Description : Initialise la classe des noeuds d'arborescence YAML. *
* *
* Retour : - *
* *
@@ -77,7 +74,7 @@ static void g_yaml_node_class_init(GYamlNodeClass *klass)
* *
* Paramètres : node = instance à initialiser. *
* *
-* Description : Initialise une instance de noeud d'arborescence Yaml. *
+* Description : Initialise une instance de noeud d'arborescence YAML. *
* *
* Retour : - *
* *
@@ -87,7 +84,6 @@ static void g_yaml_node_class_init(GYamlNodeClass *klass)
static void g_yaml_node_init(GYamlNode *node)
{
- node->line = NULL;
}
@@ -106,8 +102,6 @@ static void g_yaml_node_init(GYamlNode *node)
static void g_yaml_node_dispose(GYamlNode *node)
{
- g_clear_object(&node->line);
-
G_OBJECT_CLASS(g_yaml_node_parent_class)->dispose(G_OBJECT(node));
}
@@ -134,119 +128,37 @@ static void g_yaml_node_finalize(GYamlNode *node)
/******************************************************************************
* *
-* Paramètres : node = noeud d'arborescence Yaml à consulter. *
+* Paramètres : node = noeud d'arborescence YAML à consulter. *
+* path = chemin d'accès à parcourir. *
* *
-* Description : Fournit la ligne d'origine associée à un noeud. *
+* Description : Recherche le premier noeud correspondant à un chemin. *
* *
-* Retour : Ligne Yaml à l'origine du noeud. *
+* Retour : Noeud avec la correspondance établie ou NULL si non trouvé. *
* *
* Remarques : - *
* *
******************************************************************************/
-GYamlLine *g_yaml_node_get_yaml_line(const GYamlNode *node)
-{
- GYamlLine *result; /* Ligne d'origine à renvoyer */
-
- result = node->line;
-
- if (result != NULL)
- g_object_ref(G_OBJECT(result));
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : node = noeud d'arborescence Yaml à consulter. *
-* path = chemin d'accès à parcourir. *
-* prepare = indication sur une préparation d'un prochain appel.*
-* nodes = liste de noeuds avec correspondance établie. [OUT] *
-* count = quantité de ces noeuds. [OUT] *
-* *
-* Description : Recherche les noeuds correspondant à un chemin. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void _g_yaml_node_find_by_path(const GYamlNode *node, const char *path, bool prepare, GYamlNode ***nodes, size_t *count)
+GYamlNode *g_yaml_node_find_first_by_path(GYamlNode *node, const char *path)
{
+ GYamlNode *result; /* Trouvaille à retourner */
GYamlNodeClass *class; /* Classe de l'instance */
- class = G_YAML_NODE_GET_CLASS(node);
-
- class->find(node, path, prepare, nodes, count);
-
-}
+ while (path[0] == '/')
+ path++;
-
-/******************************************************************************
-* *
-* Paramètres : node = noeud d'arborescence Yaml à consulter. *
-* path = chemin d'accès à parcourir. *
-* prepare = indication sur une préparation d'un prochain appel.*
-* nodes = liste de noeuds avec correspondance établie. [OUT] *
-* count = quantité de ces noeuds. [OUT] *
-* *
-* Description : Recherche les noeuds correspondant à un chemin. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_yaml_node_find_by_path(const GYamlNode *node, const char *path, bool prepare, GYamlNode ***nodes, size_t *count)
-{
- *nodes = NULL;
- *count = 0;
-
- _g_yaml_node_find_by_path(node, path, prepare, nodes, count);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : node = noeud d'arborescence Yaml à consulter. *
-* path = chemin d'accès à parcourir. *
-* prepare = indication sur une préparation d'un prochain appel.*
-* *
-* Description : Recherche l'unique noeud correspondant à un chemin. *
-* *
-* Retour : Noeud avec correspondance établie ou NULL. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GYamlNode *g_yaml_node_find_one_by_path(const GYamlNode *node, const char *path, bool prepare)
-{
- GYamlNode *result; /* Trouvaille unique à renvoyer*/
- GYamlNode **nodes; /* Liste de noeuds trouvés */
- size_t count; /* Taille de cette liste */
- size_t i; /* Boucle de parcours */
-
- g_yaml_node_find_by_path(node, path, prepare, &nodes, &count);
-
- if (count == 1)
+ if (path[0] == '\0')
{
- result = nodes[0];
+ result = node;
g_object_ref(G_OBJECT(result));
}
else
- result = NULL;
+ {
+ class = G_YAML_NODE_GET_CLASS(node);
- for (i = 0; i < count; i++)
- g_object_unref(G_OBJECT(nodes[i]));
+ result = class->find(node, path);
- if (nodes != NULL)
- free(nodes);
+ }
return result;