diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-07-24 18:43:55 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-07-24 18:43:55 (GMT) |
commit | 156d2e2f6beda2302552ac79678494d914fda05b (patch) | |
tree | 021825960b7ac3315a336fc085a4f1d07c05df39 /src/glibext/gbincontent.c | |
parent | 21537636cd8318cf5a720211619ad3c3023b52e9 (diff) |
Replaced all remaining raw accesses to binary contents with the GBinContent wrapper in binary formats.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@555 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/glibext/gbincontent.c')
-rw-r--r-- | src/glibext/gbincontent.c | 53 |
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 */ |