summaryrefslogtreecommitdiff
path: root/src/format/part.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/part.c')
-rw-r--r--src/format/part.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/format/part.c b/src/format/part.c
index d21cd87..63747d9 100644
--- a/src/format/part.c
+++ b/src/format/part.c
@@ -25,6 +25,7 @@
#include <malloc.h>
+#include <stdlib.h>
#include <string.h>
@@ -123,6 +124,84 @@ GBinPart *g_binary_part_new(void)
/******************************************************************************
* *
+* Paramètres : node = noeud XML contenant les données à charger. *
+* *
+* Description : Crée une description de partie de code vierge à partir d'XML.*
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GBinPart *g_binary_part_load_from_xml(xmlNodePtr node)
+{
+ GBinPart *result; /* Structure à retourner */
+ char *value; /* Propriété lue depuis le XML */
+
+ result = g_binary_part_new();
+
+ result->name = qck_get_node_prop_value(node, "name");
+ if (result->name == NULL) goto gbplfx_error;
+
+ value = qck_get_node_prop_value(node, "offset");
+ if (value == NULL) goto gbplfx_error;
+
+ result->offset = atoi(value);
+ free(value);
+
+ value = qck_get_node_prop_value(node, "size");
+ if (value == NULL) goto gbplfx_error;
+
+ result->size = atoi(value);
+ free(value);
+
+ return result;
+
+ gbplfx_error:
+
+ g_object_unref(G_OBJECT(result));
+
+ return NULL;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : part = description de partie à sauvegarder. *
+* xdoc = structure XML chargée. *
+* parent = noeud XML où rattacher le futur nouveau noeud. *
+* *
+* Description : Enregistre les informations d'une partie de code dans du XML.*
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_part_save_to_xml(const GBinPart *part, xmlDocPtr xdoc, xmlNodePtr parent)
+{
+ bool result; /* Bilan à retourner */
+ xmlNodePtr node; /* Nouveau noeud créé */
+
+ result = true;
+
+ node = add_node_to_node(xdoc, parent, "Part");
+ if (node == NULL) return false;
+
+ result = add_string_attribute_to_node(node, "name", part->name);
+ result &= add_long_attribute_to_node(node, "offset", part->offset);
+ result &= add_long_attribute_to_node(node, "size", part->size);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : part = description de partie à mettre à jour. *
* name = nom à donner à la partie. *
* *
@@ -188,6 +267,26 @@ void g_binary_part_set_values(GBinPart *part, off_t offset, off_t size, vmpa_t a
/******************************************************************************
* *
+* Paramètres : part = description de partie à mettre à jour. *
+* addr = adresse de la section à conserver. *
+* *
+* Description : Définit l'adresse virtuelle d'une partie de code. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_binary_part_set_address(GBinPart *part, vmpa_t addr)
+{
+ part->addr = addr;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : part = description de partie à consulter. *
* offset = position de la section à donner ou NULL. [OUT] *
* size = taille de la section à donner ou NULL. [OUT] *