summaryrefslogtreecommitdiff
path: root/src/analysis/contents
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-12-01 21:07:32 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-12-01 21:07:32 (GMT)
commit106e06d33196ca124d6d27cc00a5898d6f96121d (patch)
treeb5f04abc246f3514a0cce4f06a42708dc7ece62c /src/analysis/contents
parent1c9e36639b949cc765dab316825f9fec7af85a6e (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.c26
-rw-r--r--src/analysis/contents/file.h2
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 *);