summaryrefslogtreecommitdiff
path: root/src/glibext/gbincontent.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/gbincontent.c')
-rw-r--r--src/glibext/gbincontent.c53
1 files changed, 43 insertions, 10 deletions
diff --git a/src/glibext/gbincontent.c b/src/glibext/gbincontent.c
index 4ea0b03..0230e70 100644
--- a/src/glibext/gbincontent.c
+++ b/src/glibext/gbincontent.c
@@ -363,30 +363,64 @@ static const binary_part *g_binary_content_find_part(const GBinContent *content,
* Paramètres : content = contenu binaire à venir lire. *
* addr = position de la tête de lecture. *
* length = quantité d'octets à lire. *
-* out = réceptacle disponible pour ces données. [OUT] *
* *
-* Description : Fournit une portion des données représentées. *
+* Description : Donne accès à une portion des données représentées. *
* *
-* Retour : Bilan de l'opération. *
+* Retour : Pointeur vers les données à lire ou NULL en cas d'échec. *
* *
* Remarques : - *
* *
******************************************************************************/
-bool g_binary_content_get_raw(const GBinContent *content, vmpa2t *addr, phys_t length, bin_t *out)
+const bin_t *g_binary_content_get_raw_access(const GBinContent *content, vmpa2t *addr, phys_t length)
{
- bool result;
- phys_t offset;
+ phys_t offset; /* Emplacement de départ */
/* FIXME */
offset = get_phy_addr(addr);
- memcpy(out, &content->parts[0].data[offset], length);
+ if ((offset + length) >= get_mrange_length(&content->parts[0].range))
+ return NULL;
advance_vmpa(addr, length);
- return true;
+ return &content->parts[0].data[offset];
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : content = contenu binaire à venir lire. *
+* addr = position de la tête de lecture. *
+* length = quantité d'octets à lire. *
+* out = réceptacle disponible pour ces données. [OUT] *
+* *
+* Description : Fournit une portion des données représentées. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_content_get_raw(const GBinContent *content, vmpa2t *addr, phys_t length, bin_t *out)
+{
+ bool result; /* Bilan à remonter */
+ const bin_t *data; /* Pointeur vers données utiles*/
+
+ data = g_binary_content_get_raw_access(content, addr, length);
+
+ if (data != NULL)
+ {
+ result = true;
+ memcpy(out, data, length);
+ }
+ else
+ result = false;
+
+ return result;
}
@@ -447,7 +481,6 @@ bool g_binary_content_read_u4(const GBinContent *content, vmpa2t *addr, bool *lo
* *
* Paramètres : content = contenu binaire à venir lire. *
* addr = position de la tête de lecture. *
-* endian = ordre des bits dans la source. *
* val = lieu d'enregistrement de la lecture. [OUT] *
* *
* Description : Lit un nombre non signé sur un octet. *
@@ -458,7 +491,7 @@ bool g_binary_content_read_u4(const GBinContent *content, vmpa2t *addr, bool *lo
* *
******************************************************************************/
-bool g_binary_content_read_u8(const GBinContent *content, vmpa2t *addr, SourceEndian endian, uint8_t *val)
+bool g_binary_content_read_u8(const GBinContent *content, vmpa2t *addr, uint8_t *val)
{
phys_t start; /* Tête de lecture relative */
const binary_part *part; /* Zone de mémoire effective */