summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2021-10-08 06:52:02 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2021-10-08 06:52:02 (GMT)
commit0aea964ab880a972e8a4d54b36f7eee340f49d5b (patch)
tree64b09b80f5d92e96a18a73188197eff5241a2687 /src
parentda3da13a32a2f98c16a591a389e274a7803fc48a (diff)
Extract filenames when creating content attributes.
Diffstat (limited to 'src')
-rw-r--r--src/analysis/cattribs.c45
-rw-r--r--src/analysis/cattribs.h5
-rw-r--r--src/analysis/contents/memory.c2
-rw-r--r--src/main.c14
4 files changed, 25 insertions, 41 deletions
diff --git a/src/analysis/cattribs.c b/src/analysis/cattribs.c
index 704e665..1299991 100644
--- a/src/analysis/cattribs.c
+++ b/src/analysis/cattribs.c
@@ -37,8 +37,6 @@ struct _GContentAttributes
{
GObject parent; /* A laisser en premier */
- char *filename; /* Fichier de base du chemin */
-
GGenConfig **configs; /* Paramètres par niveaux */
size_t count; /* Quantité de ces niveaux */
@@ -108,8 +106,6 @@ static void g_content_attributes_class_init(GContentAttributesClass *klass)
static void g_content_attributes_init(GContentAttributes *attribs)
{
- attribs->filename = NULL;
-
attribs->configs = malloc(sizeof(GGenConfig *));
attribs->count = 1;
@@ -165,7 +161,8 @@ static void g_content_attributes_finalize(GContentAttributes *attribs)
/******************************************************************************
* *
-* Paramètres : path = chemin d'accès à un contenu à charger. *
+* Paramètres : path = chemin d'accès à un contenu à charger. *
+* filename = nom de fichier embarqué. *
* *
* Description : Construit un ensemble d'attribut pour contenu binaire. *
* *
@@ -175,7 +172,7 @@ static void g_content_attributes_finalize(GContentAttributes *attribs)
* *
******************************************************************************/
-GContentAttributes *g_content_attributes_new(const char *path)
+GContentAttributes *g_content_attributes_new(const char *path, char **filename)
{
GContentAttributes *result; /* Adresse à retourner */
GGenConfig *config; /* Niveau de config. courant */
@@ -184,17 +181,26 @@ GContentAttributes *g_content_attributes_new(const char *path)
char *part; /* Clef et sa valeur */
char *eq; /* Signe '=' rencontré */
+ if (filename != NULL)
+ *filename = NULL;
+
result = g_object_new(G_TYPE_CONTENT_ATTRIBUTES, NULL);
iter = strchr(path, '&');
if (iter == NULL)
- result->filename = strdup(path);
+ {
+ if (strlen(path) && filename != NULL)
+ *filename = strdup(path);
+ }
else
{
if (iter != path)
- result->filename = strndup(path, iter - path);
+ {
+ if (filename != NULL)
+ *filename = strndup(path, iter - path);
+ }
config = result->configs[0];
@@ -253,29 +259,6 @@ GContentAttributes *g_content_attributes_new(const char *path)
/******************************************************************************
* *
* Paramètres : attribs = ensemble d'attributs de contenu à consulter. *
-* *
-* Description : Fournit le fichier de base compris dans le chemin initial. *
-* *
-* Retour : Nom de fichier renvoyant vers un contenu à charger ou NULL. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-const char *g_content_attributes_get_filename(const GContentAttributes *attribs)
-{
- char *result; /* Nom de fichier à retourner */
-
- result = attribs->filename;
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : attribs = ensemble d'attributs de contenu à consulter. *
* count = taille de la liste de clefs renvoyées. [OUT] *
* *
* Description : Fournit l'ensemble des clefs d'un ensemble d'attributs. *
diff --git a/src/analysis/cattribs.h b/src/analysis/cattribs.h
index c2e8a2e..2745fde 100644
--- a/src/analysis/cattribs.h
+++ b/src/analysis/cattribs.h
@@ -47,10 +47,7 @@ typedef struct _GContentAttributesClass GContentAttributesClass;
GType g_content_attributes_get_type(void);
/* Construit un ensemble d'attribut pour contenu binaire. */
-GContentAttributes *g_content_attributes_new(const char *);
-
-/* Fournit le fichier de base compris dans le chemin initial. */
-const char *g_content_attributes_get_filename(const GContentAttributes *);
+GContentAttributes *g_content_attributes_new(const char *, char **);
/* Fournit l'ensemble des clefs d'un ensemble d'attributs. */
const char **g_content_attributes_get_keys(const GContentAttributes *, size_t *);
diff --git a/src/analysis/contents/memory.c b/src/analysis/contents/memory.c
index 6a020e8..50647f6 100644
--- a/src/analysis/contents/memory.c
+++ b/src/analysis/contents/memory.c
@@ -170,7 +170,7 @@ static void g_memory_content_init(GMemoryContent *content)
content->attribs = NULL;
- empty = g_content_attributes_new("");
+ empty = g_content_attributes_new("", NULL);
g_binary_content_set_attributes(G_BIN_CONTENT(content), empty);
diff --git a/src/main.c b/src/main.c
index 7d49ba6..434c861 100644
--- a/src/main.c
+++ b/src/main.c
@@ -511,7 +511,7 @@ static int open_binaries(char **files, int count)
GStudyProject *project; /* Projet courant à compléter */
int i; /* Boucle de parcours */
GContentAttributes *attribs; /* Attributs à lier au contenu */
- const char *filename; /* Chemin d'accès au contenu */
+ char *filename; /* Chemin d'accès au contenu */
GBinContent *content; /* Contenu binaire à charger */
result = EXIT_SUCCESS;
@@ -520,11 +520,15 @@ static int open_binaries(char **files, int count)
for (i = 0; i < count && result == EXIT_SUCCESS; i++)
{
- attribs = g_content_attributes_new(files[i]);
+ attribs = g_content_attributes_new(files[i], &filename);
- filename = g_content_attributes_get_filename(attribs);
-
- content = g_file_content_new(filename);
+ if (filename == NULL)
+ content = NULL;
+ else
+ {
+ content = g_file_content_new(filename);
+ free(filename);
+ }
if (content != NULL)
{