From 2bcdf27b03919513cad680faac6fee64a20f00e0 Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 29 Aug 2018 23:29:59 +0300 Subject: [PATCH] Workaround GCC bug. --- .../storage/cache/storage_cache_binlog_reader.cpp | 2 +- .../storage/cache/storage_cache_database_object.cpp | 4 ++-- .../storage/cache/storage_cache_types.cpp | 2 +- .../SourceFiles/storage/cache/storage_cache_types.h | 9 ++++++++- .../SourceFiles/storage/storage_encrypted_file.cpp | 13 ++++++++++--- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Telegram/SourceFiles/storage/cache/storage_cache_binlog_reader.cpp b/Telegram/SourceFiles/storage/cache/storage_cache_binlog_reader.cpp index 413cb3b5f..b616f6ebf 100644 --- a/Telegram/SourceFiles/storage/cache/storage_cache_binlog_reader.cpp +++ b/Telegram/SourceFiles/storage/cache/storage_cache_binlog_reader.cpp @@ -38,7 +38,7 @@ base::optional BinlogWrapper::ReadHeader( return {}; } else if (binlog.read(bytes::object_as_span(&result)) != sizeof(result)) { return {}; - } else if (result.format != Format::Format_0) { + } else if (result.getFormat() != Format::Format_0) { return {}; } else if (settings.trackEstimatedTime != !!(result.flags & result.kTrackEstimatedTime)) { diff --git a/Telegram/SourceFiles/storage/cache/storage_cache_database_object.cpp b/Telegram/SourceFiles/storage/cache/storage_cache_database_object.cpp index f47ccffbb..437e50411 100644 --- a/Telegram/SourceFiles/storage/cache/storage_cache_database_object.cpp +++ b/Telegram/SourceFiles/storage/cache/storage_cache_database_object.cpp @@ -321,7 +321,7 @@ bool DatabaseObject::startDelayedPruning() { const auto seconds = int64(_minimalEntryTime - before); if (!_pruneTimer.isActive()) { _pruneTimer.callOnce(std::min( - seconds * crl::time_type(1000), + crl::time_type(seconds * 1000), _settings.maxPruneCheckTimeout)); } } @@ -963,8 +963,8 @@ QByteArray DatabaseObject::readValueData(PlaceId place, size_type size) const { } return result; } break; - default: Unexpected("Result in DatabaseObject::get."); } + Unexpected("Result in DatabaseObject::get."); } void DatabaseObject::recordEntryAccess(const Key &key) { diff --git a/Telegram/SourceFiles/storage/cache/storage_cache_types.cpp b/Telegram/SourceFiles/storage/cache/storage_cache_types.cpp index d785e4a9d..1cafeff6a 100644 --- a/Telegram/SourceFiles/storage/cache/storage_cache_types.cpp +++ b/Telegram/SourceFiles/storage/cache/storage_cache_types.cpp @@ -88,7 +88,7 @@ bool WriteVersionValue(const QString &base, Version value) { } BasicHeader::BasicHeader() -: format(Format::Format_0) +: format(static_cast(Format::Format_0)) , flags(0) { } diff --git a/Telegram/SourceFiles/storage/cache/storage_cache_types.h b/Telegram/SourceFiles/storage/cache/storage_cache_types.h index e406ad85b..8dc942878 100644 --- a/Telegram/SourceFiles/storage/cache/storage_cache_types.h +++ b/Telegram/SourceFiles/storage/cache/storage_cache_types.h @@ -118,7 +118,14 @@ struct BasicHeader { static constexpr auto kTrackEstimatedTime = 0x01U; - Format format : 8; + Format getFormat() const { + return static_cast(format); + } + void setFormat(Format format) { + this->format = static_cast(format); + } + + uint32 format : 8; uint32 flags : 24; uint32 systemTime = 0; uint32 reserved1 = 0; diff --git a/Telegram/SourceFiles/storage/storage_encrypted_file.cpp b/Telegram/SourceFiles/storage/storage_encrypted_file.cpp index 6f2d51071..d0ab58c7a 100644 --- a/Telegram/SourceFiles/storage/storage_encrypted_file.cpp +++ b/Telegram/SourceFiles/storage/storage_encrypted_file.cpp @@ -21,8 +21,15 @@ enum class Format : uint32 { struct BasicHeader { BasicHeader(); + void setFormat(Format format) { + this->format = static_cast(format); + } + Format getFormat() const { + return static_cast(format); + } + bytes::array salt = { { bytes::type() } }; - Format format : 8; + uint32 format : 8; uint32 reserved1 : 24; uint32 reserved2 = 0; uint64 applicationVersion = 0; @@ -30,7 +37,7 @@ struct BasicHeader { }; BasicHeader::BasicHeader() -: format(Format::Format_0) +: format(static_cast(Format::Format_0)) , reserved1(0) { } @@ -150,7 +157,7 @@ File::Result File::readHeader(const EncryptionKey &key) { headerBytes.subspan(0, checkSize)); if (bytes::compare(header.checksum, checksum) != 0) { return Result::WrongKey; - } else if (header.format != Format::Format_0) { + } else if (header.getFormat() != Format::Format_0) { return Result::Failed; } _dataSize = _data.size()