freebsd-ports/security/cryptopp/files/patch-misc.h
Jason E. Hale 5a19c0823b security/cryptopp: Update to 8.7.0
Drop most of the SIMD logic. The cryptopp Makefile autodetects CPU
features regardless if CPUTYPE is set and it is not possible to disable
specific instruction sets. It is only possible to completely disable
assembly optimizations, which is recommended for package building unless
all consumer machines support the build machine's CPU instruction sets.

Since version 8.1, it is no longer necessary to export
-DCRYPTOPP_DISABLE_ASM to the pkgconfig file. Consumers will now
build without it defined if the SIMD option is disabled. Remove old
workarounds pertaining to this issue.
https://github.com/weidai11/cryptopp/issues/779

Bump PORTREVISION on consumers due to ABI incompatibility.

https://www.cryptopp.com/release870.html
2022-09-15 23:56:45 -04:00

60 lines
1.7 KiB
C++

This fixes a warning triggered by testing an unsigned parameter
against 0. The patch solves this by creating a different template
for signed case. (PR: 178827)
--- misc.h.orig 2022-08-07 19:52:03 UTC
+++ misc.h
@@ -720,8 +720,10 @@ inline bool SafeConvert(T1 from, T2 &to)
/// \param value the value to convert
/// \param base the base to use during the conversion
/// \return the string representation of value in base.
+template<bool> struct IsUnsigned {};
+
template <class T>
-std::string IntToString(T value, unsigned int base = 10)
+std::string IntToStringImpl(T value, unsigned int base, IsUnsigned<true>)
{
// Hack... set the high bit for uppercase.
const unsigned int HIGH_BIT = (1U << 31);
@@ -732,12 +734,6 @@ std::string IntToString(T value, unsigned int base = 1
if (value == 0)
return "0";
- bool negate = false;
- if (value < 0)
- {
- negate = true;
- value = 0-value; // VC .NET does not like -a
- }
std::string result;
while (value > 0)
{
@@ -745,9 +741,28 @@ std::string IntToString(T value, unsigned int base = 1
result = char((digit < 10 ? '0' : (CH - 10)) + digit) + result;
value /= base;
}
+ return result;
+}
+
+template <class T>
+std::string IntToStringImpl(T value, unsigned int base, IsUnsigned<false>)
+{
+ bool negate = false;
+ if (value < 0)
+ {
+ negate = true;
+ value = 0-value; // VC .NET does not like -a
+ }
+ std::string result = IntToStringImpl(value, base, IsUnsigned<true>());
if (negate)
result = "-" + result;
return result;
+}
+
+template <class T>
+std::string IntToString(T value, unsigned int base = 10)
+{
+ return IntToStringImpl(value, base, IsUnsigned<(static_cast<T>(-1) > 0)>());
}
/// \brief Converts an unsigned value to a string