diff options
Diffstat (limited to 'protocols/Telegram/tdlib/td/tdutils')
282 files changed, 1473 insertions, 1509 deletions
diff --git a/protocols/Telegram/tdlib/td/tdutils/CMakeLists.txt b/protocols/Telegram/tdlib/td/tdutils/CMakeLists.txt index 7c568fdeba..e7b4b788a7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/CMakeLists.txt +++ b/protocols/Telegram/tdlib/td/tdutils/CMakeLists.txt @@ -2,7 +2,7 @@ if ((CMAKE_MAJOR_VERSION LESS 3) OR (CMAKE_VERSION VERSION_LESS "3.0.2")) message(FATAL_ERROR "CMake >= 3.0.2 is required") endif() -option(TDUTILS_MIME_TYPE "Generate mime types conversion; requires gperf" ON) +option(TDUTILS_MIME_TYPE "Generate MIME types conversion; requires gperf" ON) if (NOT DEFINED CMAKE_INSTALL_LIBDIR) set(CMAKE_INSTALL_LIBDIR "lib") @@ -292,6 +292,7 @@ set(TDUTILS_SOURCE td/utils/uint128.h td/utils/unicode.h td/utils/unique_ptr.h + td/utils/unique_value_ptr.h td/utils/utf8.h td/utils/Variant.h td/utils/VectorQueue.h diff --git a/protocols/Telegram/tdlib/td/tdutils/generate/auto/extension_to_mime_type.cpp b/protocols/Telegram/tdlib/td/tdutils/generate/auto/extension_to_mime_type.cpp index 5b924aa371..809b73df27 100644 --- a/protocols/Telegram/tdlib/td/tdutils/generate/auto/extension_to_mime_type.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/generate/auto/extension_to_mime_type.cpp @@ -1,5 +1,5 @@ -/* ANSI-C code produced by gperf version 3.1 */ -/* Command-line: 'W:\\Test\\td\\vcpkg\\installed\\x64-windows\\tools\\gperf.exe' -m100 --output-file=auto/extension_to_mime_type.cpp auto/extension_to_mime_type.gperf */ +/* ANSI-C code produced by gperf version 3.0.1 */ +/* Command-line: 'C:\\Util\\gperf.exe' -m100 --output-file=auto/extension_to_mime_type.cpp auto/extension_to_mime_type.gperf */ /* Computed positions: -k'1-4,6,$' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -26,7 +26,7 @@ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) /* The character set is not based on ISO-646. */ -#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>." +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." #endif #line 12 "auto/extension_to_mime_type.gperf" @@ -86,7 +86,7 @@ inline #endif #endif static unsigned int -extension_hash (register const char *str, register size_t len) +extension_hash (register const char *str, register unsigned int len) { static const unsigned short asso_values[] = { @@ -122,7 +122,7 @@ extension_hash (register const char *str, register size_t len) 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376, 3376 }; - register unsigned int hval = len; + register int hval = len; switch (hval) { @@ -146,8 +146,11 @@ extension_hash (register const char *str, register size_t len) return hval + asso_values[(unsigned char)str[len - 1]]; } +#ifdef __GNUC__ +__inline +#endif const struct extension_and_mime_type * -search_extension (register const char *str, register size_t len) +search_extension (register const char *str, register unsigned int len) { enum { @@ -3033,9 +3036,9 @@ search_extension (register const char *str, register size_t len) if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { - register unsigned int key = extension_hash (str, len); + register int key = extension_hash (str, len); - if (key <= MAX_HASH_VALUE) + if (key <= MAX_HASH_VALUE && key >= 0) { register const char *s = wordlist[key].extension; diff --git a/protocols/Telegram/tdlib/td/tdutils/generate/auto/mime_type_to_extension.cpp b/protocols/Telegram/tdlib/td/tdutils/generate/auto/mime_type_to_extension.cpp index 77af524d83..c2e8686590 100644 --- a/protocols/Telegram/tdlib/td/tdutils/generate/auto/mime_type_to_extension.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/generate/auto/mime_type_to_extension.cpp @@ -1,5 +1,5 @@ -/* ANSI-C code produced by gperf version 3.1 */ -/* Command-line: 'W:\\Test\\td\\vcpkg\\installed\\x64-windows\\tools\\gperf.exe' -m100 --output-file=auto/mime_type_to_extension.cpp auto/mime_type_to_extension.gperf */ +/* ANSI-C code produced by gperf version 3.0.1 */ +/* Command-line: 'C:\\Util\\gperf.exe' -m100 --output-file=auto/mime_type_to_extension.cpp auto/mime_type_to_extension.gperf */ /* Computed positions: -k'1,6-7,9-10,13-18,20,23,25-26,31,36,$' */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -26,7 +26,7 @@ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) /* The character set is not based on ISO-646. */ -#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>." +#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>." #endif #line 12 "auto/mime_type_to_extension.gperf" @@ -86,7 +86,7 @@ inline #endif #endif static unsigned int -mime_type_hash (register const char *str, register size_t len) +mime_type_hash (register const char *str, register unsigned int len) { static const unsigned short asso_values[] = { @@ -117,7 +117,7 @@ mime_type_hash (register const char *str, register size_t len) 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686, 4686 }; - register unsigned int hval = len; + register int hval = len; switch (hval) { @@ -195,8 +195,11 @@ mime_type_hash (register const char *str, register size_t len) return hval + asso_values[(unsigned char)str[len - 1]]; } +#ifdef __GNUC__ +__inline +#endif const struct mime_type_and_extension * -search_mime_type (register const char *str, register size_t len) +search_mime_type (register const char *str, register unsigned int len) { enum { @@ -3007,9 +3010,9 @@ search_mime_type (register const char *str, register size_t len) if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { - register unsigned int key = mime_type_hash (str, len); + register int key = mime_type_hash (str, len); - if (key <= MAX_HASH_VALUE) + if (key <= MAX_HASH_VALUE && key >= 0) { register const char *s = wordlist[key].mime_type; diff --git a/protocols/Telegram/tdlib/td/tdutils/generate/generate_mime_types_gperf.cpp b/protocols/Telegram/tdlib/td/tdutils/generate/generate_mime_types_gperf.cpp index 44ab2bd1e9..8a41633a40 100644 --- a/protocols/Telegram/tdlib/td/tdutils/generate/generate_mime_types_gperf.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/generate/generate_mime_types_gperf.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/AesCtrByteFlow.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/AesCtrByteFlow.h index 5d9057f215..fddfa8c2bb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/AesCtrByteFlow.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/AesCtrByteFlow.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.cpp index 575333745d..519793e1e9 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -49,7 +49,12 @@ Status AsyncFileLog::init(string path, int64 rotate_threshold, bool redirect_std if (!Stderr().empty() && redirect_stderr) { fd.get_native_fd().duplicate(Stderr().get_native_fd()).ignore(); } - size = 0; + auto r_size = fd.get_size(); + if (r_fd.is_error()) { + process_fatal_error(PSLICE() << "Failed to get log size: " << r_fd.error() << " in " << __FILE__ << " at " + << __LINE__ << '\n'); + } + size = r_size.move_as_ok(); }; auto append = [&](CSlice slice) { if (size > rotate_threshold) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.h index 1b0ab73897..15a14aa834 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/AtomicRead.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/AtomicRead.h index d30e960a8c..e097d620f8 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/AtomicRead.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/AtomicRead.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.cpp index e7a93d4399..b48d246064 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -28,10 +28,10 @@ class BigNumContext::Impl { Impl() : big_num_context(BN_CTX_new()) { LOG_IF(FATAL, big_num_context == nullptr); } - Impl(const Impl &other) = delete; - Impl &operator=(const Impl &other) = delete; - Impl(Impl &&other) = delete; - Impl &operator=(Impl &&other) = delete; + Impl(const Impl &) = delete; + Impl &operator=(const Impl &) = delete; + Impl(Impl &&) = delete; + Impl &operator=(Impl &&) = delete; ~Impl() { BN_CTX_free(big_num_context); } @@ -40,8 +40,8 @@ class BigNumContext::Impl { BigNumContext::BigNumContext() : impl_(make_unique<Impl>()) { } -BigNumContext::BigNumContext(BigNumContext &&other) noexcept = default; -BigNumContext &BigNumContext::operator=(BigNumContext &&other) noexcept = default; +BigNumContext::BigNumContext(BigNumContext &&) noexcept = default; +BigNumContext &BigNumContext::operator=(BigNumContext &&) noexcept = default; BigNumContext::~BigNumContext() = default; class BigNum::Impl { @@ -53,10 +53,10 @@ class BigNum::Impl { explicit Impl(BIGNUM *big_num) : big_num(big_num) { LOG_IF(FATAL, big_num == nullptr); } - Impl(const Impl &other) = delete; - Impl &operator=(const Impl &other) = delete; - Impl(Impl &&other) = delete; - Impl &operator=(Impl &&other) = delete; + Impl(const Impl &) = delete; + Impl &operator=(const Impl &) = delete; + Impl(Impl &&) = delete; + Impl &operator=(Impl &&) = delete; ~Impl() { BN_clear_free(big_num); } @@ -80,8 +80,8 @@ BigNum &BigNum::operator=(const BigNum &other) { return *this; } -BigNum::BigNum(BigNum &&other) noexcept = default; -BigNum &BigNum::operator=(BigNum &&other) noexcept = default; +BigNum::BigNum(BigNum &&) noexcept = default; +BigNum &BigNum::operator=(BigNum &&) noexcept = default; BigNum::~BigNum() = default; BigNum BigNum::from_binary(Slice str) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.h index 9b666f4ce0..98bba93c1a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -19,8 +19,8 @@ namespace td { class BigNumContext { public: BigNumContext(); - BigNumContext(const BigNumContext &other) = delete; - BigNumContext &operator=(const BigNumContext &other) = delete; + BigNumContext(const BigNumContext &) = delete; + BigNumContext &operator=(const BigNumContext &) = delete; BigNumContext(BigNumContext &&other) noexcept; BigNumContext &operator=(BigNumContext &&other) noexcept; ~BigNumContext(); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedFd.h index 6bb9b77098..17bef41ffb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -135,6 +135,14 @@ Result<size_t> BufferedFdBase<FdT>::flush_write() { write_->advance(x); result += x; } + if (result == 0) { + if (write_->empty()) { + LOG(DEBUG) << "Nothing to write to " << FdT::get_poll_info().native_fd(); + } else { + LOG(DEBUG) << "Can't flush write to " << FdT::get_poll_info().native_fd() + << " with flags = " << FdT::get_poll_info().get_flags_local(); + } + } return result; } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedReader.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedReader.h index 5fd8ac44fe..a9ccb2f8c9 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedReader.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedReader.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.cpp index e28bb97069..47de5fa9c5 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.h index 5907e17557..8a64c04af4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -51,7 +51,7 @@ class UdpReaderHelper { buffer_ = BufferSlice(RESERVED_SIZE); } CHECK(buffer_.size() >= MAX_PACKET_SIZE); - message.data = buffer_.as_slice().substr(0, MAX_PACKET_SIZE); + message.data = buffer_.as_mutable_slice().substr(0, MAX_PACKET_SIZE); } UdpMessage extract_udp_message(UdpSocketFd::InboundMessage &message) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ByteFlow.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ByteFlow.h index 2043864656..0d228abcf4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ByteFlow.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ByteFlow.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/CancellationToken.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/CancellationToken.h index 19f280655c..30a6a4f02b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/CancellationToken.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/CancellationToken.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -44,8 +44,8 @@ class CancellationTokenSource { token_ = std::move(other.token_); return *this; } - CancellationTokenSource(const CancellationTokenSource &other) = delete; - CancellationTokenSource &operator=(const CancellationTokenSource &other) = delete; + CancellationTokenSource(const CancellationTokenSource &) = delete; + CancellationTokenSource &operator=(const CancellationTokenSource &) = delete; ~CancellationTokenSource() { cancel(); } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ChainScheduler.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ChainScheduler.h index 721a22e137..a7624bb97b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ChainScheduler.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ChainScheduler.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ChangesProcessor.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ChangesProcessor.h index 669111a2ff..1dd8f87654 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ChangesProcessor.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ChangesProcessor.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Closure.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Closure.h index 345f1b1f89..1cd83d7892 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Closure.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Closure.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/CombinedLog.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/CombinedLog.h index f2fe36069e..331e1fe80c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/CombinedLog.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/CombinedLog.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ConcurrentHashTable.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ConcurrentHashTable.h index f3f0bcfa92..86752ed599 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ConcurrentHashTable.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ConcurrentHashTable.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Container.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Container.h index 418edfd56a..5f1e0920ea 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Container.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Container.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -28,6 +28,14 @@ class Container { return &slots_[slot_id].data; } + const DataT *get(Id id) const { + int32 slot_id = decode_id(id); + if (slot_id == -1) { + return nullptr; + } + return &slots_[slot_id].data; + } + void erase(Id id) { int32 slot_id = decode_id(id); if (slot_id == -1) { @@ -60,7 +68,7 @@ class Container { return static_cast<uint8>(id); } - vector<Id> ids() { + vector<Id> ids() const { vector<bool> is_bad(slots_.size(), false); for (auto id : empty_slots_) { is_bad[id] = true; @@ -73,6 +81,7 @@ class Container { } return res; } + template <class F> void for_each(const F &f) { auto ids = this->ids(); @@ -80,13 +89,24 @@ class Container { f(id, *get(id)); } } + + template <class F> + void for_each(const F &f) const { + auto ids = this->ids(); + for (auto id : ids) { + f(id, *get(id)); + } + } + size_t size() const { CHECK(empty_slots_.size() <= slots_.size()); return slots_.size() - empty_slots_.size(); } + bool empty() const { return size() == 0; } + void clear() { *this = Container<DataT>(); } @@ -135,7 +155,7 @@ class Container { void release(int32 id) { inc_generation(id); slots_[id].data = DataT(); - if (slots_[id].generation & ~TYPE_MASK) { // generation overflow. Can't use this id anymore + if (slots_[id].generation & ~TYPE_MASK) { // generation overflow. Can't use this identifier anymore empty_slots_.push_back(id); } } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Context.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Context.h index e9cac2ed09..f562e94d92 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Context.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Context.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/DecTree.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/DecTree.h index 6044842f69..caba67c3a5 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/DecTree.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/DecTree.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Destructor.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Destructor.h index ced4a8eca8..51edca634d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Destructor.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Destructor.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -16,10 +16,10 @@ namespace td { class Destructor { public: Destructor() = default; - Destructor(const Destructor &other) = delete; - Destructor &operator=(const Destructor &other) = delete; - Destructor(Destructor &&other) = default; - Destructor &operator=(Destructor &&other) = default; + Destructor(const Destructor &) = delete; + Destructor &operator=(const Destructor &) = delete; + Destructor(Destructor &&) = default; + Destructor &operator=(Destructor &&) = default; virtual ~Destructor() = default; }; @@ -28,10 +28,10 @@ class LambdaDestructor final : public Destructor { public: explicit LambdaDestructor(F &&f) : f_(std::move(f)) { } - LambdaDestructor(const LambdaDestructor &other) = delete; - LambdaDestructor &operator=(const LambdaDestructor &other) = delete; - LambdaDestructor(LambdaDestructor &&other) = default; - LambdaDestructor &operator=(LambdaDestructor &&other) = default; + LambdaDestructor(const LambdaDestructor &) = delete; + LambdaDestructor &operator=(const LambdaDestructor &) = delete; + LambdaDestructor(LambdaDestructor &&) = default; + LambdaDestructor &operator=(LambdaDestructor &&) = default; ~LambdaDestructor() final { f_(); } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Enumerator.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Enumerator.h index 367bc9fa8c..6538cad294 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Enumerator.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Enumerator.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/EpochBasedMemoryReclamation.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/EpochBasedMemoryReclamation.h index a11d307672..757c562423 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/EpochBasedMemoryReclamation.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/EpochBasedMemoryReclamation.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -18,20 +18,20 @@ namespace td { template <class T> class EpochBasedMemoryReclamation { public: - EpochBasedMemoryReclamation(const EpochBasedMemoryReclamation &other) = delete; - EpochBasedMemoryReclamation &operator=(const EpochBasedMemoryReclamation &other) = delete; - EpochBasedMemoryReclamation(EpochBasedMemoryReclamation &&other) = delete; - EpochBasedMemoryReclamation &operator=(EpochBasedMemoryReclamation &&other) = delete; + EpochBasedMemoryReclamation(const EpochBasedMemoryReclamation &) = delete; + EpochBasedMemoryReclamation &operator=(const EpochBasedMemoryReclamation &) = delete; + EpochBasedMemoryReclamation(EpochBasedMemoryReclamation &&) = delete; + EpochBasedMemoryReclamation &operator=(EpochBasedMemoryReclamation &&) = delete; ~EpochBasedMemoryReclamation() = default; class Locker { public: Locker(size_t thread_id, EpochBasedMemoryReclamation *ebmr) : thread_id_(thread_id), ebmr_(ebmr) { } - Locker(const Locker &other) = delete; - Locker &operator=(const Locker &other) = delete; - Locker(Locker &&other) = default; - Locker &operator=(Locker &&other) = delete; + Locker(const Locker &) = delete; + Locker &operator=(const Locker &) = delete; + Locker(Locker &&) = default; + Locker &operator=(Locker &&) = delete; ~Locker() { if (ebmr_) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.cpp index 3a410bd0d5..85970499c7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.h index dd721fb5b9..6d86c022a7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.cpp index a16731442a..b89edcfa48 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -128,7 +128,12 @@ void FileLog::do_after_rotation() { if (!Stderr().empty() && redirect_stderr_) { fd_.get_native_fd().duplicate(Stderr().get_native_fd()).ignore(); } - size_ = 0; + auto r_size = fd_.get_size(); + if (r_fd.is_error()) { + process_fatal_error(PSLICE() << "Failed to get log size: " << r_fd.error() << " in " << __FILE__ << " at " + << __LINE__ << '\n'); + } + size_ = r_size.move_as_ok(); } Result<unique_ptr<LogInterface>> FileLog::create(string path, int64 rotate_threshold, bool redirect_stderr) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.h index ad4ec5eb02..7603fa19af 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMap.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMap.h index 51aa6d3e4c..aa3392831f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMap.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMap.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMapChunks.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMapChunks.h index 6df4842bc1..af43ebbae2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMapChunks.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMapChunks.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashSet.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashSet.h index 385485979a..80fe5137eb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashSet.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashSet.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.cpp index abe7afa764..23df6a5ed5 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.h index a312ad9533..da12cf98e8 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -51,7 +51,7 @@ class FlatHashTable { struct Iterator { using iterator_category = std::forward_iterator_tag; using difference_type = std::ptrdiff_t; - using value_type = FlatHashTable::value_type; + using value_type = typename NodeT::public_type; using pointer = value_type *; using reference = value_type &; @@ -108,7 +108,7 @@ class FlatHashTable { struct ConstIterator { using iterator_category = std::forward_iterator_tag; using difference_type = std::ptrdiff_t; - using value_type = FlatHashTable::value_type; + using value_type = typename NodeT::public_type; using pointer = const value_type *; using reference = const value_type &; @@ -198,8 +198,8 @@ class FlatHashTable { }; FlatHashTable() = default; - FlatHashTable(const FlatHashTable &other) = delete; - FlatHashTable &operator=(const FlatHashTable &other) = delete; + FlatHashTable(const FlatHashTable &) = delete; + FlatHashTable &operator=(const FlatHashTable &) = delete; FlatHashTable(std::initializer_list<NodeT> nodes) { if (nodes.size() == 0) { @@ -226,6 +226,13 @@ class FlatHashTable { used_node_count_ = used_nodes; } + template <class T> + FlatHashTable(std::initializer_list<T> keys) { + for (auto &key : keys) { + emplace(KeyT(key)); + } + } + FlatHashTable(FlatHashTable &&other) noexcept : nodes_(other.nodes_) , used_node_count_(other.used_node_count_) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlFast.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlFast.h index e5570f6d2a..6b61cc64b9 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlFast.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlFast.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.cpp index 98709c6b96..48fcacbc3b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.h index e4f318867b..37a8f8a7c0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlStrict.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlStrict.h index 42894cdf7f..e21688717f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlStrict.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlStrict.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.cpp index 64b07a9c04..b660208992 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -25,10 +25,10 @@ class Gzip::Impl { // z_stream is not copyable nor movable Impl() = default; - Impl(const Impl &other) = delete; - Impl &operator=(const Impl &other) = delete; - Impl(Impl &&other) = delete; - Impl &operator=(Impl &&other) = delete; + Impl(const Impl &) = delete; + Impl &operator=(const Impl &) = delete; + Impl(Impl &&) = delete; + Impl &operator=(Impl &&) = delete; ~Impl() = default; }; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.h index d7b68c5e45..c62f338a21 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.cpp index d321b68ccf..d837b7ae26 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.h index 94a3a3ea50..77ea62855d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Hash.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Hash.h index 8c500daf09..58c10a73ba 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Hash.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Hash.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/HashMap.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/HashMap.h index 7e0ba4bf07..48d1249cc5 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/HashMap.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/HashMap.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/HashSet.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/HashSet.h index e49e8b94e3..7271f07543 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/HashSet.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/HashSet.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/HashTableUtils.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/HashTableUtils.h index 9d72f63c59..8e11f9840f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/HashTableUtils.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/HashTableUtils.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/HazardPointers.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/HazardPointers.h index 3ed41a0c9a..b17906cb03 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/HazardPointers.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/HazardPointers.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -29,10 +29,10 @@ class HazardPointers { } } } - HazardPointers(const HazardPointers &other) = delete; - HazardPointers &operator=(const HazardPointers &other) = delete; - HazardPointers(HazardPointers &&other) = delete; - HazardPointers &operator=(HazardPointers &&other) = delete; + HazardPointers(const HazardPointers &) = delete; + HazardPointers &operator=(const HazardPointers &) = delete; + HazardPointers(HazardPointers &&) = delete; + HazardPointers &operator=(HazardPointers &&) = delete; class Holder { public: @@ -44,10 +44,10 @@ class HazardPointers { CHECK(hazard_ptr_.load() == 0); hazard_ptr_.store(reinterpret_cast<T *>(1)); } - Holder(const Holder &other) = delete; - Holder &operator=(const Holder &other) = delete; - Holder(Holder &&other) = delete; - Holder &operator=(Holder &&other) = delete; + Holder(const Holder &) = delete; + Holder &operator=(const Holder &) = delete; + Holder(Holder &&) = delete; + Holder &operator=(Holder &&) = delete; ~Holder() { clear(); } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Heap.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Heap.h index 154b87089a..4c22bd81c5 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Heap.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Heap.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.cpp index 1041b95d8b..e6ddc69e37 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.h index f069da20d0..c4b22c71f6 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.cpp index e793f940a8..09740c58bf 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -11,6 +11,7 @@ #include "td/utils/misc.h" #include "td/utils/Parser.h" #include "td/utils/port/IPAddress.h" +#include "td/utils/SliceBuilder.h" #include <algorithm> @@ -138,42 +139,50 @@ Result<HttpUrl> parse_url(Slice url, HttpUrl::Protocol default_protocol) { } } - string host_str = to_lower(host); - for (size_t i = 0; i < host_str.size(); i++) { - char c = host_str[i]; - if (is_ipv6) { - if (i == 0 || i + 1 == host_str.size() || c == ':' || ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || - c == '.') { + auto check_url_part = [](Slice part, Slice name, bool allow_colon) { + for (size_t i = 0; i < part.size(); i++) { + char c = part[i]; + if (is_alnum(c) || c == '.' || c == '-' || c == '_' || c == '!' || c == '$' || c == ',' || c == '~' || c == '*' || + c == '\'' || c == '(' || c == ')' || c == ';' || c == '&' || c == '+' || c == '=' || + (allow_colon && c == ':')) { + // symbols allowed by RFC 7230 and RFC 3986 continue; } - return Status::Error("Wrong IPv6 URL host"); - } - - if (('a' <= c && c <= 'z') || c == '.' || ('0' <= c && c <= '9') || c == '-' || c == '_' || c == '!' || c == '$' || - c == ',' || c == '~' || c == '*' || c == '\'' || c == '(' || c == ')' || c == ';' || c == '&' || c == '+' || - c == '=') { - // symbols allowed by RFC 7230 and RFC 3986 - continue; - } - if (c == '%') { - c = host_str[++i]; - if (('a' <= c && c <= 'f') || ('0' <= c && c <= '9')) { - c = host_str[++i]; - if (('a' <= c && c <= 'f') || ('0' <= c && c <= '9')) { - // percent encoded symbol as allowed by RFC 7230 and RFC 3986 - continue; + if (c == '%') { + c = part[++i]; + if (is_hex_digit(c)) { + c = part[++i]; + if (is_hex_digit(c)) { + // percent encoded symbol as allowed by RFC 7230 and RFC 3986 + continue; + } } + return Status::Error(PSLICE() << "Wrong percent-encoded symbol in URL " << name); } - return Status::Error("Wrong percent-encoded symbol in URL host"); + + // all other symbols aren't allowed + auto uc = static_cast<unsigned char>(c); + if (uc >= 128) { + // but we allow plain UTF-8 symbols + continue; + } + return Status::Error(PSLICE() << "Disallowed character in URL " << name); } + return Status::OK(); + }; - // all other symbols aren't allowed - auto uc = static_cast<unsigned char>(c); - if (uc >= 128) { - // but we allow plain UTF-8 symbols - continue; + string host_str = to_lower(host); + if (is_ipv6) { + for (size_t i = 1; i + 1 < host_str.size(); i++) { + char c = host_str[i]; + if (c == ':' || ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || c == '.') { + continue; + } + return Status::Error("Wrong IPv6 URL host"); } - return Status::Error("Wrong URL host"); + } else { + TRY_STATUS(check_url_part(host_str, "host", false)); + TRY_STATUS(check_url_part(userinfo, "userinfo", true)); } return HttpUrl{protocol, userinfo.str(), std::move(host_str), is_ipv6, specified_port, port, std::move(query_str)}; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.h index 9b4e92edce..7ab6083d91 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.cpp index f5823ad806..ad721f497c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.h index 90035cd6e2..053f4a0266 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -222,11 +222,11 @@ class JsonScope { jb_->scope_ = this; CHECK(is_active()); } - JsonScope(const JsonScope &other) = delete; + JsonScope(const JsonScope &) = delete; + JsonScope &operator=(const JsonScope &) = delete; JsonScope(JsonScope &&other) noexcept : sb_(other.sb_), jb_(other.jb_), save_scope_(other.save_scope_) { other.jb_ = nullptr; } - JsonScope &operator=(const JsonScope &) = delete; JsonScope &operator=(JsonScope &&) = delete; ~JsonScope() { if (jb_) { @@ -342,7 +342,10 @@ class JsonArrayScope final : public JsonScope { jb->inc_offset(); *sb_ << "["; } - JsonArrayScope(JsonArrayScope &&other) = default; + JsonArrayScope(const JsonArrayScope &) = delete; + JsonArrayScope &operator=(const JsonArrayScope &) = delete; + JsonArrayScope(JsonArrayScope &&) = default; + JsonArrayScope &operator=(JsonArrayScope &&) = delete; ~JsonArrayScope() { if (jb_) { leave(); @@ -383,7 +386,10 @@ class JsonObjectScope final : public JsonScope { jb->inc_offset(); *sb_ << "{"; } - JsonObjectScope(JsonObjectScope &&other) = default; + JsonObjectScope(const JsonObjectScope &) = delete; + JsonObjectScope &operator=(const JsonObjectScope &) = delete; + JsonObjectScope(JsonObjectScope &&) = default; + JsonObjectScope &operator=(JsonObjectScope &&) = delete; ~JsonObjectScope() { if (jb_) { leave(); @@ -470,8 +476,8 @@ class JsonValue final : private Jsonable { init(std::move(other)); return *this; } - JsonValue(const JsonValue &other) = delete; - JsonValue &operator=(const JsonValue &other) = delete; + JsonValue(const JsonValue &) = delete; + JsonValue &operator=(const JsonValue &) = delete; Type type() const { return type_; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/List.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/List.h index 4f9bb9877f..d018319829 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/List.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/List.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MapNode.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MapNode.h index cad2ae9b36..b6c65c812c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MapNode.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MapNode.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -45,8 +45,8 @@ struct MapNode { new (&second) ValueT(std::move(value)); DCHECK(!empty()); } - MapNode(const MapNode &other) = delete; - MapNode &operator=(const MapNode &other) = delete; + MapNode(const MapNode &) = delete; + MapNode &operator=(const MapNode &) = delete; MapNode(MapNode &&other) noexcept { *this = std::move(other); } @@ -107,10 +107,10 @@ struct MapNode<KeyT, ValueT, typename std::enable_if_t<(sizeof(KeyT) + sizeof(Va new (&second) ValueT(std::forward<ArgsT>(args)...); DCHECK(!is_hash_table_key_empty(first)); } - Impl(const Impl &other) = delete; - Impl &operator=(const Impl &other) = delete; - Impl(Impl &&other) = delete; - void operator=(Impl &&other) = delete; + Impl(const Impl &) = delete; + Impl &operator=(const Impl &) = delete; + Impl(Impl &&) = delete; + Impl &operator=(Impl &&) = delete; ~Impl() { second.~ValueT(); } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MemoryLog.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MemoryLog.h index 04b03b60ee..f5029be5cd 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MemoryLog.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MemoryLog.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.cpp index a7dde2405f..581760c157 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.h index ccaf029a52..f72943abd1 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MovableValue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MovableValue.h index 7a8ef459e0..24135c1e8b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MovableValue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MovableValue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.cpp index 1fcbc04341..cfef400619 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.h index f1f12a37f4..a6d1bef7f1 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -217,10 +217,10 @@ class MpmcQueueOld { node.release(); } - MpmcQueueOld(const MpmcQueueOld &other) = delete; - MpmcQueueOld &operator=(const MpmcQueueOld &other) = delete; - MpmcQueueOld(MpmcQueueOld &&other) = delete; - MpmcQueueOld &operator=(MpmcQueueOld &&other) = delete; + MpmcQueueOld(const MpmcQueueOld &) = delete; + MpmcQueueOld &operator=(const MpmcQueueOld &) = delete; + MpmcQueueOld(MpmcQueueOld &&) = delete; + MpmcQueueOld &operator=(MpmcQueueOld &&) = delete; ~MpmcQueueOld() { auto *ptr = read_pos_.load(std::memory_order_relaxed); while (ptr) { @@ -316,7 +316,7 @@ class MpmcQueueOld { std::atomic<Node *> next_{nullptr}; char pad[TD_CONCURRENCY_PAD - sizeof(std::atomic<Node *>)]; MpmcQueueBlock<T> block; - //Got pad in MpmcQueueBlock + // MpmcQueueBlock is already padded }; std::atomic<Node *> write_pos_{nullptr}; char pad[TD_CONCURRENCY_PAD - sizeof(std::atomic<Node *>)]; @@ -324,7 +324,7 @@ class MpmcQueueOld { char pad2[TD_CONCURRENCY_PAD - sizeof(std::atomic<Node *>)]; size_t block_size_; HazardPointers<Node, 1> hazard_pointers_; - //Got pad in HazardPointers + // HazardPointers is already padded }; template <class T> @@ -342,10 +342,10 @@ class MpmcQueue { node.release(); } - MpmcQueue(const MpmcQueue &other) = delete; - MpmcQueue &operator=(const MpmcQueue &other) = delete; - MpmcQueue(MpmcQueue &&other) = delete; - MpmcQueue &operator=(MpmcQueue &&other) = delete; + MpmcQueue(const MpmcQueue &) = delete; + MpmcQueue &operator=(const MpmcQueue &) = delete; + MpmcQueue(MpmcQueue &&) = delete; + MpmcQueue &operator=(MpmcQueue &&) = delete; ~MpmcQueue() { auto *ptr = read_pos_.load(std::memory_order_relaxed); while (ptr) { @@ -448,14 +448,13 @@ class MpmcQueue { Block block; std::atomic<Node *> next{nullptr}; char pad[TD_CONCURRENCY_PAD - sizeof(std::atomic<Node *>)]; - //Got pad in MpmcQueueBlock }; std::atomic<Node *> write_pos_{nullptr}; char pad[TD_CONCURRENCY_PAD - sizeof(std::atomic<Node *>)]; std::atomic<Node *> read_pos_{nullptr}; char pad2[TD_CONCURRENCY_PAD - sizeof(std::atomic<Node *>)]; HazardPointers<Node, 1> hazard_pointers_; - //Got pad in HazardPointers + // HazardPointers is already padded }; } // namespace td diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcWaiter.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcWaiter.h index 7ece498ff6..1a2569a05d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcWaiter.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcWaiter.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -186,9 +186,8 @@ class MpmcSleepyWaiter { // This may put it in a Sleep for some time. // After wait returns worker will be in Search state again. // - // Suppose worker found a work and ready to process it. - // Then it may call stop_wait. This will cause transition from - // Search to Work state. + // If a worker found a work and ready to process it, then it may call stop_wait. + // This will cause transition from Search to Work state. // // Main invariant: // After notify is called there should be at least on worker in Search or Work state. @@ -260,7 +259,7 @@ class MpmcSleepyWaiter { guard.unlock(); } else { guard.unlock(); - VLOG(waiter) << "Not in sleepers" << slot.worker_id; + VLOG(waiter) << "Not in sleepers " << slot.worker_id; CHECK(slot.cancel_park()); } } @@ -282,16 +281,16 @@ class MpmcSleepyWaiter { auto view = StateView(state_.load()); //LOG(ERROR) << view.parked_count; if (view.searching_count > 0 || view.parked_count == 0) { - VLOG(waiter) << "Ingore notify: " << view.searching_count << " " << view.parked_count; + VLOG(waiter) << "Ingore notify: " << view.searching_count << ' ' << view.parked_count; return; } - VLOG(waiter) << "Notify: " << view.searching_count << " " << view.parked_count; + VLOG(waiter) << "Notify: " << view.searching_count << ' ' << view.parked_count; std::unique_lock<std::mutex> guard(sleepers_mutex_); view = StateView(state_.load()); if (view.searching_count > 0) { - VLOG(waiter) << "Skip notify: got searching"; + VLOG(waiter) << "Skip notify: search is active"; return; } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscLinkQueue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscLinkQueue.h index a1b05c2791..4a08671a4e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscLinkQueue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscLinkQueue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscPollableQueue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscPollableQueue.h index f6de4bf280..49bb1bb359 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscPollableQueue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/MpscPollableQueue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -33,6 +33,8 @@ class MpscPollableQueue { auto guard = lock_.lock(); if (writer_vector_.empty()) { if (i == 1) { + reader_vector_.clear(); + reader_pos_ = 0; wait_event_fd_ = true; return 0; } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Named.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Named.h index 251f14b86d..7ed59d2ed1 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Named.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Named.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/NullLog.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/NullLog.h index 71b9ad7d7c..a387f3e868 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/NullLog.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/NullLog.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ObjectPool.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ObjectPool.h index 8ee2a58566..8f6f4c28ed 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ObjectPool.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ObjectPool.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -43,10 +43,9 @@ class ObjectPool { // Pattern of usage: 1. Read an object 2. Check if read was valid via is_alive // // It is not very usual case of acquire/release use. - // Instead of publishing an object via some flag we do the opposite. - // We publish new generation via destruction of the data. + // We publish new generation via destruction of the data instead of publishing the object via some flag. // In usual case if we see a flag, then we are able to use an object. - // In our case if we have used an object and it is already invalid, then generation will mismatch + // In our case if we have used an object and it is already invalid, then generation will mismatch. bool is_alive() const { if (!storage_) { return false; @@ -180,8 +179,8 @@ class ObjectPool { ObjectPool() = default; ObjectPool(const ObjectPool &) = delete; ObjectPool &operator=(const ObjectPool &) = delete; - ObjectPool(ObjectPool &&other) = delete; - ObjectPool &operator=(ObjectPool &&other) = delete; + ObjectPool(ObjectPool &&) = delete; + ObjectPool &operator=(ObjectPool &&) = delete; ~ObjectPool() { while (head_.load()) { auto to_delete = head_.load(); @@ -216,7 +215,7 @@ class ObjectPool { std::atomic<Storage *> head_{static_cast<Storage *>(nullptr)}; bool check_empty_flag_ = false; - // TODO(perf): allocation Storages in chunks? Anyway we won't be able to release them. + // TODO(perf): allocation Storages in chunks? Anyway, we won't be able to release them. // TODO(perf): memory order // TODO(perf): use another non lockfree list for release on the same thread // only one thread, so no aba problem diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Observer.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Observer.h index 33e8bc1a4c..3b5e0eaefa 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Observer.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Observer.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.cpp index 76571d4954..5ee2bbfba9 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -38,7 +38,7 @@ void OptionParser::add_option(Option::Type type, char short_key, Slice long_key, std::function<Status(Slice)> callback) { for (auto &option : options_) { if ((short_key != '\0' && option.short_key == short_key) || (!long_key.empty() && long_key == option.long_key)) { - LOG(ERROR) << "Ignore duplicated option '" << (short_key == '\0' ? '-' : short_key) << "' '" << long_key << "'"; + LOG(ERROR) << "Ignore duplicate option '" << (short_key == '\0' ? '-' : short_key) << "' '" << long_key << "'"; } } options_.push_back(Option{type, short_key, long_key.str(), description.str(), std::move(callback)}); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.h index 82d4296dca..194ded7d4c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/OrderedEventsProcessor.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/OrderedEventsProcessor.h index 8b3474ab57..d5c638eb88 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/OrderedEventsProcessor.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/OrderedEventsProcessor.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -13,7 +13,7 @@ namespace td { -// Process states in order defined by their Id +// Process states in order defined by their SeqNo template <class DataT> class OrderedEventsProcessor { public: diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Parser.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Parser.h index 731f885171..d729ea4b74 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Parser.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Parser.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.cpp index 943d8a8c84..635c68294a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.h index 1bafc1d038..6b862c1dcb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Promise.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Promise.h index 4e83045d61..247593742c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Promise.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Promise.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -105,10 +105,10 @@ class LambdaPromise : public PromiseInterface<ValueT> { state_ = State::Complete; } } - LambdaPromise(const LambdaPromise &other) = delete; - LambdaPromise &operator=(const LambdaPromise &other) = delete; - LambdaPromise(LambdaPromise &&other) = default; - LambdaPromise &operator=(LambdaPromise &&other) = default; + LambdaPromise(const LambdaPromise &) = delete; + LambdaPromise &operator=(const LambdaPromise &) = delete; + LambdaPromise(LambdaPromise &&) = default; + LambdaPromise &operator=(LambdaPromise &&) = default; ~LambdaPromise() override { if (state_.get() == State::Ready) { do_error(Status::Error("Lost promise")); @@ -258,10 +258,10 @@ class SafePromise { public: SafePromise(Promise<T> promise, Result<T> result) : promise_(std::move(promise)), result_(std::move(result)) { } - SafePromise(const SafePromise &other) = delete; - SafePromise &operator=(const SafePromise &other) = delete; - SafePromise(SafePromise &&other) = default; - SafePromise &operator=(SafePromise &&other) = default; + SafePromise(const SafePromise &) = delete; + SafePromise &operator=(const SafePromise &) = delete; + SafePromise(SafePromise &&) = default; + SafePromise &operator=(SafePromise &&) = default; ~SafePromise() { if (promise_) { promise_.set_result(std::move(result_)); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.cpp index 5b4c78d675..2d276f62cf 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.h index 32cb71f770..8665e0168a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Random.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -8,7 +8,6 @@ #include "td/utils/common.h" #include "td/utils/Slice.h" -#include "td/utils/Span.h" #include <utility> @@ -27,6 +26,15 @@ class Random { // works only for current thread static void add_seed(Slice bytes, double entropy = 0); static void secure_cleanup(); + + template <class T> + static void shuffle(vector<T> &v) { + for (size_t i = 1; i < v.size(); i++) { + auto pos = static_cast<size_t>(secure_int32()) % (i + 1); + using std::swap; + swap(v[i], v[pos]); + } + } #endif static uint32 fast_uint32(); @@ -57,13 +65,4 @@ class Random { }; }; -template <class T, class R> -void random_shuffle(MutableSpan<T> v, R &rnd) { - for (size_t i = 1; i < v.size(); i++) { - auto pos = static_cast<size_t>(rnd()) % (i + 1); - using std::swap; - swap(v[i], v[pos]); - } -} - } // namespace td diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ScopeGuard.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ScopeGuard.h index 577514a44b..409912b444 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ScopeGuard.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ScopeGuard.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -18,10 +18,10 @@ namespace td { class Guard { public: Guard() = default; - Guard(const Guard &other) = delete; - Guard &operator=(const Guard &other) = delete; - Guard(Guard &&other) = default; - Guard &operator=(Guard &&other) = default; + Guard(const Guard &) = delete; + Guard &operator=(const Guard &) = delete; + Guard(Guard &&) = default; + Guard &operator=(Guard &&) = default; virtual ~Guard() = default; virtual void dismiss() { std::abort(); @@ -35,12 +35,12 @@ class LambdaGuard final : public Guard { } explicit LambdaGuard(FunctionT &&func) : func_(std::move(func)) { } - LambdaGuard(const LambdaGuard &other) = delete; - LambdaGuard &operator=(const LambdaGuard &other) = delete; + LambdaGuard(const LambdaGuard &) = delete; + LambdaGuard &operator=(const LambdaGuard &) = delete; LambdaGuard(LambdaGuard &&other) : func_(std::move(other.func_)), dismissed_(other.dismissed_) { other.dismissed_ = true; } - LambdaGuard &operator=(LambdaGuard &&other) = delete; + LambdaGuard &operator=(LambdaGuard &&) = delete; void dismiss() final { dismissed_ = true; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/SetNode.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/SetNode.h index 6e5960553d..cbc218329c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/SetNode.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/SetNode.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -34,8 +34,8 @@ struct SetNode { } explicit SetNode(KeyT key) : first(std::move(key)) { } - SetNode(const SetNode &other) = delete; - SetNode &operator=(const SetNode &other) = delete; + SetNode(const SetNode &) = delete; + SetNode &operator=(const SetNode &) = delete; SetNode(SetNode &&other) noexcept { *this = std::move(other); } @@ -78,10 +78,10 @@ struct SetNode<KeyT, typename std::enable_if_t<(sizeof(KeyT) > 28 * sizeof(void explicit Impl(InputKeyT &&key) : first(std::forward<InputKeyT>(key)) { DCHECK(!is_hash_table_key_empty(first)); } - Impl(const Impl &other) = delete; - Impl &operator=(const Impl &other) = delete; - Impl(Impl &&other) = delete; - void operator=(Impl &&other) = delete; + Impl(const Impl &) = delete; + Impl &operator=(const Impl &) = delete; + Impl(Impl &&) = delete; + Impl &operator=(Impl &&) = delete; }; using public_key_type = KeyT; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedObjectPool.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedObjectPool.h index 6a7dcc8256..11994742f2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedObjectPool.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedObjectPool.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -187,10 +187,10 @@ class SharedObjectPool { using Ptr = detail::SharedPtr<DataT, Deleter>; SharedObjectPool() = default; - SharedObjectPool(const SharedObjectPool &other) = delete; - SharedObjectPool &operator=(const SharedObjectPool &other) = delete; - SharedObjectPool(SharedObjectPool &&other) = delete; - SharedObjectPool &operator=(SharedObjectPool &&other) = delete; + SharedObjectPool(const SharedObjectPool &) = delete; + SharedObjectPool &operator=(const SharedObjectPool &) = delete; + SharedObjectPool(SharedObjectPool &&) = delete; + SharedObjectPool &operator=(SharedObjectPool &&) = delete; ~SharedObjectPool() { free_queue_.pop_all(free_queue_reader_); size_t free_cnt = 0; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.cpp index df157f4e6d..b0dcfe1e97 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.h index e0ea0c17c0..b2f862a4f7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice-decl.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice-decl.h index 12d0382861..ddf4324300 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice-decl.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice-decl.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -30,7 +30,7 @@ class MutableSlice { MutableSlice(char *s, char *t); MutableSlice(unsigned char *s, unsigned char *t); template <size_t N> - constexpr MutableSlice(char (&a)[N]) = delete; + constexpr MutableSlice(char (&)[N]) = delete; bool empty() const; size_t size() const; @@ -84,16 +84,16 @@ class Slice { Slice(const unsigned char *s, const unsigned char *t); template <size_t N> - constexpr Slice(char (&a)[N]) = delete; + constexpr Slice(char (&)[N]) = delete; template <size_t N> constexpr Slice(const char (&a)[N]) : s_(a), len_(N - 1) { } - Slice &operator=(string &&s) = delete; + Slice &operator=(string &&) = delete; template <size_t N> - constexpr Slice &operator=(char (&a)[N]) = delete; + constexpr Slice &operator=(char (&)[N]) = delete; template <size_t N> constexpr Slice &operator=(const char (&a)[N]) { @@ -149,7 +149,7 @@ class MutableCSlice : public MutableSlice { MutableCSlice(char *s, char *t); template <size_t N> - constexpr MutableCSlice(char (&a)[N]) = delete; + constexpr MutableCSlice(char (&)[N]) = delete; const char *c_str() const { return begin(); @@ -180,7 +180,7 @@ class CSlice : public Slice { CSlice(const char *s, const char *t); template <size_t N> - constexpr CSlice(char (&a)[N]) = delete; + constexpr CSlice(char (&)[N]) = delete; template <size_t N> constexpr CSlice(const char (&a)[N]) : Slice(a) { @@ -189,10 +189,10 @@ class CSlice : public Slice { CSlice() : CSlice("") { } - CSlice &operator=(string &&s) = delete; + CSlice &operator=(string &&) = delete; template <size_t N> - constexpr CSlice &operator=(char (&a)[N]) = delete; + constexpr CSlice &operator=(char (&)[N]) = delete; template <size_t N> constexpr CSlice &operator=(const char (&a)[N]) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.cpp index 921a824479..6bbb2729f7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.h index 6c1efb0a69..90393ce1fa 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -304,7 +304,7 @@ inline Slice as_slice(Slice slice) { return slice; } -inline MutableSlice as_slice(MutableSlice slice) { +inline Slice as_slice(MutableSlice slice) { return slice; } @@ -312,10 +312,6 @@ inline Slice as_slice(const string &str) { return str; } -inline MutableSlice as_slice(string &str) { - return str; -} - inline MutableSlice as_mutable_slice(MutableSlice slice) { return slice; } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/SliceBuilder.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/SliceBuilder.h index 062ea136a0..dae838ba61 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/SliceBuilder.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/SliceBuilder.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Span.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Span.h index 877adcf78a..d38ee3eeb4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Span.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Span.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/SpinLock.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/SpinLock.h index 3413f6c5b3..f0eba79f08 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/SpinLock.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/SpinLock.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.cpp index 947238165e..df14087d31 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.h index 7b87aef963..28f09c0612 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -32,13 +32,13 @@ class StackAllocator { public: Ptr(AllocatorImpl *allocator, size_t size) : allocator_(allocator), slice_(allocator_->allocate(size)) { } - Ptr(const Ptr &other) = delete; - Ptr &operator=(const Ptr &other) = delete; + Ptr(const Ptr &) = delete; + Ptr &operator=(const Ptr &) = delete; Ptr(Ptr &&other) noexcept : allocator_(other.allocator_), slice_(other.slice_) { other.allocator_ = nullptr; other.slice_ = MutableSlice(); } - Ptr &operator=(Ptr &&other) = delete; + Ptr &operator=(Ptr &&) = delete; ~Ptr(); MutableSlice as_slice() const { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.cpp index 5a49b1097f..4ffb47f46c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -59,6 +59,10 @@ string winerror_to_string(int code) { Status Status::move_as_error_prefix(Slice prefix) const { CHECK(is_error()); + return move_as_error_prefix_unsafe(prefix); +} + +Status Status::move_as_error_prefix_unsafe(Slice prefix) const { Info info = get_info(); switch (info.error_type) { case ErrorType::General: @@ -73,6 +77,10 @@ Status Status::move_as_error_prefix(Slice prefix) const { Status Status::move_as_error_suffix(Slice suffix) const { CHECK(is_error()); + return move_as_error_suffix_unsafe(suffix); +} + +Status Status::move_as_error_suffix_unsafe(Slice suffix) const { Info info = get_info(); switch (info.error_type) { case ErrorType::General: diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.h index 83e1abcb23..488587ed88 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Status.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -20,38 +20,36 @@ #include <type_traits> #include <utility> -#define TRY_STATUS(status) \ - { \ - auto try_status = (status); \ - if (try_status.is_error()) { \ - return try_status.move_as_error(); \ - } \ +#define TRY_STATUS(status) \ + { \ + auto try_status = (status); \ + if (try_status.is_error()) { \ + return try_status.move_as_error_unsafe(); \ + } \ } -#define TRY_STATUS_PREFIX(status, prefix) \ - { \ - auto try_status = (status); \ - if (try_status.is_error()) { \ - return try_status.move_as_error_prefix(prefix); \ - } \ +#define TRY_STATUS_PREFIX(status, prefix) \ + { \ + auto try_status = (status); \ + if (try_status.is_error()) { \ + return try_status.move_as_error_prefix_unsafe(prefix); \ + } \ } -#define TRY_STATUS_PROMISE(promise_name, status) \ - { \ - auto try_status = (status); \ - if (try_status.is_error()) { \ - promise_name.set_error(try_status.move_as_error()); \ - return; \ - } \ +#define TRY_STATUS_PROMISE(promise_name, status) \ + { \ + auto try_status = (status); \ + if (try_status.is_error()) { \ + return promise_name.set_error(try_status.move_as_error_unsafe()); \ + } \ } -#define TRY_STATUS_PROMISE_PREFIX(promise_name, status, prefix) \ - { \ - auto try_status = (status); \ - if (try_status.is_error()) { \ - promise_name.set_error(try_status.move_as_error_prefix(prefix)); \ - return; \ - } \ +#define TRY_STATUS_PROMISE_PREFIX(promise_name, status, prefix) \ + { \ + auto try_status = (status); \ + if (try_status.is_error()) { \ + return promise_name.set_error(try_status.move_as_error_prefix_unsafe(prefix)); \ + } \ } #define TRY_RESULT(name, result) TRY_RESULT_IMPL(TD_CONCAT(TD_CONCAT(r_, name), __LINE__), auto name, result) @@ -79,39 +77,37 @@ #define TRY_RESULT_IMPL(r_name, name, result) \ auto r_name = (result); \ if (r_name.is_error()) { \ - return r_name.move_as_error(); \ + return r_name.move_as_error_unsafe(); \ } \ - name = r_name.move_as_ok(); + name = r_name.move_as_ok_unsafe(); #define TRY_RESULT_PREFIX_IMPL(r_name, name, result, prefix) \ auto r_name = (result); \ if (r_name.is_error()) { \ - return r_name.move_as_error_prefix(prefix); \ + return r_name.move_as_error_prefix_unsafe(prefix); \ } \ - name = r_name.move_as_ok(); + name = r_name.move_as_ok_unsafe(); #define TRY_RESULT_PROMISE_IMPL(promise_name, r_name, name, result) \ auto r_name = (result); \ if (r_name.is_error()) { \ - promise_name.set_error(r_name.move_as_error()); \ - return; \ + return promise_name.set_error(r_name.move_as_error_unsafe()); \ } \ - name = r_name.move_as_ok(); + name = r_name.move_as_ok_unsafe(); #define TRY_RESULT_PROMISE_PREFIX_IMPL(promise_name, r_name, name, result, prefix) \ auto r_name = (result); \ if (r_name.is_error()) { \ - promise_name.set_error(r_name.move_as_error_prefix(prefix)); \ - return; \ + return promise_name.set_error(r_name.move_as_error_prefix_unsafe(prefix)); \ } \ - name = r_name.move_as_ok(); + name = r_name.move_as_ok_unsafe(); -#define LOG_STATUS(status) \ - { \ - auto log_status = (status); \ - if (log_status.is_error()) { \ - LOG(ERROR) << log_status.move_as_error(); \ - } \ +#define LOG_STATUS(status) \ + { \ + auto log_status = (status); \ + if (log_status.is_error()) { \ + LOG(ERROR) << log_status.move_as_error_unsafe(); \ + } \ } #ifndef TD_STATUS_NO_ENSURE @@ -155,8 +151,11 @@ class Status { public: Status() = default; - bool operator==(const Status &other) const { - return ptr_ == other.ptr_; + bool is_static() const { + if (is_ok()) { + return true; + } + return get_info().static_flag; } Status clone() const TD_WARN_UNUSED_RESULT { @@ -165,7 +164,7 @@ class Status { } auto info = get_info(); if (info.static_flag) { - return clone_static(); + return clone_static(-999); } return Status(false, info.error_type, info.error_code, message()); } @@ -194,14 +193,10 @@ class Status { } #endif - static Status Error() TD_WARN_UNUSED_RESULT { - return Error<0>(); - } - template <int Code> static Status Error() { static Status status(true, ErrorType::General, Code, ""); - return status.clone_static(); + return status.clone_static(Code); } StringBuilder &print(StringBuilder &sb) const { @@ -318,16 +313,26 @@ class Status { return std::move(*this); } + Status move_as_error_unsafe() TD_WARN_UNUSED_RESULT { + return std::move(*this); + } + Status move_as_ok() = delete; + Status move_as_ok_unsafe() = delete; + Status move_as_error_prefix(const Status &status) const TD_WARN_UNUSED_RESULT { return status.move_as_error_suffix(message()); } Status move_as_error_prefix(Slice prefix) const TD_WARN_UNUSED_RESULT; + Status move_as_error_prefix_unsafe(Slice prefix) const TD_WARN_UNUSED_RESULT; + Status move_as_error_suffix(Slice suffix) const TD_WARN_UNUSED_RESULT; + Status move_as_error_suffix_unsafe(Slice suffix) const TD_WARN_UNUSED_RESULT; + private: struct Info { bool static_flag : 1; @@ -362,8 +367,8 @@ class Status { } } - Status clone_static() const TD_WARN_UNUSED_RESULT { - CHECK(ptr_ != nullptr && get_info().static_flag); + Status clone_static(int code) const TD_WARN_UNUSED_RESULT { + LOG_CHECK(ptr_ != nullptr && get_info().static_flag) << ptr_.get() << ' ' << code; Status result; result.ptr_ = std::unique_ptr<char[], Deleter>(ptr_.get()); return result; @@ -499,24 +504,44 @@ class Result { }; return std::move(status_); } - Status move_as_error_prefix(Slice prefix) TD_WARN_UNUSED_RESULT { + Status move_as_error_unsafe() TD_WARN_UNUSED_RESULT { SCOPE_EXIT { status_ = Status::Error<-5>(); }; + return std::move(status_); + } + Status move_as_error_prefix(Slice prefix) TD_WARN_UNUSED_RESULT { + SCOPE_EXIT { + status_ = Status::Error<-6>(); + }; return status_.move_as_error_prefix(prefix); } + Status move_as_error_prefix_unsafe(Slice prefix) TD_WARN_UNUSED_RESULT { + SCOPE_EXIT { + status_ = Status::Error<-7>(); + }; + return status_.move_as_error_prefix_unsafe(prefix); + } Status move_as_error_prefix(const Status &prefix) TD_WARN_UNUSED_RESULT { SCOPE_EXIT { - status_ = Status::Error<-6>(); + status_ = Status::Error<-8>(); }; return status_.move_as_error_prefix(prefix); } + Status move_as_error_suffix(Slice suffix) TD_WARN_UNUSED_RESULT { SCOPE_EXIT { - status_ = Status::Error<-7>(); + status_ = Status::Error<-9>(); }; return status_.move_as_error_suffix(suffix); } + Status move_as_error_suffix_unsafe(Slice suffix) TD_WARN_UNUSED_RESULT { + SCOPE_EXIT { + status_ = Status::Error<-10>(); + }; + return status_.move_as_error_suffix_unsafe(suffix); + } + const T &ok() const { LOG_CHECK(status_.is_ok()) << status_; return value_; @@ -533,6 +558,9 @@ class Result { LOG_CHECK(status_.is_ok()) << status_; return std::move(value_); } + T move_as_ok_unsafe() { + return std::move(value_); + } Result<T> clone() const TD_WARN_UNUSED_RESULT { if (is_ok()) { @@ -547,17 +575,17 @@ class Result { template <class F> Result<decltype(std::declval<F>()(std::declval<T>()))> move_map(F &&f) { if (is_error()) { - return move_as_error(); + return move_as_error_unsafe(); } - return f(move_as_ok()); + return f(move_as_ok_unsafe()); } template <class F> decltype(std::declval<F>()(std::declval<T>())) move_fmap(F &&f) { if (is_error()) { - return move_as_error(); + return move_as_error_unsafe(); } - return f(move_as_ok()); + return f(move_as_ok_unsafe()); } private: diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/StealingQueue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/StealingQueue.h index d2fb773f3a..3199510b70 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/StealingQueue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/StealingQueue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Storer.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Storer.h index 7743b81ff5..f36e469348 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Storer.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Storer.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/StorerBase.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/StorerBase.h index 05e5edc714..b07dc4aef7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/StorerBase.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/StorerBase.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.cpp index d82fdbea53..941394e191 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.h index 37adab338e..2339ef71cb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -32,6 +32,16 @@ class StringBuilder { current_ptr_--; } + void push_back(char c) { + if (unlikely(end_ptr_ <= current_ptr_)) { + if (!reserve_inner(RESERVED_SIZE)) { + error_flag_ = true; + return; + } + } + *current_ptr_++ = c; + } + MutableCSlice as_cslice() { if (current_ptr_ >= end_ptr_ + RESERVED_SIZE) { std::abort(); // shouldn't happen @@ -40,6 +50,10 @@ class StringBuilder { return MutableCSlice(begin_ptr_, current_ptr_); } + size_t size() { + return static_cast<size_t>(current_ptr_ - begin_ptr_); + } + bool is_error() const { return error_flag_; } @@ -132,6 +146,7 @@ class StringBuilder { } return reserve_inner(RESERVED_SIZE); } + bool reserve(size_t size) { if (end_ptr_ > current_ptr_ && static_cast<size_t>(end_ptr_ - current_ptr_) >= size) { return true; @@ -142,7 +157,8 @@ class StringBuilder { }; template <class T> -std::enable_if_t<std::is_arithmetic<T>::value, string> to_string(const T &x) { +std::enable_if_t<std::is_arithmetic<T>::value && !std::is_same<std::decay_t<T>, bool>::value, string> to_string( + const T &x) { const size_t buf_size = 1000; auto buf = StackAllocator::alloc(buf_size); StringBuilder sb(buf.as_slice()); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadLocalStorage.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadLocalStorage.h index da42c4ac0e..84c5d9aa21 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadLocalStorage.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadLocalStorage.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadSafeCounter.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadSafeCounter.h index 2d6f3f2950..7d0f6b0a46 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadSafeCounter.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadSafeCounter.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.cpp index 93ed7d1acd..0944b183e1 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.h index 4149c93d9d..9c923ff107 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Time.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TimedStat.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/TimedStat.h index db0e07495b..7eefafb021 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TimedStat.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TimedStat.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.cpp index 215e1664af..d76c3419d0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.h index bedab6ad4b..a2a7d2b80a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TlDowncastHelper.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/TlDowncastHelper.h index 3f0c09a1cf..ab368f1967 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TlDowncastHelper.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TlDowncastHelper.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TlStorerToString.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/TlStorerToString.h index db246135bf..7b4873132d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TlStorerToString.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TlStorerToString.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -49,8 +49,8 @@ class TlStorerToString { public: TlStorerToString() = default; - TlStorerToString(const TlStorerToString &other) = delete; - TlStorerToString &operator=(const TlStorerToString &other) = delete; + TlStorerToString(const TlStorerToString &) = delete; + TlStorerToString &operator=(const TlStorerToString &) = delete; void store_field(const char *name, bool value) { store_field_begin(name); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.cpp index df7080b68d..0877d2f7dd 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.h index 686003df3b..dc09701cd8 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.cpp index 44d9a420f7..2bca5d0e33 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.h index 2a84fec2a1..d17c9ae12e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsList.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsList.h index 8302a6d500..b39a2c6616 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsList.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsList.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.cpp index 0dba99de8b..dced436044 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.h index 7ef9f2c4b9..088bf5cc9b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/UInt.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/UInt.h index 03714d7a4f..9b682a39eb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/UInt.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/UInt.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -20,7 +20,7 @@ struct UInt { return Slice(raw, size / 8); } - MutableSlice as_slice() { + MutableSlice as_mutable_slice() { return MutableSlice(raw, size / 8); } @@ -76,8 +76,8 @@ Slice as_slice(const UInt<size> &value) { } template <size_t size> -MutableSlice as_slice(UInt<size> &value) { - return value.as_slice(); +MutableSlice as_mutable_slice(UInt<size> &value) { + return value.as_mutable_slice(); } template <size_t size> diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/Variant.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/Variant.h index 9d064265fb..00a74af7a6 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/Variant.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/Variant.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/VectorQueue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/VectorQueue.h index c67a440caf..05cc5facca 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/VectorQueue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/VectorQueue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashMap.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashMap.h index 2b34bebaa1..86b70183a8 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashMap.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashMap.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashSet.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashSet.h index 5fddc0903d..fdc6bd2464 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashSet.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashSet.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeVector.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeVector.h index 40ffd41c6b..eb6590c70a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeVector.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeVector.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/algorithm.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/algorithm.h index 0c3702d8c7..00aae8f640 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/algorithm.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/algorithm.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/as.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/as.h index e73c4a1b3b..5fd4faef0b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/as.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/as.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -21,17 +21,17 @@ class As { explicit As(void *ptr) : ptr_(ptr) { } - As(const As &new_value) = delete; + As(const As &) = delete; As &operator=(const As &) = delete; As(As &&) = default; - As &operator=(As &&new_value) &&noexcept { - std::memcpy(ptr_, new_value.ptr_, sizeof(T)); + As &operator=(As &&other) && noexcept { + std::memcpy(ptr_, other.ptr_, sizeof(T)); return *this; } ~As() = default; - As &operator=(const T &new_value) && { - std::memcpy(ptr_, &new_value, sizeof(T)); + As &operator=(const T &other) && { + std::memcpy(ptr_, &other, sizeof(T)); return *this; } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.cpp index 2e06a21b86..4a29cc3ab6 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.h index 4b7449aa65..538b9943d2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/base64.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/benchmark.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/benchmark.h index 65a03cb7a3..7394553400 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/benchmark.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/benchmark.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/bits.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/bits.h index 69bd7ef8c9..7035e28880 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/bits.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/bits.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.cpp index f767e23ae4..eca384d0a2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.h index 798ceb9d50..c9368f8cda 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -117,8 +117,8 @@ class BufferSlice { : buffer_(std::move(buffer_ptr)), begin_(begin), end_(end) { debug_track(); } - BufferSlice(const BufferSlice &other) = delete; - BufferSlice &operator=(const BufferSlice &other) = delete; + BufferSlice(const BufferSlice &) = delete; + BufferSlice &operator=(const BufferSlice &) = delete; BufferSlice(BufferSlice &&other) noexcept : BufferSlice(std::move(other.buffer_), other.begin_, other.end_) { debug_untrack(); // yes, debug_untrack } @@ -141,7 +141,7 @@ class BufferSlice { } explicit BufferSlice(Slice slice) : BufferSlice(slice.size()) { - as_slice().copy_from(slice); + as_mutable_slice().copy_from(slice); } BufferSlice(const char *ptr, size_t size) : BufferSlice(Slice(ptr, size)) { @@ -183,7 +183,7 @@ class BufferSlice { return as_slice(); } - MutableSlice as_slice() { + MutableSlice as_mutable_slice() { if (is_null()) { return MutableSlice(); } @@ -230,7 +230,7 @@ class BufferSlice { // like in std::string char *data() { - return as_slice().data(); + return as_mutable_slice().data(); } const char *data() const { return as_slice().data(); @@ -305,7 +305,7 @@ class BufferWriter { } BufferWriter(Slice slice, size_t prepend, size_t append) : BufferWriter(BufferAllocator::create_writer(slice.size(), prepend, append)) { - as_slice().copy_from(slice); + as_mutable_slice().copy_from(slice); } explicit BufferWriter(BufferWriterPtr buffer_ptr) : buffer_(std::move(buffer_ptr)) { } @@ -325,7 +325,7 @@ class BufferWriter { } return buffer_->end_.load(std::memory_order_relaxed) - buffer_->begin_; } - MutableSlice as_slice() { + MutableSlice as_mutable_slice() { auto end = buffer_->end_.load(std::memory_order_relaxed); return MutableSlice(buffer_->data_ + buffer_->begin_, buffer_->data_ + end); } @@ -657,7 +657,7 @@ class ChainBufferReader { } else { auto save_size = size(); res = BufferSlice{save_size}; - advance(save_size, res.as_slice()); + advance(save_size, res.as_mutable_slice()); } *this = ChainBufferReader(); return res; @@ -828,11 +828,9 @@ class BufferBuilder { inline Slice as_slice(const BufferSlice &value) { return value.as_slice(); } -inline MutableSlice as_slice(BufferSlice &value) { - return value.as_slice(); -} + inline MutableSlice as_mutable_slice(BufferSlice &value) { - return value.as_slice(); + return value.as_mutable_slice(); } } // namespace td diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/check.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/check.cpp index 3651452e52..18aa3bd17c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/check.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/check.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/check.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/check.h index e6fba40c6f..38769f263a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/check.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/check.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/common.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/common.h index 5bf9357f8a..4a13e03b24 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/common.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/common.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.cpp index 4fcda63e40..77c8993ead 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -13,7 +13,6 @@ #include "td/utils/Destructor.h" #include "td/utils/logging.h" #include "td/utils/misc.h" -#include "td/utils/port/RwMutex.h" #include "td/utils/port/thread_local.h" #include "td/utils/Random.h" #include "td/utils/ScopeGuard.h" @@ -319,10 +318,10 @@ class Evp { ctx_ = EVP_CIPHER_CTX_new(); LOG_IF(FATAL, ctx_ == nullptr); } - Evp(const Evp &from) = delete; - Evp &operator=(const Evp &from) = delete; - Evp(Evp &&from) = delete; - Evp &operator=(Evp &&from) = delete; + Evp(const Evp &) = delete; + Evp &operator=(const Evp &) = delete; + Evp(Evp &&) = delete; + Evp &operator=(Evp &&) = delete; ~Evp() { CHECK(ctx_ != nullptr); EVP_CIPHER_CTX_free(ctx_); @@ -436,8 +435,8 @@ struct AesState::Impl { }; AesState::AesState() = default; -AesState::AesState(AesState &&from) noexcept = default; -AesState &AesState::operator=(AesState &&from) noexcept = default; +AesState::AesState(AesState &&) noexcept = default; +AesState &AesState::operator=(AesState &&) noexcept = default; AesState::~AesState() = default; void AesState::init(Slice key, bool encrypt) { @@ -555,8 +554,8 @@ class AesIgeStateImpl { }; AesIgeState::AesIgeState() = default; -AesIgeState::AesIgeState(AesIgeState &&from) noexcept = default; -AesIgeState &AesIgeState::operator=(AesIgeState &&from) noexcept = default; +AesIgeState::AesIgeState(AesIgeState &&) noexcept = default; +AesIgeState &AesIgeState::operator=(AesIgeState &&) noexcept = default; AesIgeState::~AesIgeState() = default; void AesIgeState::init(Slice key, Slice iv, bool encrypt) { @@ -620,8 +619,8 @@ AesCbcState::AesCbcState(Slice key256, Slice iv128) : raw_{SecureString(key256), CHECK(raw_.iv.size() == 16); } -AesCbcState::AesCbcState(AesCbcState &&from) noexcept = default; -AesCbcState &AesCbcState::operator=(AesCbcState &&from) noexcept = default; +AesCbcState::AesCbcState(AesCbcState &&) noexcept = default; +AesCbcState &AesCbcState::operator=(AesCbcState &&) noexcept = default; AesCbcState::~AesCbcState() = default; void AesCbcState::encrypt(Slice from, MutableSlice to) { @@ -674,8 +673,8 @@ struct AesCtrState::Impl { }; AesCtrState::AesCtrState() = default; -AesCtrState::AesCtrState(AesCtrState &&from) noexcept = default; -AesCtrState &AesCtrState::operator=(AesCtrState &&from) noexcept = default; +AesCtrState::AesCtrState(AesCtrState &&) noexcept = default; +AesCtrState &AesCtrState::operator=(AesCtrState &&) noexcept = default; AesCtrState::~AesCtrState() = default; void AesCtrState::init(Slice key, Slice iv) { @@ -828,10 +827,10 @@ class Sha256State::Impl { ~Impl() = default; #endif - Impl(const Impl &from) = delete; - Impl &operator=(const Impl &from) = delete; - Impl(Impl &&from) = delete; - Impl &operator=(Impl &&from) = delete; + Impl(const Impl &) = delete; + Impl &operator=(const Impl &) = delete; + Impl(Impl &&) = delete; + Impl &operator=(Impl &&) = delete; }; Sha256State::Sha256State() = default; @@ -1043,7 +1042,7 @@ Result<BufferSlice> rsa_encrypt_pkcs1_oaep(Slice public_key, Slice data) { int outlen = RSA_size(rsa); BufferSlice res(outlen); if (RSA_public_encrypt(narrow_cast<int>(data.size()), const_cast<unsigned char *>(data.ubegin()), - res.as_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING) != outlen) { + res.as_mutable_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING) != outlen) { #else EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(pkey, nullptr); if (!ctx) { @@ -1065,7 +1064,7 @@ Result<BufferSlice> rsa_encrypt_pkcs1_oaep(Slice public_key, Slice data) { return Status::Error("Cannot calculate encrypted length"); } BufferSlice res(outlen); - if (EVP_PKEY_encrypt(ctx, res.as_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { + if (EVP_PKEY_encrypt(ctx, res.as_mutable_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { #endif return Status::Error("Cannot encrypt"); } @@ -1095,7 +1094,7 @@ Result<BufferSlice> rsa_decrypt_pkcs1_oaep(Slice private_key, Slice data) { size_t outlen = RSA_size(rsa); BufferSlice res(outlen); auto inlen = RSA_private_decrypt(narrow_cast<int>(data.size()), const_cast<unsigned char *>(data.ubegin()), - res.as_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING); + res.as_mutable_slice().ubegin(), rsa, RSA_PKCS1_OAEP_PADDING); if (inlen == -1) { return Status::Error("Cannot decrypt"); } @@ -1121,7 +1120,7 @@ Result<BufferSlice> rsa_decrypt_pkcs1_oaep(Slice private_key, Slice data) { return Status::Error("Cannot calculate decrypted length"); } BufferSlice res(outlen); - if (EVP_PKEY_decrypt(ctx, res.as_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { + if (EVP_PKEY_decrypt(ctx, res.as_mutable_slice().ubegin(), &outlen, data.ubegin(), data.size()) <= 0) { return Status::Error("Cannot decrypt"); } #endif diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.h index d4c2558035..6e1745c441 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -24,8 +24,8 @@ int pq_factorize(Slice pq_str, string *p_str, string *q_str); class AesState { public: AesState(); - AesState(const AesState &from) = delete; - AesState &operator=(const AesState &from) = delete; + AesState(const AesState &) = delete; + AesState &operator=(const AesState &) = delete; AesState(AesState &&from) noexcept; AesState &operator=(AesState &&from) noexcept; ~AesState(); @@ -49,8 +49,8 @@ class AesIgeStateImpl; class AesIgeState { public: AesIgeState(); - AesIgeState(const AesIgeState &from) = delete; - AesIgeState &operator=(const AesIgeState &from) = delete; + AesIgeState(const AesIgeState &) = delete; + AesIgeState &operator=(const AesIgeState &) = delete; AesIgeState(AesIgeState &&from) noexcept; AesIgeState &operator=(AesIgeState &&from) noexcept; ~AesIgeState(); @@ -71,8 +71,8 @@ void aes_cbc_decrypt(Slice aes_key, MutableSlice aes_iv, Slice from, MutableSlic class AesCtrState { public: AesCtrState(); - AesCtrState(const AesCtrState &from) = delete; - AesCtrState &operator=(const AesCtrState &from) = delete; + AesCtrState(const AesCtrState &) = delete; + AesCtrState &operator=(const AesCtrState &) = delete; AesCtrState(AesCtrState &&from) noexcept; AesCtrState &operator=(AesCtrState &&from) noexcept; ~AesCtrState(); @@ -91,8 +91,8 @@ class AesCtrState { class AesCbcState { public: AesCbcState(Slice key256, Slice iv128); - AesCbcState(const AesCbcState &from) = delete; - AesCbcState &operator=(const AesCbcState &from) = delete; + AesCbcState(const AesCbcState &) = delete; + AesCbcState &operator=(const AesCbcState &) = delete; AesCbcState(AesCbcState &&from) noexcept; AesCbcState &operator=(AesCbcState &&from) noexcept; ~AesCbcState(); @@ -131,8 +131,8 @@ string sha512(Slice data) TD_WARN_UNUSED_RESULT; class Sha256State { public: Sha256State(); - Sha256State(const Sha256State &other) = delete; - Sha256State &operator=(const Sha256State &other) = delete; + Sha256State(const Sha256State &) = delete; + Sha256State &operator=(const Sha256State &) = delete; Sha256State(Sha256State &&other) noexcept; Sha256State &operator=(Sha256State &&other) noexcept; ~Sha256State(); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.cpp index c5f47d8ac9..c3e2514876 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -12,194 +12,96 @@ namespace td { -bool is_emoji(Slice str) { - constexpr size_t MAX_EMOJI_LENGTH = 35; +static constexpr size_t MAX_EMOJI_LENGTH = 28; + +static bool is_emoji_element(Slice str) { static const FlatHashSet<Slice, SliceHash> emojis = [max_emoji_length = MAX_EMOJI_LENGTH] { #if TD_HAVE_ZLIB Slice packed_emojis( - "eJyNnety27i2rV8lVfvf-XXul7frVmfZ6cS6kJJskrLj7tUUaYmOI1uObcUEWLUfJecBdledFzgaJIfJiUkyqyqAJ4wxJzE_QABF2fGPs-" - "jdj7PVux_TzbFsjyU7lttj2R3L_t2PC3Ms9t2PYHEsy3c_wg_H8vuxfDyWT8dydizjY5kcy_RYZsfiHYt_LPNjKd79iI5foz-P5Rg_" - "OsaPjjGjY8zV-2P5x7EcfVfH-Ktj_-rhWI7XXX07lu_HctReHjWXx-tdHq93efPux9XxmldHn6tj3Kuj39VxXFcX7358Pn79fH4ssI_j_" - "3y89u0xt9vLdz--HMf1Zfnu7-tf3h-r36bH6mSCykPlo5qjWqCC7uQc1QWqAFWIKjpWH35FVVpfUT2g2qN6RPUN1ROqF1QHVN-P1e8zVLja2S-" - "oEOVshOo3VBjV2T9QnaA6RfUB1e-oPqL6hOoM1RgVRn-GPM4Q-ayMjDzOkMcZ8jhDHmfI4wx5nCGPM-RxhtEfZ_" - "1YXaK6QvUZ1TWqP1B9QXWHClme7VDdo0K-Z8j3DPmeId-zZ1TI9wz5niHfs1dUOSqDyqIqjtUY6Y-R_hjpj5H-GOmPkf4Y6Y-R_hjpj5H-" - "GOmPkf4Y6Y-R_hjpj5H-GOmPkf4Y6Y-R_hjpj5H-GOmPkf4Y6Y-R_hjpj5H-GOmPkf4Y6Y-R_hjpj_" - "9E9U9Uf6GKUa1RJahSVDeoNqi2qDJUt6iAbgx0Y6AbA90Y6MZANwa6MdCNgW6MpTIGvzH4jcFvDH5j8BuD3xjoxkA3AboJ0E2AbgJ0E6CbAN0E" - "6CZANwG6CdBNgG4CdBOgmwDdBOgmQDcBugnQTYBuAnQTpD9B-hOkP0H6E6Q_QfoTpD9B-hOkP0H6E6Q_QfoTpD9B-hOkP0H6E6Q_QfoTpD9B-" - "hOkP0H6E6Q_QfoTpD9B-hOkP0H6E6Q_wfKZgMEEDKZgMAWDKRhMwWAKBlMwmILBFAymYDAFgykYTJHvFPlOke8U-U6R7xT5TpHvFPlOke8U-" - "U6R7xT5TpHvFPlOke8U-U6R7xT5TpHvFPlOke8U-" - "U6R4BQZTZHRFBlNkdEUGU2R0RQZTZHRDBnNkNEMGc2Q0QwZzZDRDBnNkNEMGc2Q0QwZzTCrM8zqDLM6w6zOkOUMWc6Q5QxZzpDlDC-" - "IGV4QM7wgZnhBzPCCmOEFMcMLYoYXxAwviBleEDO8IGZ4QcxAaAZCMxCagdAMhGYgNAOhGQjNQGgGQjMQmoHQDIRmIDQDoRkIzUBohhUxw4qYY" - "UXMAGyGFTHDiphhRczAbwZ-M_Cbgd8M_GbgNwM_D-" - "g8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8" - "UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9Q8UPNAzQM1D9S8khpWnQ90PladD34--Png54OfD34--" - "Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--" - "Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--Png54OfD34--M3Bbw5-c_Cbg98c_ObgNwe_" - "OfjNwW8OfnPwm4PfHPzm4DcHvzn4zcFvDn5z8JuD3xz85uA3B785-M3Bbw5-c_Cbg98c_ObgNwe_" - "OfjNwW8OfnPwm4PfHPzm4DcHvzn4zcFvDn5z8JuD3xz85uA3B785-M3Bbw5-c_Cbg98c_ObgNwe_" - "OfjNwW8OfnPwm4PfHPzmoLYAtQWoLUBtAWoLUFuA2gLUFqC2ALUFqC1AbQFqC1BbgNoC1BagtgC1BagtQG0BagtQW4DaAtQWoLYAtQWoLUBtAW" - "oLUFuA2gLUFqC2ALUFqC1AbQFqC1BbgNoC1BagtgC1BagtQG0BagtQW4DaAtQWoLYAtQWoLUBtAWoLUFuA2gLUFqC2ALUFqC1AbQFqC1BbYNUt" - "kf4S6S-R_hLpL5H5EpkvkfkSmS-R-RKZL5H5EpkvkfkSmS-R-RKZL5H5EpkvkfkSmS-R-RKZL5H5EpkvkfkSmS-R-RKZLzG-c1zjHNc4h-" - "QCw73AcC8w3Au8SC4w3QGmO8B0B5juANMdYLoDTHeA6Q4w3QGmO8B0B5juAPkGyDdAvgHyDTDdAZIOkHSApAMkHSDpAAMKMKAASQdIOkDSAZIO" - "kHSApAMkHSDpAEkHSDpA0gGSDpB0gIwCJB0g6QBJB5juANMdYLoDTHeA6Q4w3QGmO8B0B5juANMdYLoDTHeA6Q4w3QGmO8B0B5juANMdAGcAfg" - "H4BeAXgF8AfiH4heAXgl8IfiH4heAXgl8IfiH4heAXgl8IfiH4heAXgl8IfhHiRYgXIV6EeBHiRYgXIV6EeBHiRYgXIV6EeBHiRYgXIV5UxsN8" - "RJiPCPMRYT4izEeE-YgwHxHmI8J8RJiPCPMRYT4izEeE-YgwHxHmI8J8RJiPCPMRYT4izEeE-YgwHxHmI8J8RJiPCPMRYT4izEeE-" - "YgwHxHmI8J8RJiPCPMRYT4izEeE-YgwHxHmI8J8RJiPCPMRYT4izEeE-YgwHxHmYwV-K_Bbgd8K_FbgtwK_" - "FQitgGQFJCsgWQHECiBWALFC0iskvULSKyS9wuhXGP0KQ1thaCsMbYWhrTC0FYa2wtBWGNoKQ7sGq2uwugara7C6BqtrsLoGq2uwugara7C6Bq" - "trXO0aXGIMN8aExpjQGBMaY_" - "QxRh9j9DEmNMaExsgjRh4x8ogxoTEmNMaExpjQGLnFyC1GbjFyizHIGIOMMcgYg4wxyBiDjDHIGIOMMcgYg4wxyBiDjIEkxoTGmNAYExqXA8eE" - "xpjQGBMag1oMajGoxaAWg1oMajGoxQAWYy5jzGWMuVxjLteYyzXmco25XGMu15jLNV4Ga7wM1ngZrPEyWONlsAa1NaitQW0NamtQW4PaGtTWoL" - "YGtTWorUFtDWprUFuD2hrU1qC2BrU1qK1BbQ1qa1Bbg9oa1Nagtga1NaitQW0NamtQW4PaGtTWoLYGtTWorUFtDWprUFuD2hrU1qC2BrU1qK1B" - "bQ1qa1Bbg9oa1NZYa2ugWwPdGujWQJcAXQJ0CdAlQJcAXQJ0CbaRBPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_" - "BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_BPwS8EvALwG_" - "BPwS8EvALwG_BPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_" - "FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_FPxS8EvBLwW_" - "FPw2iLdBvA3ibRBvg3gbxNsg3gbxNoi3QbwN4m0Qb4N4W0zAFhOwxQRsMQFbTMAWE7DFBGwxAVtMwBZ0t6C7Bd0t6G5Bdwu6W9Ddgu4WdLeguw" - "XdLehuQXcLulvQ3YLuFnS3oLsF3S3obkF3C7pb0N2C7hZ0t6C7Bd0t6G5Bdwu6W9Ddgu4WNLagsQWNLWhsQWMLGlvQ2ILGFjS2oLEFjS1obEsa" - "oLsF2AxcMnDJwCUDlwxcMnDJsOAyLLgMSDIgyYAkA5IMSDIgyYAkA5IMSDIgyYAkA5IM6WdIP0P6GdLPkH6G9DOknyH9DOlnyC1Dbhlyy5Bbht" - "wy5JYhtwy5ZS_v_n1z_PcfL9N3_353_Afjxy85Smn--jtKab7_" - "J0plHlBK82SBUplLlMo8R6nMC5TKDFAqM0SpzA1KZW5RSvPsBqU0p2WpzC8olXmHUplfUSrzHqUyH1Aq8wWlMg8olfkdpTSP70WPpTTPtyiVma" - "FU5hNKaV78glKZryiVmaOU5vHu_Vgq81eUyhyhVOZvKJX5HqUyJyiV6aFUZoBSmVcolfkHSmX-E6Uy_" - "0KpzASlMrcolXmHUplfUSrzBaUyDyiV-R2lNI-308dSmSOUyrxGqcw_" - "UCrzL5TKXKNUZoJSmTcolfmKUpkWpTSPt8THUpkLlMpcolTmOUplXqBUZohSmSuUyrxEqcw_" - "UCozRanMHUpl3qOU5uoDSmWWpTI9lMqco1TmBqUydyiVeY9SmY8olfmMUpkvKJV5QCnNyxFKZX5AqczfUSrzDKUyxyiVWZbK9FEqc4FSmecolX" - "mFUpl_olTmHqUyH1FK8-o9SmWeolTmXyiVGaOU5uc_UUrzeGt5LJX5DaU0b_-BUpknKJV5igLz__" - "6yQ6lMg1KaHy9QKjNEgfn39T92ZVU37suqbtiyqhtFWVWND6OyqhvPZVU1zv4sq7oRl1XdWJdV3UjKqm6kZVU3bsqqbmzKqm5sy6puZGVVN27L" - "qm48lVXVGJuyqhqT87KqGxdlVTfCsqobUVnVjVVZ1Y3PZVU3rsuqakw_" - "lVXdOCurujEuq7oxKau6sSirurEsq7pxXlZ146Ks6kZQVnUjLKu6EZVV3ViVVd24LKu6cVVWdeNzWdWN67KqG_uyqhvfyqpuPJdV1ZiVnx_" - "Ui8L7tayqxtyUVdVY_" - "l5WdeNjWdWNr2VVN3ZlVTf2ZVU3Hsuqbnwrq7rxVFZ147ms6sZLWdWNQ1lVjfPTsqobH8uqbnwqq7pxVlZ1Y1xWdWNWVnVjXVZ146as6sZ9WdW" - "Nh7KqG3lZVY2LUVnVjd_Kqm68L6u64ZVV3fDLqm7My6puXJZV3bgqq7rxuazqxp9lVTf-" - "Kqu6cVNWdeNrWdWNfVnVje9lVTVWn8qqbozLqm5MyqpuVFXd-KOs6safZVU3_llWdeOvsqobcVnVjXVZ1Y1NWdWNXVnVjX1ZofFvP377692_" - "HS18_U9lVTf-c1nVjf9SVnXjv5ZV3fhvZVU3_ntZ1Y3_UVZ143-WVd34X2VVN_53WdWN_" - "1NWdePv69PkWG5obGhsaWQ0bmnc0bin8UDjkcYTjWcaLzQONL7TyGkYGniBn6Zo0EhpbGhsaWQ0bml8oXFH4yuNexoPNPY0Hmk80Xim8ULjQOO" - "VRk7D0igHf8PB3xDvDQd_wzHfcMw3HPMNxwxjR-OexgONPY1HGt9oPNP4TuOVRk7D0LA0yjFvSHXDgW2IbsPxbDiMDa--ofuWKW-" - "Z8pYBtwy4ZaZbDnVLvFvi3XLwGWlkHEbGYWQcRsZhZAx4y2Hcctnckvwtx3PLKbjlwG45sFte9Jbkb3mtW5K_" - "JfBbrpbb9tVfaBxofKeR0yjJf2E6X3iJL7zEFwb8wjhfGOeOeO-Y1x3zuuOY7xjwjgHvCOqOY77jJe445jte6ysDfmWcr3T_" - "ytx31OzIcEeGOzLc0X3HYeza7s80chqWRrmi7jmV95zKe-Z-z0vck-E9A94znXumc090MF5plNd64CUeGPmBVB-Y4ANXywMzfWCmD7z6A8k_" - "MOUHpvxAdA_M_YFT8MAxP3DMDxzzA8f8wDE_EBQMQ-Mti5LYnunsmc6eWeyZxZ5Z7Mlwz8HvOdQ9h7rnCPccz57XemSm33jRb7zWN17rG6_" - "1jcS-kdg3XvRbO86exjONFxoHGjmNMvcnXv2ZV39mFs90f-bgn-n-" - "Qi8YKY0bGhsaWxq3NL7QuKPxlcaOxj2NBxp7Go80nmm80DjQeKVhaFgaJfkDB3_gmA8c84HkDxzzgWM-" - "cKgHDvXAoR441AOHeuBQDxzqgSM8cIQHwjxwYN85sO-8-ndG_s7I35nyd-b1ne6vdH9lXq-" - "cglcGfCX5VwZ85eTmzD3nJQwztYxjmUXBaxUcYVGnM338f3_8mh7LP49lfSx3dbtwO_fH8texPHZ1Ph_LbS0q8Oin_GGo6mtefzX1V1t_" - "LfAkodKVX_P6q6m_2vprgR8NrXTl17z-auqvtv4K3ada96nWfap1n2rdp1p3VuvOat1ZrTurdWe1blzrxrVuXOvGtW5c_4DX5B_1T3-" - "VRk7D0LA0SnIj_qjYiD8uNuKPjI34Y2Mjin-j-DeKf6P4N4p_o_g9xe8pfk_xe4rfU3xK8SnFpxSfUnxK8UeKP1L8keKPFH-k-BPFnyj-" - "RPEnij9RfEbxGcVnFJ9RfFaLPaLziM4jOo_oPKLziM4jOo_oPKLziM47ofiE4hOKTyg-oZjoPKLziM4jOo_ovA8Uf6D4A8UfKP5A8e8U_" - "07x7xT_TvHvFHNSPE6Kx0nxOCkeJ8XjpHicFI-" - "T4nFSPE6Kx0nxOCkeJ8XjpHhvkzKmeEzxmOIxxXyleBOKJxRPKJ5QPKF4SvGU4inFU4qnFM8onlE8o3hG8YzihOKE4oTihOKE4pTilOKU4pTil" - "OIbim8ovqH4huIbijcUbyjeULyheENxRnFGcUZxRnFG8S3FtxTfUnxL8S3FXyj-QvEXir9Q_IXiO4rvKL6j-" - "I7iO4p3FO8o3lG8o3hH8T3F9xTfU3xP8T3FDxQ_UPxA8QPFDxTvKd5TvKd4T_Ge4keKHyl-pPiR4keKv1H8jeJvFH-j-BvFTxQ_" - "UfxE8RPFTxQ_U_xM8TPFzxQ_U_xC8QvFLxS_UPxCcU5xTnFOcU5xXov9X2txaeQ0DA1LoxRzf_a5P_vcn33uzz73Z5_7s8_92ef-7HN_9rk_-" - "zxhfZ6wPk9YnyeszxPW52buczP3uZn73Mx9buY-N3Ofm7nPzdznZu5zM_e5I_" - "nckXzuSD53JJ87ku9R7FHsUexR7FG8pXhL8ZbiLcXbWrzkEl1yiS65RJdcoksu0SWX6JJLdMkluuQSXXKJLr9T_J3i7xR_p_" - "h7LT6f1eLSyGkYGpZGKV5SvKR4SfGS4iXF5xSfU3xO8TnF57U45NoIuTZCro2QayPk2gi5NkKujZBrI-" - "TaCLk2Qq6NkGsj5NoIuTZCro2QJ2zIEzbkCRvyhA15woY8YUOesCFP2JAnbMgTNuQJG_KEDXnChjxhQ56wIU_" - "YkCdsyBM25Akb8oQNuZ5DrueQ6znkeg65nqO_" - "anFp5DQMDUujFHOJRlyiEZdoxCUacYlGXKIRl2jEJRpxiUZcohF30Yi7aMRdNOIuGnEXXf1Si0sjp2FoWBqlmJOy4qSsOCkrTsqKkxJTHFMcUx" - "xTHL-" - "JyTkm55icY3KOyTkOKA4oDigOKA4oDikOKQ4pDikOKY4ojiiOKI4ojiheUbyieEXxiuIVxZcUX1J8SfElxZcUX1F8RfEVxVcUX1H8meLPFH-m-" - "DPFnym-pvia4muKrym-ppg3gTFvAmPeBMa8CYx5ExjvKN5RvKN4R_GOYt7JxLyTiXknE_" - "NOJuadTMw7mZh3MjHvZGLeycS8k4l5JxPzTibmnUzMO5mYdzIxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4MxX4Mx" - "72Ri3snEvJOJeScT804m5p1MzDuZmHcyMe9kYt7JxAeKDxQfKD5QfKDYUGwoNhQbig3FlmJLsaXYUmxr8ZoJrpngmgmumeCaCSbknJBzQs4JOS" - "fknJBzQs4JOSfknJBzQnQJ0SVElxBdQnQJ0SVElxBdQnQJ0SWvFL9S_" - "ErxK8WvtTjlaZXytEp5WqU8rVKeVilPq5SnVcrTKuVplfK0SrmLptxFU-6iKXfRlLtoyruvlHdfKe--" - "Ut59pbz7Sn2KfYp9in2KfYrnFM8pnlM8p3hO8YLiBcULihcULyjmPVLKe6SU90gp75FS3iOlvEdKeY-U8h4p5T1Synuk9ILiC4ovKL6g-" - "IJiHkApD6CUB1DKAyjlAZTyAEp5AKU8gFIeQCkPoJQHUMoDKOUBlPIASnkApTyAUh5AKQ-" - "glAdQygMo5QGU8gBKeQClPIBSHkApD6CUB1DKAyjlAZTyAMr4PiXj-5SM71Myvk_J-D4l4yO4jI_gMj6Cy_" - "gILuMjuIw3rhlvXDPeuGa8cc1445rtKN5RvKN4R_GOYh5AGQ-" - "gjAdQxgMo4wGU8QDKeABlPIAyHkAZD6CMB1DGAyjjAZTxAMp4AGU8gDIeQBkPoIwHUMYDKOPGmHFjzLgxZtwYM26MGTfGjBtjxo0x48aYcWPMu" - "D9n3J8z7s8Z9-eM-3PGXTTjLppxF824i2Zvb6Vvfvwy_nEVH-u_61_0rL-DHzpQ3yy_43_qV6u-v-tfJKWtv5W27Y5ureqI2x--4yr9F-u_" - "5kaLN73X3PT6d1xz03FNzKCYmL9bz-" - "Re3Qnq6Gx68iE3t7PpMUNubmfTY4fc3M6mpxhyczvlQhsgM6RRgj5OQxol6KM2pFGCPoZDGiXoI9qrwTuWnkxll-nvsv1db9fKe9d1PrSulVs-" - "5OZ2doy-y83t7Misy83t7M-6e1233TrXrOM9pOlfswNBOnF1rtmBIJ3wOtfsQJBOlJ1rdiCI0Mhl-NrfZfq7bH_X27VM77o2Q-taueVDbm5nx-" - "i73NzOjsy63NzO_qy713XbrXPNOt5Dmv41OxCkE1fnmh0I0gmvc80OBOlE2blmB4IITc-61l15f5ft73q7lu1d13ZoXSu3fMjN7eyg3-" - "XmdnZk1uXmdvZn3b2u226da9bxHtL0r9mBIJ24OtfsQJBOeJ1rdiBIJ8rONTsQRGh61rXuyvu7TH_" - "X27WK3nVdDK1r5ZYPubmdHUPscnM7O3h3ubmd_Vl3r-u2W-eadbyHNP1rdiBIJ67ONTsQpBNe55odCNKJsnPNDgQRmp51rbvy_" - "i7T31X9pIWY99Z35Jt5Idt0yTauTLyv3_Sk3OfUdQnV93f9rrjjXXX77XTH--iON9D1tzri9ofvuEr_xbqu-Xffm_" - "ZWj95UOt3yITe301kffW5up7t2etzcTmd597m5nTW2ISRdnU1PL5KuzqanF0lXZ9PTi6Srs-npRdLV2b2HdngPabr30J8E6cSl9tCfBOmEp_" - "bQnwTpRKn20J8EGQQ7tOSGNErwM7C967At-BnY3lXZFvwMbO8abQt-BlZpOk6p7i7T32X7u3qupajKrp5rKQKy6-1a3Q-jWj3d-3X3w6g-" - "N7ezg1Tvw6hONzvk5nZ2EO59GKXcNkNIujo7Jq3LrRvJZghJV2fHZHe5dSPpWgjd-_Xg87kO7yFN_178s-dzQ0H6qA1p-" - "vfinz2fGwrSR3RI078X9wTpXXmde_FAkEGwQ8txSNO_Fw8EGQQ7tFR7NR1vOLq7TH-X7e_" - "quZaamp79Wnf1XEvk1f2QtdXTvV93P2Ttc3M7O0j1PmTtdLNDbm5nB-Heh6zKbTOEpKuz46XQ5daNZDOEpKuzY7K73LqRdC2E7v168Llzh_" - "eQpn8v_tlz56EgfdSGNP178c-eOw8F6SM6pOnfi3uC9K68zr14IMgg2KHlOKTp34sHggyCHVqqvZqe_brngX53l-3v6rmWmpqeW2_" - "d1XMtkVf3hwetnu79uvvDgz43t7PjJdT74UGnmx1yczs7CPd-eKDcNkNIujo7ZqbLrRvJZghJV2fHZHe5dSPpWgjd-_Xg5ykd3kOa_r34Z5-" - "nDAXpozak6d-Lf_Z5ylCQPqJDmv69uCdI78rr3IsHggyCHVqOQ5r-vXggyCDYoaXaq-nZr3s-qOruMv1dPddSU9OzX-uunmuJvLo_FGv1dO_" - "X3R-K9bm5nR04ej8U63SzQ25uZwfh3g_FlNtmCElXZ8fMdLl1I9kMIenq7FjuXW7dSLoWQvd-3feZWB-ZIU3_" - "XjwQpBNX5148EKQTXudePBCkE2XnXjwQZBDs0JIb0vTvxQNBBsEOLcchTf9ePBBkEOzQUu3V9OzXuivv7zL9Xba7S01Nz36tu3quRTip1_" - "529V9rl78xonnJXyDpft7fqVEC8y8EcTVKYP-FIK5GCYp_IYir-TmMfgqD6ffnPZhwf6aDKerO-m-stdpvy6Jefj1deX-X6e-y_V1vw-" - "p4jOn8QlP_vLma_iU2EMTV9C-xgSCupn-JDQTpZDIIo5_CYPr9eQ8m3J_pYIq6s70MxUNcnU_PMtRdpr_L9ne9Davj6YwcTPfTmU5N_" - "3Y5EMTV9C-xgSCupn-JDQTpZDIIo5_CYPr9eQ8m3J_pYIq6s70MxbMpnU_PMtRdpr_L9ne9DavjTaccTPebzk5N_xIbCOJq-rfLgSCupn-" - "JDQTpZDIIo5_CYPr9eQ8m3J_pYIq6s70MxVtunU_PMtRdpr_L9ne9DavjXloOpvteulPTv8QGgria_iU2EMTV9G-XA0Fczc9h9FMYTL8_78GE-" - "zMdTFF3tpeheCeh8-lZhrrL9HfZ_q7m93rL7zW_rOt8z3R8z3Z87y1e3nzvteN7puN7tuN7b_FMRzzTMWbTEc90xLMd8WxHPNsxZtsRr-" - "iIV3TEKzriFXLM1e_vln8Lj-Z_VP9Vf9U6b5ntjssPLbPVUf8Z7dou_5I07byxyz_jTDtu2a1fGy7_" - "fDHtL43tv7bsVsxF67dty79zWdvlHxSk7Td2-" - "WezaLfiJPL3M2s0TZPJvn3n3Gm6ghpV03QEb8je2jW2pu38NmaNr2nHTvtGtmuUTfuLbPuvTtu53iJ12reyXSNu2r5s16ibthO_" - "QZ5L5LlCnkvkuUKeS-" - "S5Qp47yHMHee4gzx3kuYM8d5DnDvLcQZ47yHMHee4gzx3kuYM8d5DnDvLcQZ47yI1EbhRyI5EbhdxI5EYhNw5y4yA3DnLjIDcOcuMgNw5y4yA3" - "DnLjIDcOcuMgNw5y4yA3DnLjIDcOciuRW4XcSuRWIbcSuVXIrYPcOsitg9w6yK2D3DrIrYPcOsitg9w6yK2D3DrIrYPcOsitg9w6yK2DvJDIC4" - "W8kMgLhbyQyAuFvHCQFw7ywkFeOMgLB3nhIC8c5IWDvHCQFw7ywkFeOMgLB3nhIC8c5IWDvGgh3zS4NwL1psG8EYg3Dd6NQLtpYd20kG5aODct" - "lJsWxk0L4aaFb9NCt2lh27SQbVq4Ni1UmxamTQvRpoVn00KzaWORdxWtJpOVdxWtpiuoUam7Cn7nDZlzV9FqOz9WX-" - "Nz7ipa7RvZrlE6dxVN23912s71FqnTvpXtGrFzV9G0a9TOXUWrLX8ut0GeK-" - "S5RJ4r5LlEnivkuYM8d5DnDvLcQZ47yHMHee4gzx3kuYM8d5DnDvLcQZ47yHMHee4gzx3kuYPcSORGITcSuVHIjURuFHLjIDcOcuMgNw5y4yA3" - "DnLjIDcOcuMgNw5y4yA3DnLjIDcOcuMgNw5y4yC3ErlVyK1EbhVyK5Fbhdw6yK2D3DrIrYPcOsitg9w6yK2D3DrIrYPcOsitg9w6yK2D3DrIrY" - "PcOsgLibxQyAuJvFDIC4m8UMgLB3nhIC8c5IWDvHCQFw7ywkFeOMgLB3nhIC8c5IWDvHCQFw7ywkFeOMhbdxXlJ94VbpoVqLp13jLbHSVemq2O" - "Gmttl0hp541doqQdt-" - "ybxi7x0f7S2P5ry27FLHHRvm3sEhNtv7FLPLRbcRL5mXONxr2raH3n3Gm6ghqVe1fx9p03ZPKuot12PlKu8cm7inb7RrZrlPKuotX2nU-" - "zfed6NVp5V9Fq14jlXUWrXaOWdxXttvx8tUGeK-" - "S5RJ4r5LlEnivkuYM8d5DnDvLcQZ47yHMHee4gzx3kuYM8d5DnDvLcQZ47yHMHee4gzx3kuYPcSORGITcSuVHIjURuFHLjIDcOcuMgNw5y4yA3" - "DnLjIDcOcuMgNw5y4yA3DnLjIDcOcuMgNw5y4yC3ErlVyK1EbhVyK5Fbhdw6yK2D3DrIrYPcOsitg9w6yK2D3DrIrYPcOsitg9w6yK2D3DrIrY" - "PcOsgLibxQyAuJvFDIC4m8UMgLB3nhIC8c5IWDvHCQFw7ywkFeOMgLB3nhIC8c5IWDvHCQFw7ywkFeOMjf7irqP-EFQPjT6-0WcLW_" - "MZKtpjsX3rnrnQvv3PU2wtu43kZ4G9fbCm_relvhbV3vQngXrnchvAvh3XhWHz02jo0Te-o_" - "XDz9rXZqTNExapnsaE2ObCrByGm2BLmMkKsIuYyQqwhGRjAqgpERjIpgZQSrIlgZwaoIhYxQqAiFjFCICO8b7_" - "fC833j9V56SPatphKMnGZLkMsIuYqQywi5imBkBKMiGBnBqAhWRrAqgpURrIpQyAiFilDICJL9x8b7o_" - "D82Hh9lB6SfaupBCOn2RLkMkKuIuQyQq4iGBnBqAhGRjAqgpURrIpgZQSrIhQyQqEiFDKCZP9Jkmw1lWDkNFuCXEbIVYRcRshVBCMjGBXByAhG" - "RbAyglURrIxgVYRCRihUhEJGcEi2vMWe_9Y3En30O5Mz0GoqwchptgS5jJCrCLmMkKsIRkYwKoKREYyKYGUEqyJYGcGqCIWMUKgIhYwgZ-" - "Cs5e3OwFnL0ZkB7-7Nj6boGLVMdog5azeVYOQ0W4JcRshVhFxGyFUEIyMYFcHICEZFsDKCVRGsjGBVhEJGKFSEQkYQc-Z9bby_Cs-" - "vjddX4bFrPHbCY9d47KSHnK2dmq2dnK2dmq2dnK2dmq2dnK2dmq2dnK2dmq2dnK2dmq2dnK2dmq2dnK2dmq2dnK2dmq2dnK2dmq37xvteeN43X" - "vfSQ7K_V-zvJft7xf5esr9X7O8l-3vF_l6yv1fs7yX7e8X-XrK_V-zvJft7xf5esr9X7O8l-3vFft9474XnvvHaSw_Jfq_Y7yX7vWK_l-" - "z3iv1est8r9nvJfq_Y7yX7vWK_l-z3iv1est8r9nvJfq_Y7yX7vWL_3Hg_C8_nxutZekj2z4r9s2T_rNg_S_bPiv2zZP-s2D9L9s-K_bNk_" - "6zYP0v2z4r9s2T_rNg_S_bPiv2zZP_ssvd_" - "ffOmKTpGLZMdgn27qQQjp9kS5DJCriLkMkKuIhgZwagIRkYwKoKVEayKYGUEqyIUMkKhIhQygmQ_arxHwnPUeI2kh2Q_" - "UuxHkv1IsR9J9iPFfiTZjxT7kWQ_UuxHkv1IsR9J9iPFfiTZjxT7kWQ_UuxHkv1IsT9pvE-E50njdSI9JPsTxf5Esj9R7E8k-xPF_" - "kSyP1HsTyT7E8X-RLI_UexPJPsTxf5Esj9R7E8k-xPF_kSyP1HsTxvvU-F52nidSg_J_lSxP5XsTxX7U8n-VLE_lexPFftTyf5UsT-V7E8V-" - "1PJ_lSxP5XsTxX7U8n-VLE_lexPXfbVXzN-i9BuKsHIabYEuYyQqwi5jJCrCEZGMCqCkRGMimBlBKsiWBnBqgiFjFCoCIWM4JBseTvvh-u-" - "keir_cJ_" - "vPnRFB2jlskOMWftphKMnGZLkMsIuYqQywi5imBkBKMiGBnBqAhWRrAqgpURrIpQyAiFilDICGLOwmbXD8WuHza7fngiPSR7teuHctcP1a4fyl" - "0_VLt-KHf9UO36odz1Q7Xrh3LXD9WuH8pdP1S7fih3_VDt-qHc9UO164dy1w_Vrh82u34odv2w2fXDU-kh2atdP5S7fqh2_VDu-" - "qHa9UO564dq1w_lrh-qXT-Uu36odv1Q7vqh2vVDueuHatcP5a4fql0_lLt-qHb9sHl6SlN0jFomOyR79eQ6lE-uQ_" - "XkOpRPrkP15DqUT65D9eQ6lE-uQ_XkOpRPrkP15DqUT65D9eQ6lE-uQ_XkOpRPrkP15DqUT65D9eQ6HDfeY-E5brzG0kOyHyv2Y8l-" - "rNiPJfuxYj-W7MeK_ViyHyv2Y8l-rNiPJfuxYj-W7MeK_ViyHyv2Y8l-rNhPGu-J8Jw0XhPpIdlPFPuJZD9R7CeS_USxn0j2E8V-" - "ItlPFPuJZD9R7CeS_USxn0j2E8V-ItlPFPuJZD9x2Ud_" - "vXnTFB2jlskOwb7dVIKR02wJchkhVxFyGSFXEYyMYFQEIyMYFcHKCFZFsDKCVREKGaFQEQoZQbJ_bLwfhedj4_UoPST7R8X-UbJ_" - "VOwfJftHxf5Rsn9U7B8l-0fF_lGyf1TsHyX7R8X-UbJ_VOwfJftHxf5Rsn9U7Jv3BTRFx6hlskOyV-_" - "JWt8ZOc2WIJcRchUhlxFyFcHICEZFMDKCURGsjGBVBCsjWBWhkBEKFaGQEST7p8b7SXg-NV5P0kOyf1LsnyT7J8X-SbJ_" - "UuyfJPsnxf5Jsn9S7J8k-yfF_kmyf1LsnyT7J8X-SbJ_" - "UuyfJPsnl32cvHnTFB2jlskOwb7dVIKR02wJchkhVxFyGSFXEYyMYFQEIyMYFcHKCFZFsDKCVREKGaFQEQoZQbJv9pxY7Dlxs-fE36SHZK_" - "2nFjuObHac2K558Rqz4nlnhOrPSeWe06s9pxY7jmx2nNiuefEas-J5Z4Tqz0nlntOrPacWO45sdpz4ubTq1h8ehU3n17Fz9JDslefXrW-" - "M3KaLUEuI-QqQi4j5CqCkRGMimBkBKMiWBnBqghWRrAqQiEjFCpCISNI9i-N94vwfGm8XqSHZP-i2L9I9i-K_Ytk_6LYv0j2L4r9i2T_oti_" - "SPYviv2LZP-i2L9I9i-K_Ytk_6LYv0j2L4r9ofE-CM9D43WQHpL9QbE_SPYHxf4g2R8U-4Nkf1DsD5L9QbE_SPYHxf4g2R8U-" - "4Nkf1DsD5L9QbE_" - "SPYHxb7FQObfyl3m3cpZ5tvKVeZp5GwZNVtGzpZRs2XkbBk1W0bOllGzZeRsGTVbRs6WUbNl5GwZNVtGzpZRs2XkbBk1W0bOllGz1bq-" - "vHbruvKaVrK3ir2V7K1ibyV7q9hbyd4q9layt4q9leytYm8le6vYW8neKvZWsreKvZXsrcs-aU6IRJwQSXNCJC_SQ7BP1AmRyBMiUSdEIk-" - "IRJ0QiTwhEnVCJPKESNQJkcgTIlEnRCJPiESdEIk8IRJ1QiTyhEjUCZHIEyJRJ0TSnBCJOCGS5oRIDtJDslcnRCJPiESdEIk8IRJ1QiTyhEjUC" - "ZHIEyJRJ0QiT4hEnRCJPCESdUIk8oRI1AmRyBMiUSdEIk-" - "IRJ0QafPUmaboGLVMdgj27aYSjJxmS5DLCLmKkMsIuYpgZASjIhgZwagIVkawKoKVEayKUMgIhYpQyAiSffPUmaboGLVMdkj26qlz6zsjp9kS5" - "DJCriLkMkKuIhgZwagIRkYwKoKVEayKYGUEqyIUMkKhIhQygmQ_bbzFR_J1a9Qy2SHZTxX7qWQ_Veynkv1UsZ9K9lPFfirZTxX7qWQ_" - "Veynkv1UsZ9K9lPFfirZTxX7qWQ_VewXjfdCeC4ar4X0kOwXiv1Csl8o9gvJfqHYLyT7hWK_kOwXiv1Csl8o9gvJfqHYLyT7hWK_" - "kOwXiv1Csl8o9ueN97nwPG-8zqWHZH-u2J9L9ueK_blkf67Yn0v254r9uWR_rtifS_bniv25ZH-u2J9L9ueK_" - "blkf67Yn0v254r9ReN9ITwvGq8L6SHZXyj2F5L9hWJ_IdlfKPYXkv2FYn8h2V8o9heS_YVifyHZXyj2F5L9hWJ_" - "IdlfKPYXkv2FYh803oHwDBqvQHpI9oFiH0j2gWIfSPaBYh9I9oFiH0j2gWIfSPaBYh9I9oFiH0j2gWIfSPaBYh9I9oFiHzbeofAMG69Qekj2oW" - "IfSvahYh9K9qFiH0r2oWIfSvahYh9K9qFiH0r2oWIfSvahYh9K9qFiH0r2oWIfNd6R8Iwar0h6SPaRYh9J9pFiH0n2kWIfSfaRYh9J9pFiH0n2" - "kWIfSfaRYh9J9pFiH0n2kWIfSfaRYr9qvFfCc9V4raSHZL9S7FeS_UqxX0n2K8V-JdmvFPuVZL9S7FeS_UqxX0n2K8V-JdmvFPuVZL9S7FeS_" - "Uqxv2y8L4XnZeN1KT0k-0vF_lKyv1TsLyX7S8X-UrK_VOwvJftLxf5Ssr9U7C8l-0vF_lKyv1TsLyX7S8X-UrK_VOyvGu8r4XnVeF1JD8n-" - "SrG_kuyvFPsryf5Ksb-S7K8U-yvJ_kqxv5LsrxT7K8n-SrG_kuyvFPsryf5Ksb-S7K8U-8-N92fh-bnx-iw8rhuPa-" - "Fx3Xhctz34X9DvWvZ9y35o2c7_EV_7NO17p_3gtJ3_8Lzxzx3_3PHPHX_j-BvH3zj-xvG3jr91_K3jbx3_wvEvHP_C8S9a_" - "puW76blt2n5bNp6h_fG4b1xeG8c3huH98bhvXF4bxzeG4f3xuG9cXhvHN4bh_fG4b1xeG8c3huH98bhvXF4byRv_reFu5Z937IfWrbz_" - "wrWPpJ3u_3gtJ3_JK_xzx3_3PHPHX_j-BvH3zj-xvG3jr91_K3jbx3_wvEvHP_C8X_jzT8Ys1i_a_2FmKpVmptDu-" - "PYOnqXv2EdpaVZ9Rxb1e5U9v19ffah1clm-aOMwR8ts_KZfUDrdgVzWQ3sO-yk-XZ52ly9b5n1Zvhrqb8o_6vSX3m5i5uqN7grmz56g2-" - "Vjf9uLHiqRiXsetut_-PO9-_-P_-VKLY"); + "eJxtmlly40iWRbdCs_rrr56H3WVmzBHE4A6AxCCFqiodcBFOKShSComawqyWglpAl1lvoP0wcdPK2vrDnY-mC8e75_" + "kkRUzLdjEtu8WUbWIbYwuxbWPbxXZYTOuX2F4XU13GVi2m5mNsn2L7HNuX2JaxJbGlsWWx5bGZ2GxsRWw_FlMbP9s_xRbHb-" + "P4bRyzjWN2b2N7F1t8tovjd_Hn3T62-N7uLrbH2KL2LGrO4vvO4vvOLhfTeXzneXzmPI57Hp87j3mdrxfT1_j5dRUbccz_" + "a3z3Nnrbni2mq5jXVbX428VPb2P3Jovd-5TO0Fm6gq6kQ_d-Rbemq-kaujZ2H3-mO0Xf6PZ0B7pbuju673QPdEe6x9h9yul42_InOkZZ_" + "kL3ho6slu_" + "o3tN9oPtI94nuM90XuiVdQkf2S3wsGXl5GhkfS3ws8bHExxIfS3ws8bHEx5LsY9Vjd0Z3TveV7oLuj3RXdNd0uFzu6G7o8LvE7xK_S_wu7-" + "nwu8TvEr_LJ7pnuhe6V7ofsUuwn2A_wX6C_QT7CfYT7CfYT7CfYD_BfoL9BPsJ9hPsJ9hPsJ9gP8F-gv0E-wn2E-wn2E-wn2A_wX6C_" + "QT7CfYT7CfYT7Cf_Inuz3S_0jm6nm6g83SXdBu6kS7QbelAl4AuAV0CugR0CegS0CWgS0CXMFUS-CXwS-CXwC-BXwK_" + "BHQJ6FLQpaBLQZeCLgVdCroUdCnoUtCloEtBl4IuBV0KuhR0KehS0KWgS0GXgi7Ffor9FPsp9lPsp9hPsZ9iP8V-iv0U-yn2U-yn2E-xn2I_" + "xX6K_RT7KfZT7KfYT7GfYj_Ffor9FPsp9lPsp0yfFAYpDDIYZDDIYJDBIINBBoMMBhkMMhhkMMhgkOE3w2-G3wy_GX4z_" + "Gb4zfCb4TfDb4bfDL8ZfjP8ZvjN8JvhN8Nvht8Mvxl-M_" + "xmGMxwlOEow1GGowxHGY4yHGU4ynGU4yjHUY6jHEc5jnIc5TjKcZTjKMdRTlVzqppT1Zyq5rjMcZnjMsdljsucBZGzIHIWRM6CyFkQOQsiZ0Hk" + "LIicBZGzIHIWRM6CyCGUQyiHUA6hHEI5hHII5RDKIZRDKIdQDqEcQjmEcgjlEMohlDMjcmZEzozIAZYzI3JmRM6MyOGXwy-HXw6_HH45_" + "HL4GdAZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGag" + "ZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGagZqBmoGaiZEzVmnQWdZdZZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-" + "Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-Fn4WfhZ-" + "Fn4WfhZ-Fn4WfhZ-Fn4FfAr4FfAr4BfAb8CfgX8CvgV8CvgV8CvgF8BvwJ-BfwK-BXwK-BXwK-AXwG_An4F_" + "Ar4FfAr4FfAr4BfAb8CfgX8CvgV8CvgV8CvgF8BvwJ-BfwK-BXwK-BXwK-AXwG_An4F_" + "Ar4FfAr4FfAr4BfAb8CfgX8CvgV8CvgV8CvgF8BvwJqJdRKqJVQK6FWQq2EWgm1Emol1EqolVAroVZCrYRaCbUSaiXUSqiVUCuhVkKthFoJtRJ" + "qJdRKqJVQK6FWQq2EWgm1Emol1EqolVAroVZCrYRaCbUSaiXUSqiVUCuhVkKthFoJtRJqJdRKqJVQK6FWQq2EWgm1Emol1EqolVAroVZCrWTWV" + "divsF9hv8J-hfMK5xXOK5xXOK9wXuG8wnmF8wrnFc4rnFc4r3Be4bzCeYXzCucVziucVzivcF7hvMJ5RX4r3rHiHSska9Jdk-" + "6adNcskjXlril3Tblryl1T7ppy15S7ptw15a4pd025a8pd47fGb43fGr815a4xXWO6xnSN6RrTNQnVJFRjusZ0jeka0zWma0zXmK4xXWO6xnSN" + "6RrTNaZrHNWYrjFdY7qm3DXlril3Tblryl1T7ppy15S7ptw15a4pd025a8pdU-" + "6acteUu6bcNeWuwVnDr4ZfDb8afjX8Gvg18Gvg18CvgV8DvwZ-Dfwa-DXwa-DXwK-BXwO_Bn4N_" + "FrGaxmvZbyW8VrGaxmvZbyW8VrGaxmvZbyW8VrGaxmvZbz2NB71aKlHSz1a6tFSj5Z6tNSjpR4t9WipR0s9WurRUo-" + "WerTUo6UeLfVoqUdLPVrq0VKPlnq01KOlHi31aKlHSz1a6tFSj5Z6tNSjpR4t9WipR0s9WurRUo-" + "WerTUo6UeLfVoqUdLPVrq0VKPlnq01KOlHh38Ovh18Ovg18Gvg18HoQ4kHUg6kHSA6ADRAaLDdIfpDtMdpjuy78i-" + "I7WO1DpS60itI7WO1DpS60itI7ULWF3A6gJWF7C6gNUFrC5gdQGrC1hdwOoCVhe87QIujnQdBXUU1FFQR_" + "aO7B3ZOwrqKKjDh8OHw4ejoI6COgrqKKjDm8Obw5vDmyNJR5KOJB1JOpJ0JOlI0pGkI0lHko4kHUk6kDgK6iioo6DulDgFdRTUUVAHNQc1BzUH" + "NQc1BzUHNQcwRy0dtXTUsqeWPbXsqWVPLXtq2VPLnmXQswx6lkHPMuhZBj3Ueqj1UOuh1kOth1oPtR5qPdR6qPVQ66HWQ62HWg-" + "1Hmo91Hqo9VDrodZDrYdaD7Ueaj3Ueqj1UOuh1kOth1oPtR5qPdR6qPVQ66HWQ62HWg-" + "1Hmo91Hqo9VDrodZDrYdaD7WeudaDrgddD7oedAPoBtANoBtAN4BuAN3ANjLAb4DfAL8BfgP8BvgN8BvgN8BvgN8AvwF-A_wG-A3wG-A3wG-" + "A3wC_AX4D_Ab4DfAb4DfAb4DfAL8BfgP8BvgN8BvgN8BvgN8AvwF-A_wG-A3wG-A3wG-A3wC_AX4D_" + "Ab4DfAb4DfAb4DfAL8BfgP8BvgN8BvgN8DPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_" + "Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw8_Dz8PPw2_" + "DeBvG2zDehvE2jLdhvA3jbRhvw3gbxtsw3obxNow3UoCRAowUYKQAIwUYKcBIAUYKMFKAEbojdEfojtAdoTtCd4TuCN0RuiN0R-" + "iO0B2hO0J3hO4I3RG6I3RH6I7QHaE7QneE7gjdEbojdEfojtAdoTtCd4TuCN0RGiM0RmiM0BihMUJjhMYIjREaIzRGaIzQGE80oDsCNsAlwCXA" + "JcAlwCXAJTDhAhMugCSAJIAkgCSAJIAkgCSAJIAkgCSAJIAkYD9gP2A_YD9gP2A_YD9gP2A_4C3gLeAt4C3gLeAt4C3gLTws_rJZ_" + "OV6Mf30vJh-_rSY3v45tuNiel_GVsW2im0dWx1bE9smtnExLS8XU5bFdhVbfD77FttNbPvYHmKLY2SPiyn-ljeton4VYvu-mNY_" + "xfYUW3xfvOZO8ZY7xUvuFO-4U7ziTvHSOsWb6hSvolO8dU7xqjnFS-YU75hTvFhO8SI5xYvjFO-" + "NU7wOTvE2OMXL4BSvfFO87E3NRWzxmSbqmz62-" + "EwTc23iO5vXxRQvXFO8ak3xpjXFi9YU71lTvGFN8W41xavVFK9SU7wrTfEKNMUb0NR9jC36jFeTqStii_67-LOOn93Gdh9bzCNeNaaz-P6zqD-" + "LHM-WsSWxxWfP4jvP4jvP4vvOoqezP8V2iC0-fx49n3-ILeZ77hbT1_izeDJP8WCetu9iex_bh8Vff9rF9rL46-d1bMyMd5T4HSV-xwJ_" + "xzz8yOz7ePqrMhNlyfRYMj2WTI8l02PJ9FiyOpasjiWrY8nqWJ7-" + "onr6oyHzMGUeprwoZQqmTMGUtZiyFjO21IwtNWNLzZjhGRM5YyJnDJAxQMZEzhglY5SMUTLWdsbazhgvO43HBM2Ym9npT1iYMac_Epx-" + "j2Mrr9jKKxZuhfOKJyqmdMVjFdlXPFuxXCuW64qtaMVjK9Jdke6KdFcswxVcVtBYAXHFOlmdfhcD4polvGYJr1mua5brmuW6Jvs12a_" + "Jfg3nNWtxzVBr8luT2vp06-S9Ha_sINSxB3Ss447HOtZxx7MdhepIqKMyHQa7w-IP05tfF3_474eMz384dfOXfzx185d_OnXzl38-" + "dfOXfzl185d_PXXzl387dfOXfz9185f_OHXzl_88dfOX_zp185e_" + "XXwYYrtUsFEwKggKtgquFdwo2Cu4VfBdwb2CBwVHBY8KnhW8KGDifPB8UeAVbBSMCoKCrYIrBdcKvim4UbBXcFBwq-" + "C7gnsFDwqOCp4UPCt4VXBK_lLJXwrvpZK_" + "VM6XyvlSOV8qZ4KdghsFewUHBbcK7hTcK3hU8KTgWcGLglcFp5w3orpRYhuh2yifjdLY6O0bPT7K8ijLowYcNeAop6NSHYV3FN5RyQfRCEojKI" + "2gNILSCBpwqzS2mjZbkd8qn61KsFViWyW21Uu3Ir_Vu7YivxXwrWbL9u_f_qDgqOBRwbOCE_" + "kr2bnSK670iisNeKVxrjTOtfBey9e1fF0r52sNeK0BrwXqWjlf6xXXyvla7_qmAb9pnG96_Ju876TZieFODHdiuNPjO6Wx-_" + "vH7xU8K3hVcJpRNyrljUp5I-83esWNGN5owBvZuZGdG6EjeFJwetder9hr5L2o7mVwr9myl9O9nO719r3I72V5L8t7odvL-14l2CvnvXLeK-" + "e9ct4r571AEbwo-N3FidhBdg6yc5CLg1wc5OIghgclf1CqB6V6UIYH5XPQu27l9E4vvdO77vSuO73rTsTuROxOL737-3EOCu4VPCg4KnhWcPL-" + "XW-_19vv5eJej98r-Xs9_qCnCLyCSwUbBaOCrYIrBdcKvinYKbhRsFdwUHCr4F7Bg4KjgicFLwpeFZzIH5X8UTkflfNR5I_K-" + "aicj0r1qFSPSvWoVI9K9ahUj0r1qAyPyvAomEcl9qjEHvX2R438qJEfZflRvh71-JMef5KvJ5XgSQM-ifyTBnxScZ_l_VmveJHTV43zKhc_" + "9K4fyvDHbCe7_Z8__uxj-3NsfWzX8_cf__eHh9h-je32__vhfWzbWfSD34JO_wj-2-fz_Pkyf77Onz_4DeQ33enzef58mT9f588f_Jeg33Snz-" + "f582X-fJ0_0X2ZdV9m3ZdZ92XWfZl1y1m3nHXLWbecdctZl8y6ZNYlsy6Zdcn8D_vpu_lf_U_Bs4IXBa8KTuR-0X8R-EX_TeAX_VeBX_" + "TfBX6R-I3EbyR-I_Ebid9I_FbitxK_lfitxG8l_iDxB4k_SPxB4g8Sf5b4s8SfJf4s8WeJv0j8ReIvEn-R-" + "IvES4mXEi8lXkq8nMVG6IzQGaEzQmeEzgidETojdEbojNCZ9xK_l_i9xO8lfi-x0BmhM0JnhM4Infko8UeJP0r8UeKPEn-S-JPEnyT-" + "JPEniVUUo6IYFcWoKEZFMSqKUVGMimJUFKOiGBXFqChGRTEqivm9KInEicSJxInEWikmlTiVOJU4lTiVOJM4kziTOJM4kziXOJc4lziXOJd4kH" + "iQeJB4kHiQ2EvsJfYSe4m9xJcSX0p8KfGlxJcSbyTeSLyReCPxRuIgcZA4SBwkDhJvJd5KvJV4K_FW4iuJryS-kvhK4iuJryW-" + "lvha4muJryXeSbyTeCfxTuKdxDcS30h8I_GNxDcS7yXeS7yXeC_" + "xXuKDxAeJDxIfJD5IfCvxrcS3Et9KfCvxncR3Et9JfCfxncTfJf4u8XeJv0v8XeJ7ie8lvpf4XuJ7iR8kfpD4QeIHiR8kfpb4WeJniZ8lfp7F9" + "udZfAqeFbwoeFVwEmt_ttqfrfZnq_3Zan-22p-t9mer_" + "dlqf7ban61OWKsT1uqEtTphrU5Yq83cajO32sytNnOrzdxqM7fazK02c6vN3Gozt9qRrHYkqx3Jakey2pGskdhIbCQ2EhuJR4lHiUeJR4nHWVx" + "pilaaopWmaKUpWmmKVpqilaZopSlaaYpWmqLVo8SPEj9K_" + "Cjx4yxe5bP4FDwreFHwquAkriSuJK4kriSuJF5JvJJ4JfFK4tUsbjQ3Gs2NRnOj0dxoNDcazY1Gc6PR3Gg0NxrNjUZzo9HcaDQ3Gs2NRnOj0Qn" + "b6IRtdMI2OmEbnbCNTthGJ2yjE7bRCdvohG10wjY6YRudsI1O2EYnbKMTttEJ2-" + "iEbXTCNjphG83nRvO50XxuNJ8bzef211l8Cp4VvCh4VXASa4q2mqKtpmirKdpqiraaoq2maKsp2mqKtpqirXbRVrtoq1201S7aahftfprFp-" + "BZwYuCVwUnsYrSqSiditKpKJ2K4iR2EjuJncTud7E4O3F24uzE2YmzqyWuJa4lriWuJW4kbiRuJG4kbiRuJW4lbiVuJW4l7iTuJO4k7iTuJD6T" + "-EziM4nPJD6T-Fzic4nPJT6X-FzirxJ_lfirxF8l_irxhcQXEl9IfCHxhcS6BDpdAp0ugU6XQKdLoNtJvJN4J_" + "FO4p3Eusk43WScbjJONxmnm4zTTcbpJuN0k3G6yTjdZJxuMk43GaebjNNNxukm47QGndag0xp0WoNOa9BpDTqtQac16LQGndag0xp0WoNOa9Bp" + "DTqtQaebjNNNxukm43STcbrJON1knG4yTjcZp5uM003GHSU-SnyU-CjxUeIXiV8kfpH4ReIXiV8lfpX4VeJXiV9ncS-DvQz2MtjLYC-" + "DgzgP4jyI8yDOgzgP4jyI8yDOgzgP4jwI3SB0g9ANQjcI3SB0g9ANQjcI3SB0w5PETxI_" + "Sfwk8dMs9jqtvE4rr9PK67TyOq28Tiuv08rrtPI6rbxOK69d1GsX9dpFvXZRr13U6_bldfvyun153b68bl_" + "eSmwlthJbia3EhcSFxIXEhcSFxKXEpcSlxKXEpcS6I3ndkbzuSF53JK87ktcdyeuO5HVH8rojed2R_" + "FritcRridcSryXWAeR1AHkdQF4HkNcB5HUAeR1AXgeQ1wHkdQB5HUBeB5DXAeR1AHkdQF4HkNcB5HUAeR1AXgeQ1wHkdQB5HUBeB5DXAeR1AHk" + "dQF4HkNcB5HUABf2eEvR7StDvKUG_pwT9nhL0J7igP8EF_Qku6E9wQX-" + "CC7q4Bl1cgy6uQRfXoItr2Em8k3gn8U7incQ6gIIOoKADKOgACjqAgg6goAMo6AAKOoCCDqCgAyjoAAo6gIIOoKADKOgACjqAgg6goAMo6AAK2" + "hiDNsagjTFoYwzaGIM2xqCNMWhjDNoYgzbGoP05aH8O2p-D9ueg_TloFw3aRYN20aBdNPy2i_4vsAI1eQ"); static string all_emojis_str = gzdecode(base64url_decode(packed_emojis).ok()).as_slice().str(); - constexpr size_t EMOJI_COUNT = 4713; + constexpr size_t EMOJI_COUNT = 2326; #else string all_emojis_str; constexpr size_t EMOJI_COUNT = 0; @@ -221,10 +123,40 @@ bool is_emoji(Slice str) { CHECK(all_emojis.size() == EMOJI_COUNT); return all_emojis; }(); - if (str.size() > MAX_EMOJI_LENGTH) { + auto len = str.size(); + if (len > MAX_EMOJI_LENGTH + 3) { + return false; + } + if (emojis.count(str) != 0) { + return true; + } + if (len <= 3 || str[len - 3] != '\xEF' || str[len - 2] != '\xB8' || str[len - 1] != '\x8F') { + return false; + } + if (len >= 6 && str[len - 6] == '\xEF' && str[len - 5] == '\xB8' && str[len - 4] == '\x8F') { return false; } - return emojis.count(str) != 0; + return emojis.count(str.substr(0, len - 3)) != 0; +} + +bool is_emoji(Slice str) { + size_t i = str.substr(0, MAX_EMOJI_LENGTH + 4).find('\xE2'); + if (i == td::Slice::npos) { + return is_emoji_element(str); + } + + size_t start_pos = 0; + for (; i + 3 < str.size(); i++) { + if (str[i] == '\xE2' && str[i + 1] == '\x80' && str[i + 2] == '\x8D') { + // zero-width joiner \u200D + if (!is_emoji_element(str.substr(start_pos, i - start_pos))) { + return false; + } + start_pos = i + 3; + i += 2; + } + } + return is_emoji_element(str.substr(start_pos)); } int get_fitzpatrick_modifier(Slice emoji) { @@ -246,13 +178,13 @@ Slice remove_fitzpatrick_modifier(Slice emoji) { return emoji; } -string remove_emoji_modifiers(Slice emoji) { +string remove_emoji_modifiers(Slice emoji, bool remove_selectors) { string result = emoji.str(); - remove_emoji_modifiers_in_place(result); + remove_emoji_modifiers_in_place(result, remove_selectors); return result; } -void remove_emoji_modifiers_in_place(string &emoji) { +void remove_emoji_modifiers_in_place(string &emoji, bool remove_selectors) { static const Slice modifiers[] = {u8"\uFE0F" /* variation selector-16 */, u8"\u200D\u2640" /* zero width joiner + female sign */, u8"\u200D\u2642" /* zero width joiner + male sign */, @@ -261,13 +193,14 @@ void remove_emoji_modifiers_in_place(string &emoji) { u8"\U0001F3FD" /* emoji modifier fitzpatrick type-4 */, u8"\U0001F3FE" /* emoji modifier fitzpatrick type-5 */, u8"\U0001F3FF" /* emoji modifier fitzpatrick type-6 */}; + const size_t start_index = remove_selectors ? 0 : 1; size_t j = 0; for (size_t i = 0; i < emoji.size();) { bool is_found = false; - for (auto &modifier : modifiers) { - auto length = modifier.size(); - if (i + length <= emoji.size() && Slice(&emoji[i], length) == modifier) { - // skip modifier + for (size_t k = start_index; k < sizeof(modifiers) / sizeof(*modifiers); k++) { + auto length = modifiers[k].size(); + if (i + length <= emoji.size() && Slice(&emoji[i], length) == modifiers[k]) { + // skip the modifier i += length; is_found = true; break; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.h index 8bbc2904b5..29bf1dba57 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -21,10 +21,10 @@ int get_fitzpatrick_modifier(Slice emoji); Slice remove_fitzpatrick_modifier(Slice emoji); // removes all emoji modifiers from the string -string remove_emoji_modifiers(Slice emoji); +string remove_emoji_modifiers(Slice emoji, bool remove_selectors = true); // removes all emoji modifiers from the string in-place -void remove_emoji_modifiers_in_place(string &emoji); +void remove_emoji_modifiers_in_place(string &emoji, bool remove_selectors = true); // removes all emoji selectors from the string if it is an emoji string remove_emoji_selectors(Slice emoji); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.cpp index edb5df8677..5a2fc0b268 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.h index b437105819..c1d232026f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.cpp index d3dd6bcd58..67de95cc21 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.h index a0c6f4ff54..470e3d7cc7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/fixed_vector.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/fixed_vector.h index a4bf0af794..4d937e401b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/fixed_vector.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/fixed_vector.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/format.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/format.h index 0baf9b8be0..b7fdf53f2c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/format.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/format.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/int_types.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/int_types.h index 25493fa183..90413b53dc 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/int_types.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/int_types.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/invoke.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/invoke.h index d69a8422e3..23373f6b0e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/invoke.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/invoke.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.cpp index 563575bdba..cf73f5dfb2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -80,7 +80,7 @@ Logger::Logger(LogInterface &log, const LogOptions &options, int log_level, Slic } sb_ << ']'; - // thread id + // thread identifier auto thread_id = get_thread_id(); sb_ << "[t"; if (static_cast<uint32>(thread_id) < 10) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.h index b6f45eb686..8974484716 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/logging.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.cpp index df86382031..6976ead384 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.h index 5d9292f43a..c5968ec2f1 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/misc.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/optional.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/optional.h index 579127f625..ace463d70d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/optional.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/optional.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -42,8 +42,8 @@ class optional { return *this; } - optional(optional &&other) = default; - optional &operator=(optional &&other) = default; + optional(optional &&) = default; + optional &operator=(optional &&) = default; ~optional() = default; explicit operator bool() const noexcept { @@ -89,8 +89,8 @@ struct optional<T, false> : optional<T, true> { using optional<T, true>::optional; - optional(const optional &other) = delete; - optional &operator=(const optional &other) = delete; + optional(const optional &) = delete; + optional &operator=(const optional &) = delete; optional(optional &&) = default; optional &operator=(optional &&) = default; ~optional() = default; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/overloaded.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/overloaded.h index 3c54151c55..d0f7cfad8f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/overloaded.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/overloaded.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.cpp index b20beef74f..cd56677e26 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.h index d663d129d7..3e0f08254a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/CxCli.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/CxCli.h index f88ef5bad8..0620bb03ab 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/CxCli.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/CxCli.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFd.h index 8972259102..c59d3b9005 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFdBase.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFdBase.h index d4f586c303..adf52fe164 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFdBase.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFdBase.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.cpp index aabcb0156c..179d06c1a2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -41,198 +41,8 @@ #include <limits> #endif -#if TD_PORT_WINDOWS -#define STATUS_INVALID_INFO_CLASS 0xC0000003L - -typedef enum _FILE_INFORMATION_CLASS -{ - FileDirectoryInformation = 1, - FileFullDirectoryInformation, - FileBothDirectoryInformation, - FileBasicInformation, - FileStandardInformation, - FileInternalInformation, - FileEaInformation, - FileAccessInformation, - FileNameInformation, - FileRenameInformation, - FileLinkInformation, - FileNamesInformation, - FileDispositionInformation, - FilePositionInformation, - FileFullEaInformation, - FileModeInformation, - FileAlignmentInformation, - FileAllInformation, - FileAllocationInformation, - FileEndOfFileInformation, - FileAlternateNameInformation, - FileStreamInformation, - FilePipeInformation, - FilePipeLocalInformation, - FilePipeRemoteInformation, - FileMailslotQueryInformation, - FileMailslotSetInformation, - FileCompressionInformation, - FileCopyOnWriteInformation, - FileCompletionInformation, - FileMoveClusterInformation, - FileQuotaInformation, - FileReparsePointInformation, - FileNetworkOpenInformation, - FileObjectIdInformation, - FileTrackingInformation, - FileOleDirectoryInformation, - FileContentIndexInformation, - FileInheritContentIndexInformation, - FileOleInformation, - FileMaximumInformation -} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; - - -#ifdef WIN32_LEAN_AND_MEAN +#if TD_PORT_WINDOWS && defined(WIN32_LEAN_AND_MEAN) #include <winioctl.h> -#endif // WIN32_LEAN_AND_MEAN - -typedef struct _IO_STATUS_BLOCK -{ - union { - NTSTATUS Status; - PVOID Pointer; - } DUMMYUNIONNAME; - - ULONG_PTR Information; -} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; - -typedef NTSTATUS (CALLBACK *pfnNtQueryDirectoryFile)( - HANDLE FileHandle, - HANDLE Event, - PVOID ApcRoutine, - PVOID ApcContext, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass, - BOOLEAN ReturnSingleEntry, - WCHAR* FileName, - BOOLEAN RestartScan); - -static pfnNtQueryDirectoryFile fnNtQueryDirectoryFile = nullptr; - -typedef NTSTATUS (CALLBACK *pfnNtQueryInformationFile)( - HANDLE FileHandle, - PIO_STATUS_BLOCK IoStatusBlock, - PVOID FileInformation, - ULONG Length, - FILE_INFORMATION_CLASS FileInformationClass); - -static pfnNtQueryInformationFile fnNtQueryInformationFile = nullptr; - -static BOOL bNtdllInited = false; - -static BOOL WINAPI GetFileInformationByHandleExStub( - _In_ HANDLE hFile, - _In_ FILE_INFO_BY_HANDLE_CLASS FileInformationClass, - _Out_writes_bytes_(dwBufferSize) LPVOID lpFileInformation, - _In_ DWORD dwBufferSize) -{ - FILE_INFORMATION_CLASS NtFileInformationClass; - DWORD cbMinBufferSize; - BOOLEAN RestartScan = false; - - switch (FileInformationClass) // Purosham Sahanu InformationClass - { - case FileBasicInfo: - NtFileInformationClass = FileBasicInformation; - cbMinBufferSize = sizeof(FILE_BASIC_INFO); - break; - case FileStandardInfo: - NtFileInformationClass = FileStandardInformation; - cbMinBufferSize = sizeof(FILE_STANDARD_INFO); - break; - case FileNameInfo: - NtFileInformationClass = FileNameInformation; - cbMinBufferSize = sizeof(FILE_NAME_INFO); - break; - case FileStreamInfo: - NtFileInformationClass = FileStreamInformation; - cbMinBufferSize = sizeof(FILE_STREAM_INFO); - break; - case FileCompressionInfo: - NtFileInformationClass = FileCompressionInformation; - cbMinBufferSize = sizeof(FILE_COMPRESSION_INFO); - break; - default: - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - break; - } - - if (cbMinBufferSize > dwBufferSize) { - SetLastError(ERROR_BAD_LENGTH); - return FALSE; - } - - if (!bNtdllInited) { - bNtdllInited = true; - - HINSTANCE hdll = LoadLibraryA("ntdll.dll"); - fnNtQueryDirectoryFile = (pfnNtQueryDirectoryFile)GetProcAddress(hdll, "NtQueryDirectoryFile"); - fnNtQueryInformationFile = (pfnNtQueryInformationFile)GetProcAddress(hdll, "NtQueryInformationFile"); - } - - int Status = ERROR_SUCCESS; - IO_STATUS_BLOCK IoStatusBlock; - if (fnNtQueryDirectoryFile) { - Status = fnNtQueryDirectoryFile( - hFile, - nullptr, - nullptr, - nullptr, - &IoStatusBlock, - lpFileInformation, - dwBufferSize, - NtFileInformationClass, - false, - nullptr, - RestartScan - ); - - if (STATUS_PENDING == Status) { - if (WaitForSingleObjectEx(hFile, 0, FALSE) == WAIT_FAILED) { - return FALSE; - } - - Status = IoStatusBlock.Status; - } - else if (Status == STATUS_INVALID_INFO_CLASS) - goto LBL_CheckFile; - } - else { -LBL_CheckFile: - if (!fnNtQueryInformationFile) { - SetLastError(ERROR_INVALID_FUNCTION); - return FALSE; - } - - Status = fnNtQueryInformationFile(hFile, &IoStatusBlock, lpFileInformation, dwBufferSize, NtFileInformationClass); - } - - if (Status >= ERROR_SUCCESS) { - if (FileStreamInfo == FileInformationClass && IoStatusBlock.Information == 0) { - SetLastError(ERROR_HANDLE_EOF); - return FALSE; - } - else { - return TRUE; - } - } - else { - SetLastError(Status); - return FALSE; - } -} - #endif namespace td { @@ -347,11 +157,25 @@ Result<FileFd> FileFd::open(CSlice filepath, int32 flags, int32 mode) { } #endif - int native_fd = detail::skip_eintr([&] { return ::open(filepath.c_str(), native_flags, static_cast<mode_t>(mode)); }); - if (native_fd < 0) { - return OS_ERROR(PSLICE() << "File \"" << filepath << "\" can't be " << PrintFlags{flags}); + while (true) { + int native_fd = + detail::skip_eintr([&] { return ::open(filepath.c_str(), native_flags, static_cast<mode_t>(mode)); }); + if (native_fd < 0) { + return OS_ERROR(PSLICE() << "File \"" << filepath << "\" can't be " << PrintFlags{flags}); + } + // Avoid the use of low-numbered file descriptors, which can be used directly by some other functions + constexpr int MINIMUM_FILE_DESCRIPTOR = 3; + if (native_fd < MINIMUM_FILE_DESCRIPTOR) { + ::close(native_fd); + LOG(ERROR) << "Receive " << native_fd << " as a file descriptor"; + int dummy_fd = detail::skip_eintr([&] { return ::open("/dev/null", O_RDONLY, 0); }); + if (dummy_fd < 0) { + return OS_ERROR("Can't open /dev/null"); + } + continue; + } + return from_native_fd(NativeFd(native_fd)); } - return from_native_fd(NativeFd(native_fd)); #elif TD_PORT_WINDOWS // TODO: support modes auto r_filepath = to_wstring(filepath); @@ -372,6 +196,8 @@ Result<FileFd> FileFd::open(CSlice filepath, int32 flags, int32 mode) { // TODO: share mode DWORD share_mode = FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE; + DWORD native_flags = 0; + DWORD creation_disposition = 0; if (flags & Create) { if (flags & Truncate) { @@ -387,18 +213,29 @@ Result<FileFd> FileFd::open(CSlice filepath, int32 flags, int32 mode) { } else { creation_disposition = OPEN_EXISTING; } +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) + native_flags |= FILE_FLAG_OPEN_REPARSE_POINT; +#endif } - DWORD native_flags = 0; if (flags & Direct) { native_flags |= FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING; } if (flags & WinStat) { native_flags |= FILE_FLAG_BACKUP_SEMANTICS; } - +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) auto handle = CreateFile(w_filepath.c_str(), desired_access, share_mode, nullptr, creation_disposition, native_flags, nullptr); +#else + CREATEFILE2_EXTENDED_PARAMETERS extended_parameters; + std::memset(&extended_parameters, 0, sizeof(extended_parameters)); + extended_parameters.dwSize = sizeof(extended_parameters); + extended_parameters.dwFileAttributes = FILE_ATTRIBUTE_NORMAL; + extended_parameters.dwFileFlags = native_flags; + auto handle = td::CreateFile2FromAppW(w_filepath.c_str(), desired_access, share_mode, creation_disposition, + &extended_parameters); +#endif if (handle == INVALID_HANDLE_VALUE) { return OS_ERROR(PSLICE() << "File \"" << filepath << "\" can't be " << PrintFlags{flags}); } @@ -722,10 +559,10 @@ struct FileSize { Result<FileSize> get_file_size(const FileFd &file_fd) { FILE_STANDARD_INFO standard_info; - if (!GetFileInformationByHandleExStub(file_fd.get_native_fd().fd(), FileStandardInfo, &standard_info, sizeof(standard_info))) { + if (!GetFileInformationByHandleEx(file_fd.get_native_fd().fd(), FileStandardInfo, &standard_info, + sizeof(standard_info))) { return OS_ERROR("Get FileStandardInfo failed"); } - FileSize res; res.size_ = standard_info.EndOfFile.QuadPart; res.real_size_ = standard_info.AllocationSize.QuadPart; @@ -767,15 +604,26 @@ Result<Stat> FileFd::stat() const { Stat res; FILE_BASIC_INFO basic_info; - auto status = GetFileInformationByHandleExStub(get_native_fd().fd(), FileBasicInfo, &basic_info, sizeof(basic_info)); + auto status = GetFileInformationByHandleEx(get_native_fd().fd(), FileBasicInfo, &basic_info, sizeof(basic_info)); if (!status) { - return OS_ERROR("Get FileStandardInfo failed"); + return OS_ERROR("Get FileBasicInfo failed"); } - res.atime_nsec_ = filetime_to_unix_time_nsec(basic_info.LastAccessTime.QuadPart); res.mtime_nsec_ = filetime_to_unix_time_nsec(basic_info.LastWriteTime.QuadPart); res.is_dir_ = (basic_info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; - res.is_reg_ = !res.is_dir_; // TODO this is still wrong + if ((basic_info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0) { + FILE_ATTRIBUTE_TAG_INFO tag_info; + status = GetFileInformationByHandleEx(get_native_fd().fd(), FileAttributeTagInfo, &tag_info, sizeof(tag_info)); + if (!status) { + return OS_ERROR("Get FileAttributeTagInfo failed"); + } + res.is_reg_ = false; + res.is_symbolic_link_ = + (tag_info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0 && tag_info.ReparseTag == IO_REPARSE_TAG_SYMLINK; + } else { + res.is_reg_ = !res.is_dir_; + res.is_symbolic_link_ = false; + } TRY_RESULT(file_size, get_file_size(*this)); res.size_ = file_size.size_; @@ -801,6 +649,16 @@ Status FileFd::sync() { return Status::OK(); } +Status FileFd::sync_barrier() { + CHECK(!empty()); +#if TD_DARWIN && defined(F_BARRIERFSYNC) + if (detail::skip_eintr([&] { return fcntl(get_native_fd().fd(), F_BARRIERFSYNC); }) != -1) { + return Status::OK(); + } +#endif + return sync(); +} + Status FileFd::seek(int64 position) { CHECK(!empty()); #if TD_PORT_POSIX diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.h index 3dc88da5cb..cb632b8256 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -62,6 +62,7 @@ class FileFd { Result<Stat> stat() const; Status sync() TD_WARN_UNUSED_RESULT; + Status sync_barrier() TD_WARN_UNUSED_RESULT; Status seek(int64 position) TD_WARN_UNUSED_RESULT; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FromApp.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FromApp.h index ca1f6b5c8f..1734922f5d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FromApp.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/FromApp.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -12,27 +12,87 @@ namespace td { +#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) +inline HMODULE GetKernelModule() { + static const auto kernel_module = []() -> HMODULE { + MEMORY_BASIC_INFORMATION mbi; + if (VirtualQuery(VirtualQuery, &mbi, sizeof(MEMORY_BASIC_INFORMATION))) { + return reinterpret_cast<HMODULE>(mbi.AllocationBase); + } + return nullptr; + }(); + return kernel_module; +} + +inline HMODULE LoadLibrary(LPCTSTR lpFileName) { + using pLoadLibrary = HMODULE(WINAPI *)(_In_ LPCTSTR); + static const auto proc_load_library = + reinterpret_cast<pLoadLibrary>(GetProcAddress(GetKernelModule(), "LoadLibraryW")); + return proc_load_library(lpFileName); +} + +inline HMODULE GetFromAppModule() { + static const HMODULE from_app_module = LoadLibrary(L"api-ms-win-core-file-fromapp-l1-1-0.dll"); + return from_app_module; +} +#endif + +template <int num, class T> +T *get_from_app_function(const char *name, T *original_func) { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) + return original_func; +#else + static T *func = [name, original_func]() -> T * { + auto func_pointer = GetProcAddress(GetFromAppModule(), name); + if (func_pointer == nullptr) { + return original_func; + } + return reinterpret_cast<T *>(func_pointer); + }(); + return func; +#endif +} + +inline HANDLE CreateFile2FromAppW(_In_ LPCWSTR lpFileName, _In_ DWORD dwDesiredAccess, _In_ DWORD dwShareMode, + _In_ DWORD dwCreationDisposition, + _In_opt_ LPCREATEFILE2_EXTENDED_PARAMETERS pCreateExParams) { + auto func = get_from_app_function<0>("CreateFile2FromAppW", &CreateFile2); + return func(lpFileName, dwDesiredAccess, dwShareMode, dwCreationDisposition, pCreateExParams); +} + inline BOOL CreateDirectoryFromAppW(_In_ LPCWSTR lpPathName, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes) { - return CreateDirectoryW(lpPathName, lpSecurityAttributes); + auto func = get_from_app_function<1>("CreateDirectoryFromAppW", &CreateDirectory); + return func(lpPathName, lpSecurityAttributes); } inline BOOL RemoveDirectoryFromAppW(_In_ LPCWSTR lpPathName) { - return RemoveDirectoryW(lpPathName); + auto func = get_from_app_function<2>("RemoveDirectoryFromAppW", &RemoveDirectory); + return func(lpPathName); } inline BOOL DeleteFileFromAppW(_In_ LPCWSTR lpFileName) { - return DeleteFileW(lpFileName); + auto func = get_from_app_function<3>("DeleteFileFromAppW", &DeleteFile); + return func(lpFileName); } inline BOOL MoveFileExFromAppW(_In_ LPCWSTR lpExistingFileName, _In_ LPCWSTR lpNewFileName, _In_ DWORD dwFlags) { - return MoveFileEx(lpExistingFileName, lpNewFileName, dwFlags); + auto func = get_from_app_function<4>("MoveFileFromAppW", static_cast<BOOL(WINAPI *)(LPCWSTR, LPCWSTR)>(nullptr)); + if (func == nullptr || (dwFlags & ~MOVEFILE_REPLACE_EXISTING) != 0) { + // if can't find MoveFileFromAppW or have unsupported flags, call MoveFileEx directly + return MoveFileEx(lpExistingFileName, lpNewFileName, dwFlags); + } + if ((dwFlags & MOVEFILE_REPLACE_EXISTING) != 0) { + td::DeleteFileFromAppW(lpNewFileName); + } + return func(lpExistingFileName, lpNewFileName); } inline HANDLE FindFirstFileExFromAppW(_In_ LPCWSTR lpFileName, _In_ FINDEX_INFO_LEVELS fInfoLevelId, _Out_writes_bytes_(sizeof(WIN32_FIND_DATAW)) LPVOID lpFindFileData, _In_ FINDEX_SEARCH_OPS fSearchOp, _Reserved_ LPVOID lpSearchFilter, _In_ DWORD dwAdditionalFlags) { - return FindFirstFileEx(lpFileName, fInfoLevelId, lpFindFileData, fSearchOp, lpSearchFilter, dwAdditionalFlags); + auto func = get_from_app_function<5>("FindFirstFileExFromAppW", &FindFirstFileEx); + return func(lpFileName, fInfoLevelId, lpFindFileData, fSearchOp, lpSearchFilter, dwAdditionalFlags); } } // namespace td diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.cpp index efb2fbabef..b756614cb0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.cpp @@ -1,9 +1,10 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#define _WINSOCK_DEPRECATED_NO_WARNINGS // we need to use inet_addr instead of inet_pton #include "td/utils/port/IPAddress.h" @@ -16,7 +17,6 @@ #include "td/utils/Slice.h" #include "td/utils/SliceBuilder.h" #include "td/utils/utf8.h" -#include "td/utils/port/inet_ntop.h" #if TD_WINDOWS #include "td/utils/port/wstring_convert.h" @@ -179,7 +179,7 @@ static CSlice get_ip_str(int family, const void *addr) { static TD_THREAD_LOCAL char *buf; init_thread_local<char[]>(buf, buf_size); - const char *res = inet_ntop_(family, + const char *res = inet_ntop(family, #if TD_WINDOWS const_cast<PVOID>(addr), #else @@ -320,11 +320,11 @@ Status IPAddress::init_ipv6_port(CSlice ipv6, int port) { std::memset(&ipv6_addr_, 0, sizeof(ipv6_addr_)); ipv6_addr_.sin6_family = AF_INET6; ipv6_addr_.sin6_port = htons(static_cast<uint16>(port)); - int err = inet_pton_(AF_INET6, ipv6.c_str(), &ipv6_addr_.sin6_addr); + int err = inet_pton(AF_INET6, ipv6.c_str(), &ipv6_addr_.sin6_addr); if (err == 0) { - return Status::Error(PSLICE() << "Failed inet_pton_(AF_INET6, " << ipv6 << ")"); + return Status::Error(PSLICE() << "Failed inet_pton(AF_INET6, " << ipv6 << ")"); } else if (err == -1) { - return OS_SOCKET_ERROR(PSLICE() << "Failed inet_pton_(AF_INET6, " << ipv6 << ")"); + return OS_SOCKET_ERROR(PSLICE() << "Failed inet_pton(AF_INET6, " << ipv6 << ")"); } is_valid_ = true; return Status::OK(); @@ -342,11 +342,11 @@ Status IPAddress::init_ipv4_port(CSlice ipv4, int port) { std::memset(&ipv4_addr_, 0, sizeof(ipv4_addr_)); ipv4_addr_.sin_family = AF_INET; ipv4_addr_.sin_port = htons(static_cast<uint16>(port)); - int err = inet_pton_(AF_INET, ipv4.c_str(), &ipv4_addr_.sin_addr); + int err = inet_pton(AF_INET, ipv4.c_str(), &ipv4_addr_.sin_addr); if (err == 0) { - return Status::Error(PSLICE() << "Failed inet_pton_(AF_INET, " << ipv4 << ")"); + return Status::Error(PSLICE() << "Failed inet_pton(AF_INET, " << ipv4 << ")"); } else if (err == -1) { - return OS_SOCKET_ERROR(PSLICE() << "Failed inet_pton_(AF_INET, " << ipv4 << ")"); + return OS_SOCKET_ERROR(PSLICE() << "Failed inet_pton(AF_INET, " << ipv4 << ")"); } is_valid_ = true; return Status::OK(); @@ -365,7 +365,7 @@ Result<IPAddress> IPAddress::get_ip_address(CSlice host) { } Result<IPAddress> IPAddress::get_ipv4_address(CSlice host) { - // sometimes inet_addr allows much more valid IPv4 hosts than inet_pton_, + // sometimes inet_addr allows much more valid IPv4 hosts than inet_pton, // like 0x12.0x34.0x56.0x78, or 0x12345678, or 0x7f.001 auto ipv4_numeric_addr = inet_addr(host.c_str()); if (ipv4_numeric_addr == INADDR_NONE) { @@ -416,7 +416,7 @@ Status IPAddress::init_host_port(CSlice host, CSlice port, bool prefer_ipv6) { return init_ipv6_port(host, port_int == 0 ? 1 : port_int); } - // some getaddrinfo implementations use inet_pton_ instead of inet_aton and support only decimal-dotted IPv4 form, + // some getaddrinfo implementations use inet_pton instead of inet_aton and support only decimal-dotted IPv4 form, // and so doesn't recognize 0x12.0x34.0x56.0x78, or 0x12345678, or 0x7f.001 as valid IPv4 addresses auto ipv4_numeric_addr = inet_addr(host.c_str()); if (ipv4_numeric_addr != INADDR_NONE) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.h index f71bc5da91..998ec3e8bf 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IoSlice.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IoSlice.h index 5044fcec37..b2fbcbd980 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IoSlice.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/IoSlice.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.cpp index 0781b609b3..b18b4dadff 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -91,8 +91,8 @@ Result<MemoryMapping> MemoryMapping::create_from_file(const FileFd &file_fd, con #endif } -MemoryMapping::MemoryMapping(MemoryMapping &&other) noexcept = default; -MemoryMapping &MemoryMapping::operator=(MemoryMapping &&other) noexcept = default; +MemoryMapping::MemoryMapping(MemoryMapping &&) noexcept = default; +MemoryMapping &MemoryMapping::operator=(MemoryMapping &&) noexcept = default; MemoryMapping::~MemoryMapping() = default; MemoryMapping::MemoryMapping(unique_ptr<Impl> impl) : impl_(std::move(impl)) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.h index 040e45f989..f58cbb37d2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -37,8 +37,8 @@ class MemoryMapping { Slice as_slice() const; MutableSlice as_mutable_slice(); // returns empty slice if memory is read-only - MemoryMapping(const MemoryMapping &other) = delete; - const MemoryMapping &operator=(const MemoryMapping &other) = delete; + MemoryMapping(const MemoryMapping &) = delete; + MemoryMapping &operator=(const MemoryMapping &) = delete; MemoryMapping(MemoryMapping &&other) noexcept; MemoryMapping &operator=(MemoryMapping &&other) noexcept; ~MemoryMapping(); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Mutex.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Mutex.h index 40d9f482db..b1b3671f63 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Mutex.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Mutex.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Poll.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Poll.h index 92629d6693..f55f4ebc3a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Poll.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Poll.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollBase.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollBase.h index 674f8da677..bb92e05ff4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollBase.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollBase.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.cpp index d729dcfa1e..08e977cee2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.h index f759cb44cb..a9e650b5be 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.cpp deleted file mode 100644 index 495856201e..0000000000 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.cpp +++ /dev/null @@ -1,133 +0,0 @@ -// -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// -#pragma once - -#include <assert.h> - -#include "td/utils/port/RwMutex.h" - -typedef void(WINAPI *srwlock_function)(winlock_t*); -static srwlock_function srwlock_Init, srwlock_AcquireShared, srwlock_ReleaseShared, srwlock_AcquireExclusive, srwlock_ReleaseExclusive; - -static bool bInited = false; - -namespace td { - //---------------------------------------------------------------------------- - // Stub for slim read-write lock - // Copyright (C) 1995-2002 Brad Wilson - - static void WINAPI stub_srwlock_Init(winlock_t *srwl) { - srwl->readerCount = srwl->writerCount = 0; - } - - static void WINAPI stub_srwlock_AcquireShared(winlock_t *srwl) { - while (true) { - assert(srwl->writerCount >= 0 && srwl->readerCount >= 0); - - // If there's a writer already, spin without unnecessarily - // interlocking the CPUs - if (srwl->writerCount != 0) { - YieldProcessor(); - continue; - } - - // Add to the readers list - _InterlockedIncrement(&srwl->readerCount); - - // Check for writers again (we may have been preempted). If - // there are no writers writing or waiting, then we're done. - if (srwl->writerCount == 0) - break; - - // Remove from the readers list, spin, try again - _InterlockedDecrement(&srwl->readerCount); - YieldProcessor(); - } - } - - static void WINAPI stub_srwlock_ReleaseShared(winlock_t *srwl) { - assert(srwl->readerCount > 0); - _InterlockedDecrement(&srwl->readerCount); - } - - static void WINAPI stub_srwlock_AcquireExclusive(winlock_t *srwl) { - while (true) { - assert(srwl->writerCount >= 0 && srwl->readerCount >= 0); - - // If there's a writer already, spin without unnecessarily - // interlocking the CPUs - if (srwl->writerCount != 0) { - YieldProcessor(); - continue; - } - - // See if we can become the writer (expensive, because it inter- - // locks the CPUs, so writing should be an infrequent process) - if (_InterlockedExchange(&srwl->writerCount, 1) == 0) - break; - } - - // Now we're the writer, but there may be outstanding readers. - // Spin until there aren't any more; new readers will wait now - // that we're the writer. - while (srwl->readerCount != 0) { - assert(srwl->writerCount >= 0 && srwl->readerCount >= 0); - YieldProcessor(); - } - } - - static void WINAPI stub_srwlock_ReleaseExclusive(winlock_t *srwl) { - assert(srwl->writerCount == 1 && srwl->readerCount >= 0); - srwl->writerCount = 0; - } - - void InitializeLock(winlock_t &lock) - { - if (!bInited) { - HINSTANCE hKernel32dll = GetModuleHandleA("kernel32.dll"); - - const srwlock_function init = (srwlock_function)GetProcAddress(hKernel32dll, "InitializeSRWLock"); - if (init != NULL) { - srwlock_Init = init; - srwlock_AcquireShared = (srwlock_function)GetProcAddress(hKernel32dll, "AcquireSRWLockShared"); - srwlock_ReleaseShared = (srwlock_function)GetProcAddress(hKernel32dll, "ReleaseSRWLockShared"); - srwlock_AcquireExclusive = (srwlock_function)GetProcAddress(hKernel32dll, "AcquireSRWLockExclusive"); - srwlock_ReleaseExclusive = (srwlock_function)GetProcAddress(hKernel32dll, "ReleaseSRWLockExclusive"); - } else { - srwlock_Init = stub_srwlock_Init; - srwlock_AcquireShared = stub_srwlock_AcquireShared; - srwlock_ReleaseShared = stub_srwlock_ReleaseShared; - srwlock_AcquireExclusive = stub_srwlock_AcquireExclusive; - srwlock_ReleaseExclusive = stub_srwlock_ReleaseExclusive; - } - - bInited = true; - } - - srwlock_Init(&lock); - } - - void AcquireLockShared(winlock_t &lock) - { - srwlock_AcquireShared(&lock); - } - - void AcquireLockExclusive(winlock_t &lock) - { - srwlock_AcquireExclusive(&lock); - } - - void ReleaseLockShared(winlock_t &lock) - { - srwlock_ReleaseShared(&lock); - } - - void ReleaseLockExclusive(winlock_t &lock) - { - srwlock_ReleaseExclusive(&lock); - } -} // namespace td diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.h index 1d88caceee..6b9810a0ad 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -15,17 +15,6 @@ #include <pthread.h> #endif -#if TD_PORT_WINDOWS -union winlock_t { - struct { - long volatile readerCount; - long volatile writerCount; - }; - - SRWLOCK rwlock; -}; -#endif - #include <memory> namespace td { @@ -94,23 +83,18 @@ class RwMutex { #if TD_PORT_POSIX pthread_rwlock_t mutex_; #elif TD_PORT_WINDOWS - winlock_t mutex_; + unique_ptr<SRWLOCK> mutex_; #endif }; -void InitializeLock(winlock_t&); -void AcquireLockShared(winlock_t&); -void AcquireLockExclusive(winlock_t&); -void ReleaseLockShared(winlock_t&); -void ReleaseLockExclusive(winlock_t&); - inline void RwMutex::init() { CHECK(empty()); is_valid_ = true; #if TD_PORT_POSIX pthread_rwlock_init(&mutex_, nullptr); #elif TD_PORT_WINDOWS - InitializeLock(mutex_); + mutex_ = make_unique<SRWLOCK>(); + InitializeSRWLock(mutex_.get()); #endif } @@ -118,6 +102,8 @@ inline void RwMutex::clear() { if (is_valid_) { #if TD_PORT_POSIX pthread_rwlock_destroy(&mutex_); +#elif TD_PORT_WINDOWS + mutex_.release(); #endif is_valid_ = false; } @@ -129,7 +115,7 @@ inline void RwMutex::lock_read_unsafe() { #if TD_PORT_POSIX pthread_rwlock_rdlock(&mutex_); #elif TD_PORT_WINDOWS - AcquireLockShared(mutex_); + AcquireSRWLockShared(mutex_.get()); #endif } @@ -138,7 +124,7 @@ inline void RwMutex::lock_write_unsafe() { #if TD_PORT_POSIX pthread_rwlock_wrlock(&mutex_); #elif TD_PORT_WINDOWS - AcquireLockExclusive(mutex_); + AcquireSRWLockExclusive(mutex_.get()); #endif } @@ -147,7 +133,7 @@ inline void RwMutex::unlock_read_unsafe() { #if TD_PORT_POSIX pthread_rwlock_unlock(&mutex_); #elif TD_PORT_WINDOWS - ReleaseLockShared(mutex_); + ReleaseSRWLockShared(mutex_.get()); #endif } @@ -156,7 +142,7 @@ inline void RwMutex::unlock_write_unsafe() { #if TD_PORT_POSIX pthread_rwlock_unlock(&mutex_); #elif TD_PORT_WINDOWS - ReleaseLockExclusive(mutex_); + ReleaseSRWLockExclusive(mutex_.get()); #endif } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.cpp index 139252b405..d7eca3a0d2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.h index dfff0741bd..266e688321 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.cpp index 90d516db36..68c62ad11b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -522,10 +522,10 @@ class SocketFdImpl { case EISDIR: case EBADF: case ENXIO: - case EFAULT: case EINVAL: LOG(FATAL) << error; UNREACHABLE(); + case EFAULT: // happens on various Android 13 phones manufactured by BBK Electronics default: LOG(WARNING) << error; // fallthrough @@ -637,6 +637,22 @@ Result<SocketFd> SocketFd::open(const IPAddress &address) { if (!native_fd) { return OS_SOCKET_ERROR("Failed to create a socket"); } +#if TD_PORT_POSIX + // Avoid the use of low-numbered file descriptors, which can be used directly by some other functions + constexpr int MINIMUM_FILE_DESCRIPTOR = 3; + while (native_fd.socket() < MINIMUM_FILE_DESCRIPTOR) { + native_fd.close(); + LOG(ERROR) << "Receive " << native_fd << " as a file descriptor"; + int dummy_fd = detail::skip_eintr([&] { return ::open("/dev/null", O_RDONLY, 0); }); + if (dummy_fd < 0) { + return OS_ERROR("Can't open /dev/null"); + } + native_fd = NativeFd{socket(address.get_address_family(), SOCK_STREAM, IPPROTO_TCP)}; + if (!native_fd) { + return OS_SOCKET_ERROR("Failed to create a socket"); + } + } +#endif TRY_STATUS(detail::init_socket_options(native_fd)); #if TD_PORT_POSIX diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.h index 72aa80de24..2c4a3746fe 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.cpp index 3000598719..1347360f4b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -126,6 +126,7 @@ Stat from_native_stat(const struct ::stat &buf) { res.real_size_ = buf.st_blocks * 512; res.is_dir_ = (buf.st_mode & S_IFMT) == S_IFDIR; res.is_reg_ = (buf.st_mode & S_IFMT) == S_IFREG; + res.is_symbolic_link_ = (buf.st_mode & S_IFMT) == S_IFLNK; return res; } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.h index ed8fc3de82..179f87a35a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -17,6 +17,7 @@ namespace td { struct Stat { bool is_dir_; bool is_reg_; + bool is_symbolic_link_; int64 size_; int64 real_size_; uint64 atime_nsec_; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.cpp index b2064a9fe6..aeee483489 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.h index 0922594c9a..618495a016 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.cpp index eee487d44b..e5db2c2fb2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -574,7 +574,7 @@ class UdpSocketFdImpl { auto error = Status::PosixError(sendmsg_errno, PSLICE() << "Send from " << get_native_fd() << " has failed"); switch (sendmsg_errno) { - // Still may send some other packets, but there is no point to resend this particular message + // We still may send some other packets, but there is no point to resend this particular message case EACCES: case EMSGSIZE: case EPERM: @@ -583,7 +583,7 @@ class UdpSocketFdImpl { is_sent = true; return error; - // Some general problems, which may be fixed in future + // Some general issues, which may be fixed in the future case ENOMEM: case EDQUOT: case EFBIG: @@ -600,12 +600,12 @@ class UdpSocketFdImpl { case EBADF: // impossible case ENOTSOCK: // impossible - case EPIPE: // impossible for udp - case ECONNRESET: // impossible for udp + case EPIPE: // impossible for UDP + case ECONNRESET: // impossible for UDP case EDESTADDRREQ: // we checked that address is valid case ENOTCONN: // we checked that address is valid case EINTR: // we already skipped all EINTR - case EISCONN: // impossible for udp socket + case EISCONN: // impossible for UDP socket case EOPNOTSUPP: case ENOTDIR: case EFAULT: diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.h index 6ff5cd1491..67cdf801ae 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -20,7 +20,6 @@ #include <memory> namespace td { -// Udp and errors namespace detail { class UdpSocketFdImpl; class UdpSocketFdImplDeleter { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/config.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/config.h index 59fd94bf00..25a39f6001 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/config.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/config.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.cpp index 771b06a954..dfe9cdf013 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.h index da02de7c7b..6c0524dafd 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.cpp index 8f22aeb5c1..f33df84d4d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.h index 5278f74b23..5336952f2d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.cpp index bcab560af7..042e22b044 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.h index 2cd4d12210..304dc7c4e2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.cpp index 7acaa3f17b..1eda3d2b37 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.h index 5794e6c7ca..39cc952e74 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.cpp index 1e472df67f..be07f564c3 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -27,7 +27,7 @@ void Iocp::loop() { BOOL ok = GetQueuedCompletionStatus(iocp_handle_->fd(), &bytes, &key, reinterpret_cast<OVERLAPPED **>(&overlapped), 1000); if (bytes || key || overlapped) { - // LOG(ERROR) << "Got IOCP " << bytes << " " << key << " " << overlapped; + // LOG(ERROR) << "Receive IOCP completion status: " << bytes << ' ' << key << ' ' << overlapped; } if (ok) { auto callback = reinterpret_cast<Iocp::Callback *>(key); @@ -38,7 +38,7 @@ void Iocp::loop() { callback->on_iocp(bytes, overlapped); } else { if (overlapped != nullptr) { - auto error = OS_ERROR("Received from IOCP"); + auto error = OS_ERROR("Receive IOCP error"); auto callback = reinterpret_cast<Iocp::Callback *>(key); CHECK(callback != nullptr); callback->on_iocp(std::move(error), overlapped); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.h index a37cce7e57..41683dbac2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.cpp index 64c3c54302..101f12e3fe 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.h index d74443c475..a265149482 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.cpp index 7a492857ec..779a166cc0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -36,7 +36,7 @@ class FdSet { } std::unique_lock<std::mutex> guard(mutex_); if (fds_.count(fd) >= 1) { - LOG(FATAL) << "Create duplicated fd: " << fd; + LOG(FATAL) << "Create duplicate fd: " << fd; } fds_.insert(fd); } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.h index ac4bddccf2..e4eaaa696b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.cpp index c4431207f5..9f6da8a90a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.h index 5f9f0e94f6..b278bf4b89 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/PollableFd.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/PollableFd.h index 01fb5857e4..4fbe49b857 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/PollableFd.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/PollableFd.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.cpp index d149246fd1..92dcc6d7d4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.h index cc8d6a3bc0..4800ab8d37 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.cpp index 4b6366980e..083199b408 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.h index b05d9a62a2..3d365eda90 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.cpp index 3fa0d19389..e65468fde2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.h index b938b58c7e..c86935b3e6 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -38,8 +38,8 @@ namespace detail { class ThreadPthread { public: ThreadPthread() = default; - ThreadPthread(const ThreadPthread &other) = delete; - ThreadPthread &operator=(const ThreadPthread &other) = delete; + ThreadPthread(const ThreadPthread &) = delete; + ThreadPthread &operator=(const ThreadPthread &) = delete; ThreadPthread(ThreadPthread &&other) noexcept : is_inited_(std::move(other.is_inited_)), thread_(other.thread_) { } ThreadPthread &operator=(ThreadPthread &&other) noexcept { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadStl.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadStl.h index 06dec7ccc0..6ef1d87b2d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadStl.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadStl.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -35,8 +35,8 @@ namespace detail { class ThreadStl { public: ThreadStl() = default; - ThreadStl(const ThreadStl &other) = delete; - ThreadStl &operator=(const ThreadStl &other) = delete; + ThreadStl(const ThreadStl &) = delete; + ThreadStl &operator=(const ThreadStl &) = delete; ThreadStl(ThreadStl &&) = default; ThreadStl &operator=(ThreadStl &&) = default; ~ThreadStl() { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.cpp index 6f40ee4a13..bcd7770afb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.h index f68bbac48c..e31533a40e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/skip_eintr.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/skip_eintr.h index 6fde635680..a2a2c495da 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/skip_eintr.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/skip_eintr.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.cpp deleted file mode 100644 index b564c27064..0000000000 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.cpp +++ /dev/null @@ -1,222 +0,0 @@ -#include "td/utils/common.h" - -/* - * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska HÃļgskolan - * (Royal Institute of Technology, Stockholm, Sweden). - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -static const char * -inet_ntop_v4 (const void *src, char *dst, size_t size) -{ - const char digits[] = "0123456789"; - int i; - struct in_addr *addr = (struct in_addr *)src; - u_long a = ntohl(addr->s_addr); - const char *orig_dst = dst; - - if (size < INET_ADDRSTRLEN) { - errno = ENOSPC; - return NULL; - } - for (i = 0; i < 4; ++i) { - int n = (a >> (24 - i * 8)) & 0xFF; - int non_zerop = 0; - - if (non_zerop || n / 100 > 0) { - *dst++ = digits[n / 100]; - n %= 100; - non_zerop = 1; - } - if (non_zerop || n / 10 > 0) { - *dst++ = digits[n / 10]; - n %= 10; - non_zerop = 1; - } - *dst++ = digits[n]; - if (i != 3) - *dst++ = '.'; - } - *dst++ = '\0'; - return orig_dst; -} - -static const char * -inet_ntop_v6 (const void *src, char *dst, size_t size) -{ - const char xdigits[] = "0123456789abcdef"; - int i; - const struct in6_addr *addr = (struct in6_addr *)src; - const u_char *ptr = addr->s6_addr; - const char *orig_dst = dst; - int compressed = 0; - - if (size < INET6_ADDRSTRLEN) { - errno = ENOSPC; - return NULL; - } - for (i = 0; i < 8; ++i) { - int non_zerop = 0; - - if (compressed == 0 && - ptr[0] == 0 && ptr[1] == 0 && - i <= 5 && - ptr[2] == 0 && ptr[3] == 0 && - ptr[4] == 0 && ptr[5] == 0) { - - compressed = 1; - - if (i == 0) - *dst++ = ':'; - *dst++ = ':'; - - for (ptr += 6, i += 3; - i < 8 && ptr[0] == 0 && ptr[1] == 0; - ++i, ptr += 2); - - if (i >= 8) - break; - } - - if (non_zerop || (ptr[0] >> 4)) { - *dst++ = xdigits[ptr[0] >> 4]; - non_zerop = 1; - } - if (non_zerop || (ptr[0] & 0x0F)) { - *dst++ = xdigits[ptr[0] & 0x0F]; - non_zerop = 1; - } - if (non_zerop || (ptr[1] >> 4)) { - *dst++ = xdigits[ptr[1] >> 4]; - non_zerop = 1; - } - *dst++ = xdigits[ptr[1] & 0x0F]; - if (i != 7) - *dst++ = ':'; - ptr += 2; - } - *dst++ = '\0'; - return orig_dst; -} - -LPCSTR WSAAPI inet_ntop_(INT af, PVOID src, LPSTR dst, size_t size) -{ - LPCSTR pdst; - if (!dst) - { - SetLastError( STATUS_INVALID_PARAMETER ); - return NULL; - } - switch (af) { - case AF_INET : - pdst = inet_ntop_v4 (src, dst, size); - break; - - case AF_INET6 : - pdst = inet_ntop_v6 (src, dst, size); - break; - - default: - WSASetLastError( WSAEAFNOSUPPORT ); - return NULL; - } - - if (!pdst) SetLastError( STATUS_INVALID_PARAMETER ); - return pdst; -} - -INT WSAAPI inet_pton_(INT af, LPCSTR csrc, PVOID dst) -{ - char * src; - - if (!dst || !csrc) - { - WSASetLastError(WSAEFAULT); - return SOCKET_ERROR; - } - - if (csrc == NULL || (src = strdup(csrc)) == NULL) { - SetLastError( ENOMEM ); - return 0; - } - - switch (af) { - case AF_INET: - { - struct sockaddr_in si4; - INT r; - INT s = sizeof(si4); - - si4.sin_family = AF_INET; - r = WSAStringToAddressA(src, AF_INET, NULL, (LPSOCKADDR) &si4, &s); - free(src); - src = NULL; - - if (r == 0) { - memcpy(dst, &si4.sin_addr, sizeof(si4.sin_addr)); - return 1; - } - } - break; - - case AF_INET6: - { - struct sockaddr_in6 si6; - INT r; - INT s = sizeof(si6); - - si6.sin6_family = AF_INET6; - r = WSAStringToAddressA(src, AF_INET6, NULL, (LPSOCKADDR) &si6, &s); - free(src); - src = NULL; - - if (r == 0) { - memcpy(dst, &si6.sin6_addr, sizeof(si6.sin6_addr)); - return 1; - } - } - break; - - default: - WSASetLastError( WSAEAFNOSUPPORT ); - return SOCKET_ERROR; - } - - /* the call failed */ - { - int le = WSAGetLastError(); - - if (le == WSAEINVAL) - return SOCKET_ERROR; - - WSASetLastError(le); - return -1; - } -} diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.h deleted file mode 100644 index 6df7ec06b1..0000000000 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska HÃļgskolan - * (Royal Institute of Technology, Stockholm, Sweden). - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -LPCSTR WSAAPI inet_ntop_(INT af, PVOID src, LPSTR dst, size_t size); -INT WSAAPI inet_pton_(INT af, LPCSTR csrc, PVOID dst); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.cpp index 2f77457ac4..1c93cf32d6 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -91,7 +91,11 @@ Status rmrf(CSlice path) { case WalkPath::Type::ExitDir: rmdir(path).ignore(); break; - case WalkPath::Type::NotDir: + case WalkPath::Type::RegularFile: + unlink(path).ignore(); + break; + case WalkPath::Type::Symlink: + // never follow symbolic links, but delete the link themselves unlink(path).ignore(); break; } @@ -263,6 +267,8 @@ Result<bool> walk_path_dir(string &path, const WalkFunction &func) TD_WARN_UNUSE Result<bool> walk_path_file(string &path, const WalkFunction &func) TD_WARN_UNUSED_RESULT; +Result<bool> walk_path_symlink(string &path, const WalkFunction &func) TD_WARN_UNUSED_RESULT; + Result<bool> walk_path(string &path, const WalkFunction &func) TD_WARN_UNUSED_RESULT; Result<bool> walk_path_subdir(string &path, DIR *dir, const WalkFunction &func) { @@ -296,6 +302,8 @@ Result<bool> walk_path_subdir(string &path, DIR *dir, const WalkFunction &func) status = walk_path_dir(path, func); } else if (entry->d_type == DT_REG) { status = walk_path_file(path, func); + } else if (entry->d_type == DT_LNK) { + status = walk_path_symlink(path, func); } #else #if !TD_SOLARIS @@ -354,7 +362,18 @@ Result<bool> walk_path_dir(string &path, const WalkFunction &func) { } Result<bool> walk_path_file(string &path, const WalkFunction &func) { - switch (func(path, WalkPath::Type::NotDir)) { + switch (func(path, WalkPath::Type::RegularFile)) { + case WalkPath::Action::Abort: + return false; + case WalkPath::Action::SkipDir: + case WalkPath::Action::Continue: + break; + } + return true; +} + +Result<bool> walk_path_symlink(string &path, const WalkFunction &func) { + switch (func(path, WalkPath::Type::Symlink)) { case WalkPath::Action::Abort: return false; case WalkPath::Action::SkipDir: @@ -368,17 +387,20 @@ Result<bool> walk_path(string &path, const WalkFunction &func) { TRY_RESULT(fd, FileFd::open(path, FileFd::Read)); TRY_RESULT(stat, fd.stat()); - bool is_dir = stat.is_dir_; - bool is_reg = stat.is_reg_; - if (is_dir) { + if (stat.is_dir_) { return walk_path_dir(path, std::move(fd), func); } fd.close(); - if (is_reg) { + + if (stat.is_reg_) { return walk_path_file(path, func); } + if (stat.is_symbolic_link_) { + return walk_path_symlink(path, func); + } + return true; } } // namespace detail @@ -434,6 +456,7 @@ Result<string> realpath(CSlice slice, bool ignore_access_denied) { if (res.empty()) { return Status::Error("Empty path"); } + // TODO GetFullPathName doesn't resolve symbolic links if (!slice.empty() && slice.end()[-1] == TD_DIR_SLASH) { if (res.back() != TD_DIR_SLASH) { res += TD_DIR_SLASH; @@ -588,14 +611,24 @@ static Result<bool> walk_path_dir(const std::wstring &dir_name, if (!is_ok) { return false; } - } else { - switch (func(entry_name, WalkPath::Type::NotDir)) { + } else if ((file_data.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == 0) { + switch (func(entry_name, WalkPath::Type::RegularFile)) { case WalkPath::Action::Abort: return false; case WalkPath::Action::SkipDir: case WalkPath::Action::Continue: break; } + } else if (file_data.dwReserved0 == IO_REPARSE_TAG_SYMLINK) { + switch (func(entry_name, WalkPath::Type::Symlink)) { + case WalkPath::Action::Abort: + return false; + case WalkPath::Action::SkipDir: + case WalkPath::Action::Continue: + break; + } + } else { + // skip other reparse points } } auto status = FindNextFileW(handle, &file_data); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.h index 0ac73ccb31..613a5027f4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -44,7 +44,7 @@ Result<string> mkdtemp(CSlice dir, Slice prefix) TD_WARN_UNUSED_RESULT; class WalkPath { public: enum class Action { Continue, Abort, SkipDir }; - enum class Type { EnterDir, ExitDir, NotDir }; + enum class Type { EnterDir, ExitDir, RegularFile, Symlink }; template <class F, class R = decltype(std::declval<F>()("", Type::ExitDir))> static TD_WARN_UNUSED_RESULT std::enable_if_t<std::is_same<R, Action>::value, Status> run(CSlice path, F &&func) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.cpp index 9fdd36528e..84d7cc0e48 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.h index 0d896ff3c2..5772948750 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -99,7 +99,7 @@ #undef TD_HAVE_ATOMIC_SHARED_PTR #endif -// Also no atomic operations on std::shared_ptr when clang __has_feature(cxx_atomic) is defined and zero +// Also, no atomic operations on std::shared_ptr when clang __has_feature(cxx_atomic) is defined and zero #if defined(__has_feature) #if !__has_feature(cxx_atomic) #undef TD_HAVE_ATOMIC_SHARED_PTR diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.cpp index 8bc94dbfa2..1fc9ee02b1 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.h index a987a7bdac..b8b62bd192 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.cpp index d61cf69d94..bbbf1f3428 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.h index fa5fbae976..14c923fe1b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.cpp index c35de1f2ad..3352ff67dd 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -8,6 +8,10 @@ #include "td/utils/port/config.h" +#if TD_PORT_WINDOWS +#include "td/utils/port/Clocks.h" +#endif + #if TD_PORT_POSIX #if _POSIX_C_SOURCE >= 199309L #include <time.h> @@ -20,8 +24,15 @@ namespace td { void usleep_for(int32 microseconds) { #if TD_PORT_WINDOWS - int32 milliseconds = microseconds / 1000 + (microseconds % 1000 ? 1 : 0); - Sleep(milliseconds); + if (microseconds < 2000) { + auto end_time = Clocks::monotonic() + microseconds * 1e-6; + do { + SwitchToThread(); + } while (Clocks::monotonic() < end_time); + } else { + int32 milliseconds = microseconds / 1000 + (microseconds % 1000 ? 1 : 0); + Sleep(milliseconds); + } #else #if _POSIX_C_SOURCE >= 199309L timespec ts; diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.h index 2f9d27a3d5..12a605cc04 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.cpp index 7fd07b2a62..a87b3f9375 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.h index 469a20dfe6..c975545527 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread.h index 35053a32fb..e700c3ba3c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.cpp index ee56a119cf..a88e366512 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.h index deaeb09508..3e1e4546a8 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.cpp index 5c380b5e05..6da28ee26c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.h index aacb0210aa..442ddd2bc2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.cpp index b793405b82..7307052de3 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.h index 041df03e83..14e94886a9 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.cpp index fd6f4dfa23..e36ef24b2a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.h index fe453380d3..d4de2af65c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/queue.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/queue.h index e6d69aae3e..ddc5053bcb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/queue.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/queue.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.cpp index 54fda579ed..f1b1f37b16 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -84,7 +84,7 @@ class RegressionTesterImpl final : public RegressionTester { auto wa_path = db_cache_dir_ + "WA"; write_file(wa_path, result).ensure(); return Status::Error(PSLICE() << "Test " << name << " changed: " << tag("expected", old_test_info.result_hash) - << tag("got", hash)); + << tag("received", hash)); } auto result_cache_path = db_cache_dir_ + hash; if (stat(result_cache_path).is_error()) { @@ -182,6 +182,10 @@ void TestsRunner::add_substr_filter(string str) { substr_filters_.push_back(std::move(str)); } +void TestsRunner::set_offset(string str) { + offset_ = std::move(str); +} + void TestsRunner::set_regression_tester(unique_ptr<RegressionTester> regression_tester) { regression_tester_ = std::move(regression_tester); } @@ -202,6 +206,7 @@ bool TestsRunner::run_all_step() { state_.it = 0; } + bool skip_tests = true; while (state_.it != state_.end) { auto &name = tests_[state_.it].first; auto &test = tests_[state_.it].second.test; @@ -214,7 +219,10 @@ bool TestsRunner::run_all_step() { break; } } - if (!ok) { + if (name.find(offset_) != string::npos) { + skip_tests = false; + } + if (!ok || skip_tests) { ++state_.it; continue; } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.h index 69b9206268..26e7ff94f0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/tests.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -12,6 +12,7 @@ #include "td/utils/logging.h" #include "td/utils/port/sleep.h" #include "td/utils/Slice.h" +#include "td/utils/Span.h" #include "td/utils/Status.h" #include <atomic> @@ -93,6 +94,7 @@ class TestsRunner final : public TestContext { void add_test(string name, std::function<unique_ptr<Test>()> test); void add_substr_filter(string str); + void set_offset(string str); void set_stress_flag(bool flag); void run_all(); bool run_all_step(); @@ -108,6 +110,7 @@ class TestsRunner final : public TestContext { }; bool stress_flag_{false}; vector<string> substr_filters_; + string offset_; struct TestInfo { std::function<unique_ptr<Test>()> creator; unique_ptr<Test> test; @@ -165,24 +168,34 @@ string rand_string(int from, int to, size_t len); vector<string> rand_split(Slice str); +template <class T, class R> +void rand_shuffle(MutableSpan<T> v, R &rnd) { + for (size_t i = 1; i < v.size(); i++) { + auto pos = static_cast<size_t>(rnd()) % (i + 1); + using std::swap; + swap(v[i], v[pos]); + } +} + template <class T1, class T2> -void assert_eq_impl(const T1 &expected, const T2 &got, const char *file, int line) { - LOG_CHECK(expected == got) << tag("expected", expected) << tag("got", got) << " in " << file << " at line " << line; +void assert_eq_impl(const T1 &expected, const T2 &received, const char *file, int line) { + LOG_CHECK(expected == received) << tag("expected", expected) << tag("received", received) << " in " << file + << " at line " << line; } template <class T> -void assert_true_impl(const T &got, const char *file, int line) { - LOG_CHECK(got) << "Expected true in " << file << " at line " << line; +void assert_true_impl(const T &received, const char *file, int line) { + LOG_CHECK(received) << "Expected true in " << file << " at line " << line; } } // namespace td -#define ASSERT_EQ(expected, got) ::td::assert_eq_impl((expected), (got), __FILE__, __LINE__) +#define ASSERT_EQ(expected, received) ::td::assert_eq_impl((expected), (received), __FILE__, __LINE__) -#define ASSERT_TRUE(got) ::td::assert_true_impl((got), __FILE__, __LINE__) +#define ASSERT_TRUE(received) ::td::assert_true_impl((received), __FILE__, __LINE__) -#define ASSERT_STREQ(expected, got) \ - ::td::assert_eq_impl(::td::Slice((expected)), ::td::Slice((got)), __FILE__, __LINE__) +#define ASSERT_STREQ(expected, received) \ + ::td::assert_eq_impl(::td::Slice((expected)), ::td::Slice((received)), __FILE__, __LINE__) #define REGRESSION_VERIFY(data) ::td::TestContext::get()->verify(data).ensure() diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_helpers.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_helpers.h index ee5c9e6c3e..4d21238877 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_helpers.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_helpers.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -16,6 +16,7 @@ #include "td/utils/Status.h" #include "td/utils/tl_parsers.h" #include "td/utils/tl_storers.h" +#include "td/utils/unique_value_ptr.h" #include "td/utils/Variant.h" #include <type_traits> @@ -172,6 +173,18 @@ void parse(unique_ptr<T> &ptr, ParserT &parser) { parse(*ptr, parser); } +template <class T, class StorerT> +void store(const unique_value_ptr<T> &ptr, StorerT &storer) { + CHECK(ptr != nullptr); + store(*ptr, storer); +} +template <class T, class ParserT> +void parse(unique_value_ptr<T> &ptr, ParserT &parser) { + CHECK(ptr == nullptr); + ptr = make_unique_value<T>(); + parse(*ptr, parser); +} + template <class Key, class Hash, class KeyEqual, class StorerT> void store(const FlatHashSet<Key, Hash, KeyEqual> &s, StorerT &storer) { storer.store_binary(narrow_cast<int32>(s.size())); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.cpp index d4315a43de..feeb907cac 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -40,8 +40,7 @@ void TlParser::set_error(const string &error_message) { data_len = 0; } else { LOG_CHECK(error_pos != std::numeric_limits<size_t>::max() && data_len == 0 && left_len == 0) - << data_len << " " << left_len << " " << data << " " << &empty_data[0] << " " << error_pos << " " << error - << " " << data << " " << &empty_data; + << data_len << ' ' << left_len << ' ' << data << ' ' << &empty_data[0] << ' ' << error_pos << ' ' << error; data = empty_data; } } diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.h index da9f2144e4..b5d85cc74d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -40,8 +40,8 @@ class TlParser { public: explicit TlParser(Slice slice); - TlParser(const TlParser &other) = delete; - TlParser &operator=(const TlParser &other) = delete; + TlParser(const TlParser &) = delete; + TlParser &operator=(const TlParser &) = delete; void set_error(const string &error_message); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_storers.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_storers.h index 6264226a01..9d37ac71eb 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_storers.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/tl_storers.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -22,8 +22,8 @@ class TlStorerUnsafe { explicit TlStorerUnsafe(unsigned char *buf) : buf_(buf) { } - TlStorerUnsafe(const TlStorerUnsafe &other) = delete; - TlStorerUnsafe &operator=(const TlStorerUnsafe &other) = delete; + TlStorerUnsafe(const TlStorerUnsafe &) = delete; + TlStorerUnsafe &operator=(const TlStorerUnsafe &) = delete; template <class T> void store_binary(const T &x) { @@ -97,8 +97,8 @@ class TlStorerCalcLength { public: TlStorerCalcLength() = default; - TlStorerCalcLength(const TlStorerCalcLength &other) = delete; - TlStorerCalcLength &operator=(const TlStorerCalcLength &other) = delete; + TlStorerCalcLength(const TlStorerCalcLength &) = delete; + TlStorerCalcLength &operator=(const TlStorerCalcLength &) = delete; template <class T> void store_binary(const T &x) { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.cpp index 65cfcf0074..c6216b7912 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.h index e72cb5c8e5..e8b6966a16 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/translit.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/type_traits.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/type_traits.h index 71bbf77b79..69c08bfe8e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/type_traits.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/type_traits.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -7,6 +7,7 @@ #pragma once #include "td/utils/int_types.h" +#include "td/utils/port/platform.h" #include <type_traits> @@ -31,9 +32,13 @@ constexpr size_t member_function_argument_count() { return member_function_class<FunctionT>::argument_count(); } -// no std::is_trivially_copyable in libstdc++ before 5.0 +// there is no std::is_trivially_copyable in libstdc++ before 5.0 #if __GLIBCXX__ +#if TD_CLANG || (TD_GCC && __GNUC__ >= 5) // but clang >= 3.0 and g++ >= 5.0 supports __is_trivially_copyable +#define TD_IS_TRIVIALLY_COPYABLE(T) __is_trivially_copyable(T) +#else #define TD_IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) +#endif #else #define TD_IS_TRIVIALLY_COPYABLE(T) ::std::is_trivially_copyable<T>::value #endif diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/uint128.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/uint128.h index 902900ef27..a9ae3519a0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/uint128.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/uint128.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.cpp index 1b16809f0c..df9a22a96b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.h index 9012e4633f..20e4145ff7 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/unique_ptr.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/unique_ptr.h index c8f3b48d1f..033a47df8c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/unique_ptr.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/unique_ptr.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -21,8 +21,8 @@ class unique_ptr final { using element_type = T; unique_ptr() noexcept = default; - unique_ptr(const unique_ptr &other) = delete; - unique_ptr &operator=(const unique_ptr &other) = delete; + unique_ptr(const unique_ptr &) = delete; + unique_ptr &operator=(const unique_ptr &) = delete; unique_ptr(unique_ptr &&other) noexcept : ptr_(other.release()) { } unique_ptr &operator=(unique_ptr &&other) noexcept { diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/unique_value_ptr.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/unique_value_ptr.h new file mode 100644 index 0000000000..d96a85637e --- /dev/null +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/unique_value_ptr.h @@ -0,0 +1,93 @@ +// +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +#pragma once + +#include "td/utils/unique_ptr.h" + +#include <cstddef> +#include <utility> + +namespace td { + +// copyable by value td::unique_ptr +template <class T> +class unique_value_ptr final { + public: + unique_value_ptr() noexcept = default; + unique_value_ptr(const unique_value_ptr &other) { + if (other != nullptr) { + ptr_ = make_unique<T>(*other); + } + } + unique_value_ptr &operator=(const unique_value_ptr &other) { + if (other == nullptr) { + ptr_ = nullptr; + } else { + ptr_ = make_unique<T>(*other); + } + return *this; + } + unique_value_ptr(unique_value_ptr &&) noexcept = default; + unique_value_ptr &operator=(unique_value_ptr &&) = default; + unique_value_ptr(std::nullptr_t) noexcept { + } + unique_value_ptr(unique_ptr<T> &&ptr) noexcept : ptr_(std::move(ptr)) { + } + T *get() noexcept { + return ptr_.get(); + } + const T *get() const noexcept { + return ptr_.get(); + } + T *operator->() noexcept { + return ptr_.get(); + } + const T *operator->() const noexcept { + return ptr_.get(); + } + T &operator*() noexcept { + return *ptr_; + } + const T &operator*() const noexcept { + return *ptr_; + } + explicit operator bool() const noexcept { + return ptr_ != nullptr; + } + + private: + unique_ptr<T> ptr_; +}; + +template <class T> +bool operator==(const unique_value_ptr<T> &p, std::nullptr_t) { + return !p; +} +template <class T> +bool operator!=(const unique_value_ptr<T> &p, std::nullptr_t) { + return static_cast<bool>(p); +} + +template <class T> +bool operator==(const unique_value_ptr<T> &lhs, const unique_value_ptr<T> &rhs) { + if (lhs == nullptr) { + return rhs == nullptr; + } + return rhs != nullptr && *lhs == *rhs; +} + +template <class T> +bool operator!=(const unique_value_ptr<T> &lhs, const unique_value_ptr<T> &rhs) { + return !(lhs == rhs); +} + +template <class Type, class... Args> +unique_value_ptr<Type> make_unique_value(Args &&...args) { + return unique_value_ptr<Type>(make_unique<Type>(std::forward<Args>(args)...)); +} + +} // namespace td diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.cpp b/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.cpp index 16c31e5b2d..a2c9256f64 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -62,24 +62,6 @@ bool check_utf8(CSlice str) { return false; } -void append_utf8_character(string &str, uint32 ch) { - if (ch <= 0x7f) { - str.push_back(static_cast<char>(ch)); - } else if (ch <= 0x7ff) { - str.push_back(static_cast<char>(0xc0 | (ch >> 6))); // implementation-defined - str.push_back(static_cast<char>(0x80 | (ch & 0x3f))); - } else if (ch <= 0xffff) { - str.push_back(static_cast<char>(0xe0 | (ch >> 12))); // implementation-defined - str.push_back(static_cast<char>(0x80 | ((ch >> 6) & 0x3f))); - str.push_back(static_cast<char>(0x80 | (ch & 0x3f))); - } else { - str.push_back(static_cast<char>(0xf0 | (ch >> 18))); // implementation-defined - str.push_back(static_cast<char>(0x80 | ((ch >> 12) & 0x3f))); - str.push_back(static_cast<char>(0x80 | ((ch >> 6) & 0x3f))); - str.push_back(static_cast<char>(0x80 | (ch & 0x3f))); - } -} - const unsigned char *next_utf8_unsafe(const unsigned char *ptr, uint32 *code) { uint32 a = ptr[0]; if ((a & 0x80) == 0) { @@ -100,6 +82,25 @@ const unsigned char *next_utf8_unsafe(const unsigned char *ptr, uint32 *code) { return ptr; } +unsigned char *append_utf8_character_unsafe(unsigned char *ptr, uint32 code) { + if (code <= 0x7f) { + *ptr++ = static_cast<unsigned char>(code); + } else if (code <= 0x7ff) { + *ptr++ = static_cast<unsigned char>(0xc0 | (code >> 6)); + *ptr++ = static_cast<unsigned char>(0x80 | (code & 0x3f)); + } else if (code <= 0xffff) { + *ptr++ = static_cast<unsigned char>(0xe0 | (code >> 12)); + *ptr++ = static_cast<unsigned char>(0x80 | ((code >> 6) & 0x3f)); + *ptr++ = static_cast<unsigned char>(0x80 | (code & 0x3f)); + } else { + *ptr++ = static_cast<unsigned char>(0xf0 | (code >> 18)); + *ptr++ = static_cast<unsigned char>(0x80 | ((code >> 12) & 0x3f)); + *ptr++ = static_cast<unsigned char>(0x80 | ((code >> 6) & 0x3f)); + *ptr++ = static_cast<unsigned char>(0x80 | (code & 0x3f)); + } + return ptr; +} + string utf8_to_lower(Slice str) { string result; auto pos = str.ubegin(); diff --git a/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.h b/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.h index 27c8b5bd5d..21a02eca1c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.h +++ b/protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.h @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -32,7 +32,24 @@ inline size_t utf8_length(Slice str) { size_t utf8_utf16_length(Slice str); /// appends a Unicode character using UTF-8 encoding -void append_utf8_character(string &str, uint32 ch); +template <class T> +void append_utf8_character(T &str, uint32 code) { + if (code <= 0x7f) { + str.push_back(static_cast<char>(code)); + } else if (code <= 0x7ff) { + str.push_back(static_cast<char>(0xc0 | (code >> 6))); // implementation-defined + str.push_back(static_cast<char>(0x80 | (code & 0x3f))); + } else if (code <= 0xffff) { + str.push_back(static_cast<char>(0xe0 | (code >> 12))); // implementation-defined + str.push_back(static_cast<char>(0x80 | ((code >> 6) & 0x3f))); + str.push_back(static_cast<char>(0x80 | (code & 0x3f))); + } else { + str.push_back(static_cast<char>(0xf0 | (code >> 18))); // implementation-defined + str.push_back(static_cast<char>(0x80 | ((code >> 12) & 0x3f))); + str.push_back(static_cast<char>(0x80 | ((code >> 6) & 0x3f))); + str.push_back(static_cast<char>(0x80 | (code & 0x3f))); + } +} /// moves pointer one UTF-8 character back inline const unsigned char *prev_utf8_unsafe(const unsigned char *ptr) { @@ -45,6 +62,9 @@ inline const unsigned char *prev_utf8_unsafe(const unsigned char *ptr) { /// moves pointer one UTF-8 character forward and saves code of the skipped character in *code const unsigned char *next_utf8_unsafe(const unsigned char *ptr, uint32 *code); +/// appends a Unicode character using UTF-8 encoding and returns updated pointer +unsigned char *append_utf8_character_unsafe(unsigned char *ptr, uint32 code); + /// truncates UTF-8 string to the given length in Unicode characters template <class T> T utf8_truncate(T str, size_t length) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp b/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp index d3bcb934fc..029a4ff366 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -139,7 +139,7 @@ TEST(ChainScheduler, Stress) { int chain_n = rnd.fast(1, ChainsN); td::vector<ChainId> chain_ids(ChainsN); std::iota(chain_ids.begin(), chain_ids.end(), 0); - td::random_shuffle(td::as_mutable_span(chain_ids), rnd); + td::rand_shuffle(td::as_mutable_span(chain_ids), rnd); chain_ids.resize(chain_n); for (auto chain_id : chain_ids) { chains[td::narrow_cast<size_t>(chain_id)].push_back(query); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp b/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp index a90f11d525..5ab1f85ad2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -163,7 +163,7 @@ class ConcurrentHashMapJunction { ConcurrentHashMapJunction(const ConcurrentHashMapJunction &) = delete; ConcurrentHashMapJunction &operator=(const ConcurrentHashMapJunction &) = delete; - ConcurrentHashMapJunction(ConcurrentHashMapJunction &&other) = delete; + ConcurrentHashMapJunction(ConcurrentHashMapJunction &&) = delete; ConcurrentHashMapJunction &operator=(ConcurrentHashMapJunction &&) = delete; ~ConcurrentHashMapJunction() { junction::DefaultQSBR.flush(); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp b/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp index 210ab415cc..6f40ae7b5f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp @@ -1,14 +1,17 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/benchmark.h" +#include "td/utils/common.h" #include "td/utils/Enumerator.h" +#include "td/utils/Random.h" #include "td/utils/tests.h" TEST(Enumerator, simple) { - td::Enumerator<std::string> e; + td::Enumerator<td::string> e; auto b = e.add("b"); auto a = e.add("a"); auto d = e.add("d"); @@ -22,3 +25,21 @@ TEST(Enumerator, simple) { ASSERT_EQ(c, e.add("c")); ASSERT_EQ(d, e.add("d")); } + +TEST(Enumerator, add_benchmark) { + class EnumeratorAddBenchmark final : public td::Benchmark { + public: + td::string get_description() const final { + return "EnumeratorAdd"; + } + + void run(int n) final { + td::Enumerator<int> enumerator; + for (int i = 0; i < n; i++) { + enumerator.add(td::Random::fast(1, 10000000)); + } + td::do_not_optimize_away(enumerator.size()); + } + }; + bench(EnumeratorAddBenchmark()); +} diff --git a/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp b/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp index c97679bb83..e219d38254 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp b/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp index 94ebf8733b..19c4c1ca35 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -92,6 +92,20 @@ static bool operator==(const A &lhs, const A &rhs) { return lhs.a == rhs.a; } +TEST(FlatHashSet, init) { + td::FlatHashSet<td::Slice, td::SliceHash> s{"1", "22", "333", "4444"}; + ASSERT_TRUE(s.size() == 4); + td::string str("1"); + ASSERT_TRUE(s.count(str) == 1); + ASSERT_TRUE(s.count("1") == 1); + ASSERT_TRUE(s.count("22") == 1); + ASSERT_TRUE(s.count("333") == 1); + ASSERT_TRUE(s.count("4444") == 1); + ASSERT_TRUE(s.count("4") == 0); + ASSERT_TRUE(s.count("222") == 0); + ASSERT_TRUE(s.count("") == 0); +} + TEST(FlatHashSet, foreach) { td::FlatHashSet<A, AHash> s; for (auto it : s) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp b/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp index 0c4174db0f..5148626cb2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp b/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp index 6e91d48803..6d97c08770 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp @@ -1,15 +1,104 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #include "td/utils/common.h" #include "td/utils/HttpUrl.h" +#include "td/utils/misc.h" +#include "td/utils/Slice.h" +#include "td/utils/SliceBuilder.h" +#include "td/utils/StringBuilder.h" #include "td/utils/tests.h" #include <utility> +static void test_parse_url(const td::string &url, td::string userinfo, td::string host, bool is_ipv6, + int specified_port, int port) { + for (auto query : {"", "/.com", "#", "?t=1"}) { + auto http_url = td::parse_url(url + query).move_as_ok(); + ASSERT_EQ(userinfo, http_url.userinfo_); + ASSERT_EQ(host, http_url.host_); + ASSERT_EQ(is_ipv6, http_url.is_ipv6_); + ASSERT_EQ(specified_port, http_url.specified_port_); + ASSERT_EQ(port, http_url.port_); + } +} + +static void test_parse_url(const td::string &url, td::Slice error_message) { + for (auto query : {"", "/.com", "#", "?t=1"}) { + auto error = td::parse_url(url + query).move_as_error(); + ASSERT_EQ(error_message, error.message()); + } +} + +TEST(HttpUrl, parse_url) { + test_parse_url("http://localhost:8080", "", "localhost", false, 8080, 8080); + test_parse_url("http://lOcAlhOsT:8080", "", "localhost", false, 8080, 8080); + test_parse_url("http://UsEr:PaSs@lOcAlhOsT:8080", "UsEr:PaSs", "localhost", false, 8080, 8080); + test_parse_url("http://example.com", "", "example.com", false, 0, 80); + test_parse_url("https://example.com", "", "example.com", false, 0, 443); + test_parse_url("https://example.com:65535", "", "example.com", false, 65535, 65535); + test_parse_url("https://example.com:00000071", "", "example.com", false, 71, 71); + test_parse_url("example.com?://", "", "example.com", false, 0, 80); + test_parse_url("example.com/://", "", "example.com", false, 0, 80); + test_parse_url("example.com#://", "", "example.com", false, 0, 80); + test_parse_url("@example.com#://", "", "example.com", false, 0, 80); + test_parse_url("test@example.com#://", "test", "example.com", false, 0, 80); + test_parse_url("test:pass@example.com#://", "test:pass", "example.com", false, 0, 80); + test_parse_url("te%ffst:pa%8Dss@examp%9Ele.com#://", "te%ffst:pa%8Dss", "examp%9ele.com", false, 0, 80); + test_parse_url("http://[2001:db8:85a3:8d3:1319:8a2e:370:7348]", "", "[2001:db8:85a3:8d3:1319:8a2e:370:7348]", true, 0, + 80); + test_parse_url("https://test@[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443/", "test", + "[2001:db8:85a3:8d3:1319:8a2e:370:7348]", true, 443, 443); + test_parse_url("http://[64:ff9b::255.255.255.255]", "", "[64:ff9b::255.255.255.255]", true, 0, 80); + test_parse_url("http://255.255.255.255", "", "255.255.255.255", false, 0, 80); + test_parse_url("http://255.255.255.com", "", "255.255.255.com", false, 0, 80); + test_parse_url("https://exam%00ple.com", "", "exam%00ple.com", false, 0, 443); + + test_parse_url("example.com://", "Unsupported URL protocol"); + test_parse_url("https://example.com:65536", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:0", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:0x1", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:", "Wrong port number specified in the URL"); + test_parse_url("https://example.com:-1", "Wrong port number specified in the URL"); + test_parse_url("example.com@://", "Wrong port number specified in the URL"); + test_parse_url("example.com@:1//", "URL host is empty"); + test_parse_url("example.com@.:1//", "Host is invalid"); + test_parse_url("exam%0gple.com", "Wrong percent-encoded symbol in URL host"); + test_parse_url("a%g0b@example.com", "Wrong percent-encoded symbol in URL userinfo"); + + for (int c = 1; c <= 255; c++) { + if (c == '%') { + continue; + } + auto ch = static_cast<char>(c); + if (td::is_alnum(ch) || c >= 128 || td::string(".-_!$,~*\'();&+=").find(ch) != td::string::npos) { + // allowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, td::string(1, ch) + "a", "b" + td::string(1, td::to_lower(ch)), + false, 0, 80); + } else if (c == ':') { + // allowed in userinfo character + test_parse_url(PSTRING() << ch << "a@b" << ch << 1, td::string(1, ch) + "a", "b", false, 1, 1); + test_parse_url(PSTRING() << ch << "a@b" << ch, "Wrong port number specified in the URL"); + test_parse_url(PSTRING() << ch << "a@b", td::string(1, ch) + "a", "b", false, 0, 80); + } else if (c == '#' || c == '?' || c == '/') { + // special disallowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, "URL host is empty"); + } else if (c == '@') { + // special disallowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, "URL host is empty"); + test_parse_url(PSTRING() << ch << "a@b" << ch << '1', "Disallowed character in URL userinfo"); + } else { + // generic disallowed character + test_parse_url(PSTRING() << ch << "a@b" << ch, "Disallowed character in URL host"); + test_parse_url(PSTRING() << "a@b" << ch, "Disallowed character in URL host"); + test_parse_url(PSTRING() << ch << "a@b", "Disallowed character in URL userinfo"); + } + } +} + static void test_get_url_query_file_name(const char *prefix, const char *suffix, const char *file_name) { auto path = td::string(prefix) + td::string(file_name) + td::string(suffix); ASSERT_STREQ(file_name, td::get_url_query_file_name(path)); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/List.cpp b/protocols/Telegram/tdlib/td/tdutils/test/List.cpp index 02ab080d89..1008ed730a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/List.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/List.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp index c038303c37..c2fbf56074 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp b/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp index 4ac882dcaf..9bdabfac57 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp index 43b0ccf086..49822896f3 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp b/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp index 8600eb9f19..5580be0e85 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp b/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp index c5c963bedc..fb31366a7a 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp b/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp index a4762e25f3..935b9b8358 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp b/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp index 7327f0dbb3..8cdfb1533f 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp b/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp index 453a63179f..c0ccabf793 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp index 38def77772..722ab6f85e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp index ec4096c850..f92cf253c0 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp index 0f0cc58796..ca101e4ab8 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp b/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp index e81c406bbe..23aea6c9ec 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp b/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp index 4bc406cc64..0f155efc54 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp b/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp index 9e81ef132c..5b4fd37e69 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -23,7 +23,7 @@ static td::vector<td::string> strings{"", "1", "short test string", td::string(1 TEST(Crypto, Aes) { td::Random::Xorshift128plus rnd(123); td::UInt256 key; - rnd.bytes(as_slice(key)); + rnd.bytes(as_mutable_slice(key)); td::string plaintext(16, '\0'); td::string encrypted(16, '\0'); td::string decrypted(16, '\0'); @@ -34,8 +34,8 @@ TEST(Crypto, Aes) { td::AesState decryptor; decryptor.init(as_slice(key), false); - encryptor.encrypt(td::as_slice(plaintext).ubegin(), td::as_slice(encrypted).ubegin(), 16); - decryptor.decrypt(td::as_slice(encrypted).ubegin(), td::as_slice(decrypted).ubegin(), 16); + encryptor.encrypt(td::as_slice(plaintext).ubegin(), td::as_mutable_slice(encrypted).ubegin(), 16); + decryptor.decrypt(td::as_slice(encrypted).ubegin(), td::as_mutable_slice(decrypted).ubegin(), 16); CHECK(decrypted == plaintext); CHECK(decrypted != encrypted); @@ -135,7 +135,7 @@ TEST(Crypto, AesIgeState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.encrypt(td::Slice(s).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_ige_encrypt(as_slice(key), as_slice(iv_copy), td::Slice(s).substr(pos, len), + td::aes_ige_encrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(s).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -149,7 +149,7 @@ TEST(Crypto, AesIgeState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.decrypt(td::Slice(t).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_ige_decrypt(as_slice(key), as_slice(iv_copy), td::Slice(u).substr(pos, len), + td::aes_ige_decrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(u).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -191,7 +191,7 @@ TEST(Crypto, AesCbcState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.encrypt(td::Slice(s).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_cbc_encrypt(as_slice(key), as_slice(iv_copy), td::Slice(s).substr(pos, len), + td::aes_cbc_encrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(s).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -205,7 +205,7 @@ TEST(Crypto, AesCbcState) { for (const auto &str : td::rand_split(td::string(length / 16, '\0'))) { auto len = 16 * str.size(); state.decrypt(td::Slice(t).substr(pos, len), td::MutableSlice(t).substr(pos, len)); - td::aes_cbc_decrypt(as_slice(key), as_slice(iv_copy), td::Slice(u).substr(pos, len), + td::aes_cbc_decrypt(as_slice(key), as_mutable_slice(iv_copy), td::Slice(u).substr(pos, len), td::MutableSlice(u).substr(pos, len)); pos += len; } @@ -221,7 +221,7 @@ TEST(Crypto, Sha256State) { for (auto length : {0, 1, 31, 32, 33, 9999, 10000, 10001, 999999, 1000001}) { auto s = td::rand_string(std::numeric_limits<char>::min(), std::numeric_limits<char>::max(), length); td::UInt256 baseline; - td::sha256(s, as_slice(baseline)); + td::sha256(s, as_mutable_slice(baseline)); td::Sha256State state; state.init(); @@ -232,7 +232,7 @@ TEST(Crypto, Sha256State) { } state = std::move(state2); td::UInt256 result; - state.extract(as_slice(result)); + state.extract(as_mutable_slice(result)); ASSERT_TRUE(baseline == result); } } @@ -367,7 +367,7 @@ TEST(Crypto, crc32c_benchmark) { explicit Crc32cExtendBenchmark(size_t chunk_size) : chunk_size_(chunk_size) { } td::string get_description() const final { - return PSTRING() << "Crc32c with chunk_size=" << chunk_size_; + return PSTRING() << "CRC32C with chunk_size = " << chunk_size_; } void start_up_n(int n) final { if (n > (1 << 20)) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp b/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp index c8e6539a99..0efb17429b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp @@ -1,18 +1,22 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/common.h" #include "td/utils/emoji.h" #include "td/utils/tests.h" TEST(Emoji, is_emoji) { ASSERT_TRUE(!td::is_emoji("")); ASSERT_TRUE(td::is_emoji("đŠđŧââ¤âđâđŠđģ")); + ASSERT_TRUE(td::is_emoji("đŠđŧââ¤âđâđŠđģī¸")); // not in RGI emoji ZWJ sequence set ASSERT_TRUE(td::is_emoji("đŠđŧââ¤ī¸âđâđŠđģ")); + ASSERT_TRUE(td::is_emoji("đŠđŧââ¤ī¸âđâđŠđģī¸")); ASSERT_TRUE(!td::is_emoji("đŠđŧââ¤ī¸ī¸âđâđŠđģ")); ASSERT_TRUE(td::is_emoji("â")); + ASSERT_TRUE(td::is_emoji("âī¸")); ASSERT_TRUE(td::is_emoji("â")); ASSERT_TRUE(td::is_emoji("đĒ")); ASSERT_TRUE(td::is_emoji("2ī¸âŖ")); @@ -27,6 +31,21 @@ TEST(Emoji, is_emoji) { ASSERT_TRUE(td::is_emoji("â")); ASSERT_TRUE(td::is_emoji("đ")); ASSERT_TRUE(td::is_emoji("đ§âđ")); + ASSERT_TRUE(td::is_emoji("Šī¸")); + ASSERT_TRUE(td::is_emoji("Š")); + ASSERT_TRUE(!td::is_emoji("Šī¸ī¸")); + ASSERT_TRUE(td::is_emoji("đĩī¸ââī¸")); + ASSERT_TRUE(td::is_emoji("đĩââī¸")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(td::is_emoji("đĩī¸ââ")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(td::is_emoji("đĩââ")); + ASSERT_TRUE(td::is_emoji("đī¸ââī¸")); + ASSERT_TRUE(td::is_emoji("đī¸ââī¸")); + ASSERT_TRUE(td::is_emoji("đââī¸")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(td::is_emoji("đââī¸")); // not in RGI emoji ZWJ sequence set + ASSERT_TRUE(!td::is_emoji("aâđ¤âđ¨")); + ASSERT_TRUE(!td::is_emoji("đŠâaâđ¨")); + ASSERT_TRUE(!td::is_emoji("đŠâđ¤âa")); + ASSERT_TRUE(td::is_emoji("đŠâđ¤âđ¨")); // not in RGI emoji ZWJ sequence set } static void test_get_fitzpatrick_modifier(td::string emoji, int result) { @@ -60,17 +79,18 @@ TEST(Emoji, get_fitzpatrick_modifier) { test_get_fitzpatrick_modifier("đ§âđ", 0); } -static void test_remove_emoji_modifiers(td::string emoji, const td::string &result) { - ASSERT_STREQ(result, td::remove_emoji_modifiers(emoji)); - td::remove_emoji_modifiers_in_place(emoji); +static void test_remove_emoji_modifiers(td::string emoji, const td::string &result, bool remove_selectors = true) { + ASSERT_STREQ(result, td::remove_emoji_modifiers(emoji, remove_selectors)); + td::remove_emoji_modifiers_in_place(emoji, remove_selectors); ASSERT_STREQ(result, emoji); - ASSERT_STREQ(emoji, td::remove_emoji_modifiers(emoji)); + ASSERT_STREQ(emoji, td::remove_emoji_modifiers(emoji, remove_selectors)); } TEST(Emoji, remove_emoji_modifiers) { test_remove_emoji_modifiers("", ""); test_remove_emoji_modifiers("đŠđŧââ¤âđâđŠđģ", "đŠââ¤âđâđŠ"); test_remove_emoji_modifiers("đŠđŧââ¤ī¸âđâđŠđģ", "đŠââ¤âđâđŠ"); + test_remove_emoji_modifiers("đŠđŧââ¤ī¸âđâđŠđģ", "đŠââ¤ī¸âđâđŠ", false); test_remove_emoji_modifiers("đđģ", "đ"); test_remove_emoji_modifiers("đđŧ", "đ"); test_remove_emoji_modifiers("đđŊ", "đ"); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp b/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp index de2def1e5e..0102aee036 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp b/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp index 32d75474e8..d22c329dd2 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -34,7 +34,7 @@ static void test_gzencode(const td::string &s) { auto r = td::gzencode(s, td::max(2, static_cast<int>(100 / s.size()))); ASSERT_TRUE(!r.empty()); LOG(INFO) << "Encoded string of size " << s.size() << " in " << (td::Time::now() - begin_time) - << " with compression ratio " << static_cast<double>(r.size()) / static_cast<double>(s.size()); + << " seconds with compression ratio " << static_cast<double>(r.size()) / static_cast<double>(s.size()); } TEST(Gzip, gzencode) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp b/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp index f07f58c8f0..dbfcaa992b 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -17,6 +17,7 @@ #include "td/utils/Slice.h" #include "td/utils/Span.h" #include "td/utils/StringBuilder.h" +#include "td/utils/tests.h" #include "td/utils/Time.h" #include "td/utils/VectorQueue.h" @@ -204,7 +205,7 @@ static void BM_Get(benchmark::State &state) { } std::size_t key_i = 0; - td::random_shuffle(td::as_mutable_span(keys), rnd); + td::rand_shuffle(td::as_mutable_span(keys), rnd); auto next_key = [&] { key_i++; if (key_i == data.size()) { diff --git a/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp b/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp index 02b6d81424..43072fb97e 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/heap.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -23,7 +23,7 @@ TEST(Heap, sort_random_perm) { v[i] = i; } td::Random::Xorshift128plus rnd(123); - td::random_shuffle(td::as_mutable_span(v), rnd); + td::rand_shuffle(td::as_mutable_span(v), rnd); td::vector<td::HeapNode> nodes(n); td::KHeap<int> kheap; for (int i = 0; i < n; i++) { @@ -46,10 +46,12 @@ class CheckedHeap { nodes[i].value = i; } } + static void xx(int key, const td::HeapNode *heap_node) { const Node *node = static_cast<const Node *>(heap_node); std::fprintf(stderr, "(%d;%d)", node->key, node->value); } + void check() const { for (auto p : set_heap) { std::fprintf(stderr, "(%d;%d)", p.first, p.second); @@ -59,13 +61,16 @@ class CheckedHeap { std::fprintf(stderr, "\n"); kheap.check(); } + int random_id() const { CHECK(!empty()); return ids[td::Random::fast(0, static_cast<int>(ids.size() - 1))]; } + std::size_t size() const { return ids.size(); } + bool empty() const { return ids.empty(); } @@ -77,8 +82,8 @@ class CheckedHeap { ASSERT_EQ(res, kheap.top_key()); return res; } + int insert(int key) { - // std::fprintf(stderr, "insert %d\n", key); int id; if (free_ids.empty()) { UNREACHABLE(); @@ -96,15 +101,15 @@ class CheckedHeap { set_heap.emplace(key, id); return id; } + void fix_key(int new_key, int id) { - // std::fprintf(stderr, "fix key %d %d (old_key = %d)\n", new_key, id, nodes[id].key); set_heap.erase(std::make_pair(nodes[id].key, id)); nodes[id].key = new_key; kheap.fix(new_key, &nodes[id]); set_heap.emplace(new_key, id); } + void erase(int id) { - // std::fprintf(stderr, "erase %d\n", id); int pos = rev_ids[id]; CHECK(pos != -1); ids[pos] = ids.back(); @@ -116,8 +121,8 @@ class CheckedHeap { kheap.erase(&nodes[id]); set_heap.erase(std::make_pair(nodes[id].key, id)); } + void pop() { - // std::fprintf(stderr, "pop\n"); CHECK(!empty()); Node *node = static_cast<Node *>(kheap.pop()); int id = node->value; diff --git a/protocols/Telegram/tdlib/td/tdutils/test/json.cpp b/protocols/Telegram/tdlib/td/tdutils/test/json.cpp index 4e57b2d562..8b42751a3d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/json.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/json.cpp @@ -1,9 +1,10 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/common.h" #include "td/utils/JsonBuilder.h" #include "td/utils/logging.h" #include "td/utils/Slice.h" diff --git a/protocols/Telegram/tdlib/td/tdutils/test/log.cpp b/protocols/Telegram/tdlib/td/tdutils/test/log.cpp index 34af21353c..707300248c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/log.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/log.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -168,7 +168,7 @@ TEST(Log, Bench) { class AsyncFileLog final : public td::LogInterface { public: AsyncFileLog() { - file_log_.init("tmplog", std::numeric_limits<td::int64>::max()).ensure(); + file_log_.init("tmplog", std::numeric_limits<td::int64>::max(), false).ensure(); } void do_append(int log_level, td::CSlice slice) final { static_cast<td::LogInterface &>(file_log_).do_append(log_level, slice); diff --git a/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp b/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp index 7db990dad1..e1612a9924 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/misc.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -40,6 +40,7 @@ #include "td/utils/translit.h" #include "td/utils/uint128.h" #include "td/utils/unicode.h" +#include "td/utils/unique_value_ptr.h" #include "td/utils/utf8.h" #include <algorithm> @@ -440,7 +441,7 @@ static void test_to_double_one(td::CSlice str, td::Slice expected, int precision auto result = PSTRING() << td::StringBuilder::FixedDouble(to_double(str), precision); if (expected != result) { LOG(ERROR) << "To double conversion failed: have " << str << ", expected " << expected << ", parsed " - << to_double(str) << ", got " << result; + << to_double(str) << ", receive " << result; } } @@ -516,7 +517,8 @@ TEST(Misc, print_uint) { static void test_idn_to_ascii_one(const td::string &host, const td::string &result) { if (result != td::idn_to_ascii(host).ok()) { - LOG(ERROR) << "Failed to convert " << host << " to " << result << ", got \"" << td::idn_to_ascii(host).ok() << "\""; + LOG(ERROR) << "Failed to convert " << host << " to " << result << ", receive \"" << td::idn_to_ascii(host).ok() + << "\""; } } @@ -834,9 +836,9 @@ TEST(Misc, StringBuilder) { if (use_buf) { ASSERT_EQ(res, sb.as_cslice()); } else { - auto got = sb.as_cslice(); - res.resize(got.size()); - ASSERT_EQ(res, got); + auto sb_result = sb.as_cslice(); + res.resize(sb_result.size()); + ASSERT_EQ(res, sb_result); } } } @@ -1260,3 +1262,32 @@ TEST(FloodControl, Fast) { LOG(INFO) << ++count << ": " << now; } } + +TEST(UniqueValuePtr, Basic) { + auto a = td::make_unique_value<int>(5); + td::unique_value_ptr<int> b; + ASSERT_TRUE(b == nullptr); + ASSERT_TRUE(a != nullptr); + ASSERT_TRUE(a != b); + b = a; + ASSERT_TRUE(a != nullptr); + ASSERT_TRUE(b != nullptr); + ASSERT_TRUE(a == b); + *a = 6; + ASSERT_TRUE(a != nullptr); + ASSERT_TRUE(b != nullptr); + ASSERT_TRUE(a != b); + b = std::move(a); + ASSERT_TRUE(a == nullptr); + ASSERT_TRUE(b != nullptr); + ASSERT_TRUE(a != b); + auto c = td::make_unique_value<td::unique_value_ptr<int>>(a); + ASSERT_TRUE(*c == a); + ASSERT_TRUE(*c == nullptr); + c = td::make_unique_value<td::unique_value_ptr<int>>(b); + ASSERT_TRUE(*c == b); + ASSERT_TRUE(**c == 6); + auto d = c; + ASSERT_TRUE(c == d); + ASSERT_TRUE(6 == **d); +} diff --git a/protocols/Telegram/tdlib/td/tdutils/test/port.cpp b/protocols/Telegram/tdlib/td/tdutils/test/port.cpp index 92b1729977..4b01169fa4 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/port.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/port.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -14,6 +14,7 @@ #include "td/utils/port/path.h" #include "td/utils/port/signals.h" #include "td/utils/port/sleep.h" +#include "td/utils/port/Stat.h" #include "td/utils/port/thread.h" #include "td/utils/port/thread_local.h" #include "td/utils/Random.h" @@ -54,7 +55,7 @@ TEST(Port, files) { const int ITER_COUNT = 1000; for (int i = 0; i < ITER_COUNT; i++) { td::walk_path(main_dir, [&](td::CSlice name, td::WalkPath::Type type) { - if (type == td::WalkPath::Type::NotDir) { + if (type == td::WalkPath::Type::RegularFile) { ASSERT_TRUE(name == fd_path || name == fd2_path); } cnt++; @@ -105,6 +106,7 @@ TEST(Port, files) { fd.seek(0).ensure(); ASSERT_EQ(13u, fd.read(buf_slice.substr(0, 13)).move_as_ok()); ASSERT_STREQ("Habcd world?!", buf_slice.substr(0, 13)); + td::rmrf(main_dir).ensure(); } TEST(Port, SparseFiles) { @@ -167,6 +169,14 @@ TEST(Port, Writev) { td::string content(expected_content.size(), '\0'); ASSERT_EQ(content.size(), fd.read(content).move_as_ok()); ASSERT_EQ(expected_content, content); + + auto stat = td::stat(test_file_path).move_as_ok(); + CHECK(!stat.is_dir_); + CHECK(stat.is_reg_); + CHECK(!stat.is_symbolic_link_); + CHECK(stat.size_ == static_cast<td::int64>(expected_content.size())); + + td::unlink(test_file_path).ignore(); } #if TD_PORT_POSIX && !TD_THREAD_UNSUPPORTED diff --git a/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp b/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp index d919d661b5..0983ea814c 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/pq.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp b/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp index 755acdfa98..a05ff24a2d 100644 --- a/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp +++ b/protocols/Telegram/tdlib/td/tdutils/test/variant.cpp @@ -1,9 +1,10 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // +#include "td/utils/common.h" #include "td/utils/Slice.h" #include "td/utils/StringBuilder.h" #include "td/utils/tests.h" |