[Mesa-dev] [PATCH 1/7] util/mesa-sha1: add a context clone function

Grazvydas Ignotas notasas at gmail.com
Sun Mar 12 18:32:02 UTC 2017


This is useful when we need to compute many hashes which all have some
common data hashed in. It works by first hashing the common data and
keeping the context, then for each hashing operation clone the common
context and continue hashing from there.

Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
---
 src/util/mesa-sha1.c | 13 +++++++++++++
 src/util/mesa-sha1.h |  3 +++
 2 files changed, 16 insertions(+)

diff --git a/src/util/mesa-sha1.c b/src/util/mesa-sha1.c
index e8f1bad..2c47465 100644
--- a/src/util/mesa-sha1.c
+++ b/src/util/mesa-sha1.c
@@ -24,6 +24,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <string.h>
 #include "sha1/sha1.h"
 #include "mesa-sha1.h"
 
@@ -39,6 +40,18 @@ _mesa_sha1_init(void)
    return (struct mesa_sha1 *) ctx;
 }
 
+struct mesa_sha1 *
+_mesa_sha1_clone(const struct mesa_sha1 *ctx)
+{
+   SHA1_CTX *ctx_clone = malloc(sizeof(*ctx_clone));
+
+   if (!ctx_clone)
+      return NULL;
+
+   memcpy(ctx_clone, ctx, sizeof(*ctx_clone));
+   return (struct mesa_sha1 *) ctx_clone;
+}
+
 int
 _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size)
 {
diff --git a/src/util/mesa-sha1.h b/src/util/mesa-sha1.h
index 0be5485..07ca71e 100644
--- a/src/util/mesa-sha1.h
+++ b/src/util/mesa-sha1.h
@@ -34,6 +34,9 @@ struct mesa_sha1;
 struct mesa_sha1 *
 _mesa_sha1_init(void);
 
+struct mesa_sha1 *
+_mesa_sha1_clone(const struct mesa_sha1 *ctx);
+
 int
 _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size);
 
-- 
2.7.4



More information about the mesa-dev mailing list