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.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/glibext/gbincontent.c b/src/glibext/gbincontent.c
index e0c64d4..a9fe907 100644
--- a/src/glibext/gbincontent.c
+++ b/src/glibext/gbincontent.c
@@ -55,6 +55,9 @@ struct _GBinContent
binary_part *parts; /* Parties prises en compte */
size_t count; /* Nombre de ces parties */
+ GChecksum *checksum; /* Calcul de l'empreinte */
+ bool cs_computed; /* Calcul effectué ? */
+
};
/* Content de données binaires quelconques (classe) */
@@ -125,6 +128,10 @@ static void g_binary_content_class_init(GBinContentClass *klass)
static void g_binary_content_init(GBinContent *content)
{
+ content->checksum = g_checksum_new(G_CHECKSUM_SHA256);
+ assert(content->checksum != NULL);
+
+ content->cs_computed = false;
}
@@ -143,6 +150,8 @@ static void g_binary_content_init(GBinContent *content)
static void g_binary_content_dispose(GBinContent *content)
{
+ g_checksum_free(content->checksum);
+
G_OBJECT_CLASS(g_binary_content_parent_class)->dispose(G_OBJECT(content));
}
@@ -248,6 +257,49 @@ GBinContent *g_binary_content_new_from_file(const char *filename)
/******************************************************************************
* *
+* Paramètres : binary = contenu binaire à consulter. *
+* *
+* Description : Fournit une empreinte unique (SHA256) pour les données. *
+* *
+* Retour : Chaîne représentant l'empreinte du contenu binaire. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+const gchar *g_binary_content_get_cheksum(GBinContent *content)
+{
+ size_t i; /* Boucle de parcours */
+ binary_part *part; /* Bloc parcouru pour analyse */
+
+ if (!content->cs_computed)
+ {
+ g_checksum_reset(content->checksum);
+
+ for (i = 0; i < content->count; i++)
+ {
+ part = &content->parts[i];
+ g_checksum_update(content->checksum, part->data, get_mrange_length(&part->range));
+ }
+
+ content->cs_computed = true;
+
+ }
+
+ return g_checksum_get_string(content->checksum);
+
+}
+
+
+
+
+
+
+
+
+
+/******************************************************************************
+* *
* Paramètres : content = contenu binaire à venir lire. *
* addr = position de la tête de lecture globale demandée. *
* start = position de la tête de lecture dans la zone. [OUT] *