summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis')
-rw-r--r--src/analysis/content-int.h4
-rw-r--r--src/analysis/content.c24
-rw-r--r--src/analysis/content.h3
-rw-r--r--src/analysis/contents/file.c24
-rw-r--r--src/analysis/contents/restricted.c52
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. *
* *