diff options
Diffstat (limited to 'src/glibext/gbincontent.c')
-rw-r--r-- | src/glibext/gbincontent.c | 52 |
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] * |