diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2021-10-08 06:52:02 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2021-10-08 06:52:02 (GMT) |
commit | 0aea964ab880a972e8a4d54b36f7eee340f49d5b (patch) | |
tree | 64b09b80f5d92e96a18a73188197eff5241a2687 /src | |
parent | da3da13a32a2f98c16a591a389e274a7803fc48a (diff) |
Extract filenames when creating content attributes.
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/cattribs.c | 45 | ||||
-rw-r--r-- | src/analysis/cattribs.h | 5 | ||||
-rw-r--r-- | src/analysis/contents/memory.c | 2 | ||||
-rw-r--r-- | src/main.c | 14 |
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); @@ -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) { |