diff OrthancFramework/Sources/Toolbox.cpp @ 5813:2b429588de28

fix support for Boost 1.86
author Alain Mazy <am@orthanc.team>
date Wed, 25 Sep 2024 16:27:07 +0200
parents 16df20505710
children 122fd5f97d39
line wrap: on
line diff
--- a/OrthancFramework/Sources/Toolbox.cpp	Tue Sep 24 09:26:42 2024 +0200
+++ b/OrthancFramework/Sources/Toolbox.cpp	Wed Sep 25 16:27:07 2024 +0200
@@ -812,14 +812,32 @@
       sha1.process_bytes(data, size);
     }
 
+#if BOOST_VERSION >= 108600
+    unsigned char digest[20];
+
+    // Sanity check for the memory layout: A SHA-1 digest is 160 bits wide
+    assert(sizeof(digest) == (160 / 8));
+    assert(sizeof(boost::uuids::detail::sha1::digest_type) == 20);
+
+    // From Boost 1.86, digest_type is "unsigned char[20]" while it was "unsigned int[5]"" in previous versions.
+    // Always perform the cast even if it is useless for Boost < 1.86
+    sha1.get_digest(digest);
+
+    result.resize(8 * 5 + 4);
+    sprintf(&result[0], "%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x",
+            digest[0], digest[1], digest[2], digest[3],
+            digest[4], digest[5], digest[6], digest[7],
+            digest[8], digest[9], digest[10], digest[11],
+            digest[12], digest[13], digest[14], digest[15],
+            digest[16], digest[17], digest[18], digest[19]);
+
+#else
     unsigned int digest[5];
     // Sanity check for the memory layout: A SHA-1 digest is 160 bits wide
     assert(sizeof(unsigned int) == 4 && sizeof(digest) == (160 / 8));
     assert(sizeof(boost::uuids::detail::sha1::digest_type) == 20);
-    
-    // From Boost 1.86, digest_type is "unsigned char[20]" while it was "unsigned int[5]"" in previous versions.
-    // Always perform the cast even if it is useless for Boost < 1.86
-    sha1.get_digest(*(reinterpret_cast<boost::uuids::detail::sha1::digest_type*>(digest)));
+
+    sha1.get_digest(digest));
 
     result.resize(8 * 5 + 4);
     sprintf(&result[0], "%08x-%08x-%08x-%08x-%08x",
@@ -828,6 +846,9 @@
             digest[2],
             digest[3],
             digest[4]);
+
+#endif
+
   }
 
   void Toolbox::ComputeSHA1(std::string& result,