summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/tdutils
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tdlib/td/tdutils')
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/CMakeLists.txt3
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/generate/auto/extension_to_mime_type.cpp19
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/generate/auto/mime_type_to_extension.cpp19
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/generate/generate_mime_types_gperf.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/AesCtrByteFlow.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.cpp9
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/AsyncFileLog.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/AtomicRead.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.cpp26
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/BigNum.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedFd.h10
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedReader.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/BufferedUdp.h4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ByteFlow.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/CancellationToken.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ChainScheduler.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ChangesProcessor.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Closure.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/CombinedLog.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ConcurrentHashTable.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Container.h26
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Context.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/DecTree.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Destructor.h18
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Enumerator.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/EpochBasedMemoryReclamation.h18
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ExitGuard.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.cpp9
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FileLog.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMap.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashMapChunks.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashSet.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FlatHashTable.h17
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlFast.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlGlobal.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/FloodControlStrict.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.cpp10
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Gzip.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/GzipByteFlow.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Hash.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/HashMap.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/HashSet.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/HashTableUtils.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/HazardPointers.h18
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Heap.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Hints.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.cpp69
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/HttpUrl.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/JsonBuilder.h20
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/List.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MapNode.h14
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MemoryLog.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MimeType.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MovableValue.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcQueue.h25
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MpmcWaiter.h15
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MpscLinkQueue.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/MpscPollableQueue.h4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Named.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/NullLog.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ObjectPool.h13
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Observer.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.cpp4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/OptionParser.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/OrderedEventsProcessor.h4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Parser.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/PathView.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Promise.h18
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Random.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Random.h21
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ScopeGuard.h16
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/SetNode.h14
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/SharedObjectPool.h10
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/SharedSlice.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Slice-decl.h18
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Slice.h8
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/SliceBuilder.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Span.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/SpinLock.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/StackAllocator.h8
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Status.cpp10
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Status.h148
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/StealingQueue.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Storer.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/StorerBase.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/StringBuilder.h20
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadLocalStorage.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/ThreadSafeCounter.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Time.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Time.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TimedStat.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Timer.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TlDowncastHelper.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TlStorerToString.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TsCerr.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TsFileLog.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TsList.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/TsLog.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/UInt.h8
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/Variant.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/VectorQueue.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashMap.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeHashSet.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/WaitFreeVector.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/algorithm.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/as.h12
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/base64.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/base64.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/benchmark.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/bits.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/buffer.h24
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/check.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/check.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/common.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.cpp43
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/crypto.h22
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.cpp321
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/emoji.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/filesystem.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/find_boundary.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/fixed_vector.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/format.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/int_types.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/invoke.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/logging.cpp4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/logging.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/misc.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/misc.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/optional.h10
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/overloaded.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/Clocks.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/CxCli.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFd.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/EventFdBase.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.cpp266
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/FileFd.h3
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/FromApp.h72
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.cpp22
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/IPAddress.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/IoSlice.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.cpp6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/MemoryMapping.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/Mutex.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/Poll.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollBase.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/PollFlags.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.cpp133
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/RwMutex.h34
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/ServerSocketFd.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.cpp20
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/SocketFd.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.cpp3
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/Stat.h3
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/StdStreams.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.cpp12
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/UdpSocketFd.h3
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/config.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Epoll.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdBsd.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdLinux.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/EventFdWindows.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.cpp6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Iocp.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/KQueue.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.cpp4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/NativeFd.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Poll.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/PollableFd.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/Select.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadIdGuard.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadPthread.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/ThreadStl.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/WineventPoll.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/detail/skip_eintr.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.cpp222
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/inet_ntop.h35
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.cpp51
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/path.h4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/platform.h4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/rlimit.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/signals.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.cpp17
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/sleep.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/stacktrace.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/thread_local.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/uname.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/user.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/port/wstring_convert.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/queue.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/tests.cpp14
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/tests.h31
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/tl_helpers.h15
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.cpp5
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/tl_parsers.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/tl_storers.h10
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/translit.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/translit.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/type_traits.h9
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/uint128.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/unicode.h2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/unique_ptr.h6
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/unique_value_ptr.h93
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.cpp39
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/td/utils/utf8.h24
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/ChainScheduler.cpp4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/ConcurrentHashMap.cpp4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/Enumerator.cpp25
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/EpochBasedMemoryReclamation.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/HashSet.cpp16
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/HazardPointers.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/HttpUrl.cpp91
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/List.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/MpmcQueue.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/MpmcWaiter.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/MpscLinkQueue.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/OptionParser.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/OrderedEventsProcessor.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/SharedObjectPool.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/SharedSlice.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/StealingQueue.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashMap.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/WaitFreeHashSet.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/WaitFreeVector.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/bitmask.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/buffer.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/crypto.cpp22
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/emoji.cpp30
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/filesystem.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/gzip.cpp4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/hashset_benchmark.cpp5
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/heap.cpp17
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/json.cpp3
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/log.cpp4
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/misc.cpp43
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/port.cpp14
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/pq.cpp2
-rw-r--r--protocols/Telegram/tdlib/td/tdutils/test/variant.cpp3
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"