diff options
Diffstat (limited to 'src/analysis/content.c')
-rw-r--r-- | src/analysis/content.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/analysis/content.c b/src/analysis/content.c index 01c9c99..4b4645f 100644 --- a/src/analysis/content.c +++ b/src/analysis/content.c @@ -24,9 +24,13 @@ #include "content.h" +#include <assert.h> #include <string.h> +#include <i18n.h> + + #include "content-int.h" #include "contents/file.h" @@ -155,13 +159,32 @@ bool g_binary_content_save(const GBinContent *content, xmlDocPtr xdoc, xmlXPathC * * ******************************************************************************/ -const gchar *g_binary_content_get_cheksum(GBinContent *content) +const gchar *g_binary_content_get_checksum(GBinContent *content) { + const gchar *result; /* Empreinte à retourner */ + GChecksum *checksum; /* Calcul de l'empreinte */ GBinContentIface *iface; /* Interface utilisée */ - iface = G_BIN_CONTENT_GET_IFACE(content); + checksum = g_object_get_data(G_OBJECT(content), "checksum"); + + if (checksum == NULL) + { + checksum = g_checksum_new(G_CHECKSUM_SHA256); + assert(checksum != NULL); + + g_checksum_reset(checksum); + + iface = G_BIN_CONTENT_GET_IFACE(content); - return iface->get_checksum(content); + iface->compute_checksum(content, checksum); + + g_object_set_data_full(G_OBJECT(content), "checksum", checksum, (GDestroyNotify)g_checksum_free); + + } + + result = g_checksum_get_string(checksum); + + return result; } |