Path: blob/main/finance/ledger/files/patch-src_utils.h
18157 views
--- src/utils.h.orig 2023-03-30 07:40:48 UTC1+++ src/utils.h2@@ -607,29 +607,39 @@ inline int peek_next_nonws(std::istream& in) {3*_p = '\0'; \4}56-inline string to_hex(unsigned int * message_digest, const int len = 1)7-{8+inline string digest_to_hex(9+ const boost::uuids::detail::sha1::digest_type& message_digest,10+ size_t len = sizeof(boost::uuids::detail::sha1::digest_type) * 211+) {12std::ostringstream buf;13+ buf.setf(std::ios_base::hex, std::ios_base::basefield);14+ buf.fill('0');1516- for(int i = 0; i < 5 ; i++) {17- buf.width(8);18- buf.fill('0');19- buf << std::hex << message_digest[i];20- if (i + 1 >= len)21- break; // only output the first LEN dwords22+ // sha1::digest_type is an array type and may change between Boost versions23+ const size_t count = std::min(24+ sizeof(message_digest) / sizeof(message_digest[0]),25+ (len - 1) / (sizeof(message_digest[0]) * 2) + 126+ );27+ for(size_t i = 0; i < count; i++) {28+ buf.width(sizeof(message_digest[i]) * 2);29+ buf << (unsigned int)message_digest[i];30}31- return buf.str();32+ string hex = buf.str();33+ hex.resize(len, '0'); // in case a partial element is requested34+ return hex;35}3637-inline string sha1sum(const string& str)38-{39- boost::uuids::detail::sha1 sha;40+inline string sha1sum(41+ const string& str,42+ size_t len = sizeof(boost::uuids::detail::sha1::digest_type) * 243+) {44+ static boost::uuids::detail::sha1 sha;45+ boost::uuids::detail::sha1::digest_type message_digest;4647+ sha.reset();48sha.process_bytes(str.c_str(), str.length());49-50- unsigned int message_digest[5];51sha.get_digest(message_digest);52- return to_hex(message_digest, 5);53+ return digest_to_hex(message_digest, len);54}5556extern const string version;575859