summaryrefslogtreecommitdiff
path: root/cache.h
diff options
context:
space:
mode:
authorAtousa Pahlevan Duprat <apahlevan@ieee.org>2015-11-05 06:38:41 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-11-05 18:35:11 (GMT)
commit3bc72fde3f35b988c902abf5a0bc027f2e54d0c1 (patch)
treeff7563e79cf5372260fefb46790abd2f2fdb0ba5 /cache.h
parent441c4a40173fe1ee8a5c0094e587dfc47e2a6460 (diff)
downloadgit-3bc72fde3f35b988c902abf5a0bc027f2e54d0c1.zip
git-3bc72fde3f35b988c902abf5a0bc027f2e54d0c1.tar.gz
git-3bc72fde3f35b988c902abf5a0bc027f2e54d0c1.tar.bz2
sha1: provide another level of indirection for the SHA-1 functions
The git source uses git_SHA1_Update() and friends to call into the code that computes the hashes. Traditionally, we used to map these directly to underlying implementation of the SHA-1 hash (e.g. SHA1_Update() from OpenSSL or blk_SHA1_Update() from block-sha1/). This arrangement however makes it hard to tweak behaviour of the underlying implementation without fully replacing. If we want to introduce a tweaked_SHA1_Update() wrapper to implement the "Update" in a slightly different way, for example, the implementation of the wrapper still would want to call into the underlying implementation, but tweaked_SHA1_Update() cannot call git_SHA1_Update() to get to the underlying implementation (often but not always SHA1_Update()). Add another level of indirection that maps platform_SHA1_Update() and friends to their underlying implementations, and by default make git_SHA1_Update() and friends map to platform_SHA1_* functions. Doing it this way will later allow us to map git_SHA1_Update() to tweaked_SHA1_Update(), and the latter can use platform_SHA1_Update() in its implementation. Signed-off-by: Atousa Pahlevan Duprat <apahlevan@ieee.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'cache.h')
-rw-r--r--cache.h22
1 files changed, 17 insertions, 5 deletions
diff --git a/cache.h b/cache.h
index 22b7b81..0d89ad8 100644
--- a/cache.h
+++ b/cache.h
@@ -11,13 +11,25 @@
#include "string-list.h"
#include SHA1_HEADER
-#ifndef git_SHA_CTX
-#define git_SHA_CTX SHA_CTX
-#define git_SHA1_Init SHA1_Init
-#define git_SHA1_Update SHA1_Update
-#define git_SHA1_Final SHA1_Final
+#ifndef platform_SHA_CTX
+/*
+ * platform's underlying implementation of SHA-1; could be OpenSSL,
+ * blk_SHA, Apple CommonCrypto, etc... Note that including
+ * SHA1_HEADER may have already defined platform_SHA_CTX for our
+ * own implementations like block-sha1 and ppc-sha1, so we list
+ * the default for OpenSSL compatible SHA-1 implementations here.
+ */
+#define platform_SHA_CTX SHA_CTX
+#define platform_SHA1_Init SHA1_Init
+#define platform_SHA1_Update SHA1_Update
+#define platform_SHA1_Final SHA1_Final
#endif
+#define git_SHA_CTX platform_SHA_CTX
+#define git_SHA1_Init platform_SHA1_Init
+#define git_SHA1_Update platform_SHA1_Update
+#define git_SHA1_Final platform_SHA1_Final
+
#include <zlib.h>
typedef struct git_zstream {
z_stream z;