summaryrefslogtreecommitdiff
blob: 5d2a9ba404e3070b0d4fc5b1d8c25957287afb9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
https://github.com/tdf/libcmis/issues/67
https://github.com/tdf/libcmis/pull/68

From dfcb642a491f7ec2ae52e3e83d31bb6cdf3670c2 Mon Sep 17 00:00:00 2001
From: David Seifert <soap@gentoo.org>
Date: Sat, 31 Aug 2024 12:39:39 +0200
Subject: [PATCH] Fix boost 1.86 breakage

The fix does not break building against <1.86 since we're now accessing the
object representation of the return value.

Fixes #67
---
 src/libcmis/xml-utils.cxx | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/libcmis/xml-utils.cxx b/src/libcmis/xml-utils.cxx
index e487d17..cdf088f 100644
--- a/src/libcmis/xml-utils.cxx
+++ b/src/libcmis/xml-utils.cxx
@@ -531,16 +531,22 @@ namespace libcmis
         boost::uuids::detail::sha1 sha1;
         sha1.process_bytes( str.c_str(), str.size() );
 
-        unsigned int digest[5];
+        // on boost <  1.86.0, digest_type is typedef'd as unsigned int[5]
+        // on boost >= 1.86.0, digest_type is typedef'd as unsigned char[20]
+        boost::uuids::detail::sha1::digest_type digest;
         sha1.get_digest( digest );
 
+        // by using a pointer to unsigned char, we can read the
+        // object representation of either typedef.
+        const unsigned char* ptr = reinterpret_cast<const unsigned char*>( digest );
+
         stringstream out;
-        // Setup writing mode. Every number must produce eight
+        // Setup writing mode. Every number must produce two
         // hexadecimal digits, including possible leading 0s, or we get
         // less than 40 digits as result.
         out << hex << setfill('0') << right;
-        for ( int i = 0; i < 5; ++i )
-            out << setw(8) << digest[i];
+        for ( int i = 0; i < sizeof( digest ); ++ptr, ++i )
+            out << setw(2) << static_cast<int>( *ptr );
         return out.str();
     }