diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-12-01 21:07:32 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-12-01 21:07:32 (GMT) |
commit | 106e06d33196ca124d6d27cc00a5898d6f96121d (patch) | |
tree | b5f04abc246f3514a0cce4f06a42708dc7ece62c /src/analysis/contents | |
parent | 1c9e36639b949cc765dab316825f9fec7af85a6e (diff) |
Handled relative paths when loading and saving binary contents in projects.
Diffstat (limited to 'src/analysis/contents')
-rw-r--r-- | src/analysis/contents/file.c | 26 | ||||
-rw-r--r-- | src/analysis/contents/file.h | 2 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/analysis/contents/file.c b/src/analysis/contents/file.c index f24e930..8416348 100644 --- a/src/analysis/contents/file.c +++ b/src/analysis/contents/file.c @@ -35,6 +35,7 @@ #include "../content-int.h" #include "../../common/extstr.h" +#include "../../common/pathname.h" @@ -80,7 +81,7 @@ static void g_file_content_finalize(GFileContent *); static const char *g_file_content_describe(const GFileContent *, bool); /* Ecrit une sauvegarde de contenu binaire dans un fichier XML. */ -static bool g_file_content_save(const GFileContent *, xmlDocPtr, xmlXPathContextPtr, const char *); +static bool g_file_content_save(const GFileContent *, xmlDocPtr, xmlXPathContextPtr, const char *, const char *); /* Fournit une empreinte unique (SHA256) pour les données. */ static const gchar *g_file_content_get_checksum(GFileContent *); @@ -324,6 +325,7 @@ GBinContent *g_file_content_new(const char *filename) * * * Paramètres : context = contexte pour les recherches XPath. * * path = chemin d'accès au noeud XML à lire. * +* base = référence au lieu d'enregistrement du projet. * * * * Description : Charge en mémoire le contenu d'un fichier à partir d'XML. * * * @@ -333,11 +335,12 @@ GBinContent *g_file_content_new(const char *filename) * * ******************************************************************************/ -GBinContent *g_file_content_new_from_xml(xmlXPathContextPtr context, const char *path) +GBinContent *g_file_content_new_from_xml(xmlXPathContextPtr context, const char *path, const char *base) { GBinContent *result; /* Adresse à retourner */ char *access; /* Chemin pour une sous-config.*/ char *filename; /* Chemin du binaire à charger */ + char *absolute; /* Chemin absolu final */ result = NULL; @@ -352,10 +355,14 @@ GBinContent *g_file_content_new_from_xml(xmlXPathContextPtr context, const char /* Chargement */ - if (filename != NULL) + absolute = build_absolute_filename(base, filename); + + if (filename != NULL) free(filename); + + if (absolute != NULL) { - result = g_file_content_new(filename); - free(filename); + result = g_file_content_new(absolute); + free(absolute); } return result; @@ -396,6 +403,7 @@ static const char *g_file_content_describe(const GFileContent *content, bool ful * xdoc = structure XML en cours d'édition. * * context = contexte à utiliser pour les recherches. * * path = chemin d'accès réservé au binaire. * +* base = référence au lieu d'enregistrement du projet. * * * * Description : Ecrit une sauvegarde de contenu binaire dans un fichier XML. * * * @@ -405,10 +413,11 @@ static const char *g_file_content_describe(const GFileContent *content, bool ful * * ******************************************************************************/ -static bool g_file_content_save(const GFileContent *content, xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path) +static bool g_file_content_save(const GFileContent *content, xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path, const char *base) { bool result; /* Bilan à faire remonter */ char *access; /* Chemin d'accès à un élément */ + char *relative; /* Chemin d'accès relatif */ result = true; @@ -421,8 +430,11 @@ static bool g_file_content_save(const GFileContent *content, xmlDocPtr xdoc, xml access = strdup(path); access = stradd(access, "/Filename"); - result &= add_content_to_node(xdoc, context, access, content->filename); + relative = build_relative_filename(base, content->filename); + + result &= add_content_to_node(xdoc, context, access, relative); + free(relative); free(access); return result; diff --git a/src/analysis/contents/file.h b/src/analysis/contents/file.h index 0985f6b..90e292e 100644 --- a/src/analysis/contents/file.h +++ b/src/analysis/contents/file.h @@ -54,7 +54,7 @@ GType g_file_content_get_type(void); GBinContent *g_file_content_new(const char *); /* Charge en mémoire le contenu d'un fichier à partir d'XML. */ -GBinContent *g_file_content_new_from_xml(xmlXPathContextPtr, const char *); +GBinContent *g_file_content_new_from_xml(xmlXPathContextPtr, const char *, const char *); |