diff options
Diffstat (limited to 'src/format/part.c')
-rw-r--r-- | src/format/part.c | 99 |
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] * |