summaryrefslogtreecommitdiff
path: root/src/analysis/content.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-07-28 21:55:02 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-07-28 21:55:02 (GMT)
commit0c92911504f7d267c913fc8d2069cb87139b390b (patch)
tree236cf29352580a48c33ef54778d0a18c77608664 /src/analysis/content.c
parentb509af52114501aff3ef81c49c431570f31a21d3 (diff)
Centralized the checksum computing of binary contents.
Diffstat (limited to 'src/analysis/content.c')
-rw-r--r--src/analysis/content.c29
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;
}