diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2016-07-28 21:55:02 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2016-07-28 21:55:02 (GMT) | 
| commit | 0c92911504f7d267c913fc8d2069cb87139b390b (patch) | |
| tree | 236cf29352580a48c33ef54778d0a18c77608664 /src/analysis/content.c | |
| parent | b509af52114501aff3ef81c49c431570f31a21d3 (diff) | |
Centralized the checksum computing of binary contents.
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;  } | 
