diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/analysis/content-int.h | 4 | ||||
-rw-r--r-- | src/analysis/content.c | 24 | ||||
-rw-r--r-- | src/analysis/content.h | 3 | ||||
-rw-r--r-- | src/analysis/contents/file.c | 24 | ||||
-rw-r--r-- | src/analysis/contents/restricted.c | 52 |
5 files changed, 107 insertions, 0 deletions
diff --git a/src/analysis/content-int.h b/src/analysis/content-int.h index 4635047..7da78db 100644 --- a/src/analysis/content-int.h +++ b/src/analysis/content-int.h @@ -41,6 +41,9 @@ typedef void (* compute_checksum_fc) (GBinContent *, GChecksum *); /* Détermine le nombre d'octets lisibles. */ typedef phys_t (* compute_size_fc) (const GBinContent *); +/* Détermine la position finale d'un contenu. */ +typedef void (* compute_end_pos_fc) (const GBinContent *, vmpa2t *); + /* Avance la tête de lecture d'une certaine quantité de données. */ typedef bool (* seek_fc) (const GBinContent *, vmpa2t *, phys_t); @@ -84,6 +87,7 @@ struct _GBinContentIface compute_checksum_fc compute_checksum; /* Calcul de l'empreinte */ compute_size_fc compute_size; /* Calcul de la taille totale */ + compute_end_pos_fc compute_end_pos; /* Calcul de position finale */ seek_fc seek; /* Avancée de tête de lecture */ diff --git a/src/analysis/content.c b/src/analysis/content.c index 0a57972..562ec2a 100644 --- a/src/analysis/content.c +++ b/src/analysis/content.c @@ -215,6 +215,30 @@ phys_t g_binary_content_compute_size(const GBinContent *content) /****************************************************************************** * * * Paramètres : content = contenu binaire à venir lire. * +* pos = position finale (exclusive). [OUT] * +* * +* Description : Détermine la position finale d'un contenu. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_binary_content_compute_end_pos(const GBinContent *content, vmpa2t *pos) +{ + GBinContentIface *iface; /* Interface utilisée */ + + iface = G_BIN_CONTENT_GET_IFACE(content); + + return iface->compute_end_pos(content, pos); + +} + + +/****************************************************************************** +* * +* Paramètres : content = contenu binaire à venir lire. * * addr = position de la tête de lecture. * * length = quantité d'octets à provisionner. * * * diff --git a/src/analysis/content.h b/src/analysis/content.h index 4bb1dc1..a4fff20 100644 --- a/src/analysis/content.h +++ b/src/analysis/content.h @@ -69,6 +69,9 @@ const gchar *g_binary_content_get_checksum(GBinContent *); /* Détermine le nombre d'octets lisibles. */ phys_t g_binary_content_compute_size(const GBinContent *); +/* Détermine la position finale d'un contenu. */ +void g_binary_content_compute_end_pos(const GBinContent *, vmpa2t *); + /* Avance la tête de lecture d'une certaine quantité de données. */ bool g_binary_content_seek(const GBinContent *, vmpa2t *, phys_t); diff --git a/src/analysis/contents/file.c b/src/analysis/contents/file.c index 8b371ab..2461017 100644 --- a/src/analysis/contents/file.c +++ b/src/analysis/contents/file.c @@ -85,6 +85,9 @@ static void g_file_content_compute_checksum(GFileContent *, GChecksum *); /* Détermine le nombre d'octets lisibles. */ static phys_t g_file_content_compute_size(const GFileContent *); +/* Détermine la position finale d'un contenu. */ +static void g_file_content_compute_end_pos(const GFileContent *, vmpa2t *); + /* Avance la tête de lecture d'une certaine quantité de données. */ static bool g_file_content_seek(const GFileContent *, vmpa2t *, phys_t); @@ -185,6 +188,7 @@ static void g_file_content_interface_init(GBinContentInterface *iface) iface->compute_checksum = (compute_checksum_fc)g_file_content_compute_checksum; iface->compute_size = (compute_size_fc)g_file_content_compute_size; + iface->compute_end_pos = (compute_end_pos_fc)g_file_content_compute_end_pos; iface->seek = (seek_fc)g_file_content_seek; @@ -493,6 +497,26 @@ static phys_t g_file_content_compute_size(const GFileContent *content) /****************************************************************************** * * * Paramètres : content = contenu binaire à venir lire. * +* pos = position finale (exclusive). [OUT] * +* * +* Description : Détermine la position finale d'un contenu. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_file_content_compute_end_pos(const GFileContent *content, vmpa2t *pos) +{ + compute_mrange_end_addr(&content->range, pos); + +} + + +/****************************************************************************** +* * +* Paramètres : content = contenu binaire à venir lire. * * addr = position de la tête de lecture. * * length = quantité d'octets à provisionner. * * * diff --git a/src/analysis/contents/restricted.c b/src/analysis/contents/restricted.c index 132d60b..28949ba 100644 --- a/src/analysis/contents/restricted.c +++ b/src/analysis/contents/restricted.c @@ -69,6 +69,12 @@ static void g_restricted_content_finalize(GRestrictedContent *); /* Calcule une empreinte unique (SHA256) pour les données. */ static void g_restricted_content_compute_checksum(GRestrictedContent *, GChecksum *); +/* Détermine le nombre d'octets lisibles. */ +static phys_t g_restricted_content_compute_size(const GRestrictedContent *); + +/* Détermine la position finale d'un contenu. */ +static void g_restricted_content_compute_end_pos(const GRestrictedContent *, vmpa2t *); + /* Avance la tête de lecture d'une certaine quantité de données. */ static bool g_restricted_content_seek(const GRestrictedContent *, vmpa2t *, phys_t); @@ -164,6 +170,9 @@ static void g_restricted_content_interface_init(GBinContentInterface *iface) { iface->compute_checksum = (compute_checksum_fc)g_restricted_content_compute_checksum; + iface->compute_size = (compute_size_fc)g_restricted_content_compute_size; + iface->compute_end_pos = (compute_end_pos_fc)g_restricted_content_compute_end_pos; + iface->seek = (seek_fc)g_restricted_content_seek; iface->get_raw_access = (get_raw_access_fc)g_restricted_content_get_raw_access; @@ -319,6 +328,49 @@ static void g_restricted_content_compute_checksum(GRestrictedContent *content, G /****************************************************************************** * * * Paramètres : content = contenu binaire à venir lire. * +* * +* Description : Détermine le nombre d'octets lisibles. * +* * +* Retour : Quantité représentée. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static phys_t g_restricted_content_compute_size(const GRestrictedContent *content) +{ + phys_t result; /* Quantité trouvée à retourner*/ + + result = get_mrange_length(&content->range); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : content = contenu binaire à venir lire. * +* pos = position finale (exclusive). [OUT] * +* * +* Description : Détermine la position finale d'un contenu. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_restricted_content_compute_end_pos(const GRestrictedContent *content, vmpa2t *pos) +{ + compute_mrange_end_addr(&content->range, pos); + +} + + +/****************************************************************************** +* * +* Paramètres : content = contenu binaire à venir lire. * * addr = position de la tête de lecture. * * length = quantité d'octets à provisionner. * * * |