Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package telegram-desktop for
openSUSE:Factory checked in at 2026-06-10 15:52:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/telegram-desktop (Old)
and /work/SRC/openSUSE:Factory/.telegram-desktop.new.2375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "telegram-desktop"
Wed Jun 10 15:52:12 2026 rev:157 rq:1358259 version:6.9.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/telegram-desktop/telegram-desktop.changes
2026-05-19 18:18:19.097771459 +0200
+++
/work/SRC/openSUSE:Factory/.telegram-desktop.new.2375/telegram-desktop.changes
2026-06-10 15:52:38.187433337 +0200
@@ -1,0 +2,10 @@
+Tue Jun 9 21:26:48 UTC 2026 - Илья Индиго <[email protected]>
+
+- Updated tg_owt to git20250512.
+ * Fixed LLVM 20+ build error.
+- Updated td to git20260516.
+ * No changes provides.
+- Updated telegram-desktop to 6.9.1
+ * https://github.com/telegramdesktop/tdesktop/releases/tag/v6.9.1
+
+-------------------------------------------------------------------
Old:
----
td-git20260508.tar.xz
tdesktop-6.8.2-full.tar.gz
tg_owt-git20260123.tar.xz
New:
----
td-git20260516.tar.xz
tdesktop-6.9.1-full.tar.gz
tg_owt-git20250512.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ telegram-desktop.spec ++++++
--- /var/tmp/diff_new_pack.IDMngn/_old 2026-06-10 15:52:40.843543404 +0200
+++ /var/tmp/diff_new_pack.IDMngn/_new 2026-06-10 15:52:40.847543570 +0200
@@ -21,17 +21,17 @@
%define api_id 611335
%define api_hash d524b414d21f4d37f08684c1df41ac9c
%define ada_ver 3.4.4
-%define owt_ver git20260123
-%define td_ver git20260508
+%define owt_ver git20250512
+%define td_ver git20260516
Name: telegram-desktop
-Version: 6.8.2
+Version: 6.9.1
Release: 0
Summary: Messaging application with a focus on speed and security
License: GPL-3.0-only
URL: https://github.com/telegramdesktop/tdesktop
Source0:
https://github.com/telegramdesktop/tdesktop/releases/download/v%{version}/tdesktop-%{version}-full.tar.gz
Source1:
https://github.com/ada-url/ada/archive/refs/tags/v%{ada_ver}.tar.gz#/ada-%{ada_ver}.tar.gz
-# n=tg_owt && cd /tmp && git clone --depth=1 https://github.com/desktop-app/$n
&& pushd $n && git checkout 5c5c71258777d0196dbb3a09cc37d2f56ead28ab &&
v=git$(TZ=UTC date -d @`git log -1 --format=%at` +%Y%m%d) && d=$n-$v &&
f=$d.tar.xz && git submodule update --init --depth=1 && rm -rf .??* && popd &&
mv $n $d && tar c --remove-files "$d" | xz -9e > "$f"
+# n=tg_owt && cd /tmp && git clone --depth=1 https://github.com/desktop-app/$n
&& pushd $n && v=git$(TZ=UTC date -d @`git log -1 --format=%at` +%Y%m%d) &&
d=$n-$v && f=$d.tar.xz && git submodule update --init --depth=1 && rm -rf .??*
&& popd && mv $n $d && tar c --remove-files "$d" | xz -9e > "$f"
Source2: tg_owt-%{owt_ver}.tar.xz
# n=td && cd /tmp && git clone --depth=1 https://github.com/tdlib/$n && pushd
$n && v=git$(TZ=UTC date -d @`git log -1 --format=%at` +%Y%m%d) && d=$n-$v &&
f=$d.tar.xz && rm -rf .??* && popd && mv $n $d && tar c --remove-files "$d" |
xz -9e > "$f"
Source3: td-%{td_ver}.tar.xz
@@ -48,6 +48,7 @@
BuildRequires: noopenh264-devel
BuildRequires: pkgconfig
BuildRequires: python3
+BuildRequires: qt6-shadertools
BuildRequires: cmake(Microsoft.GSL)
BuildRequires: cmake(Qt6GuiPrivate)
BuildRequires: cmake(Qt6WaylandClientPrivate)
@@ -127,11 +128,8 @@
%prep
%setup -q -n tdesktop-%{version}-full -b1 -b2 -b3
-
mv ../ada-%{ada_ver} Telegram/ThirdParty/ada
-
mv ../tg_owt-%{owt_ver} Telegram/ThirdParty/tg_owt
-
mv ../td-%{td_ver} Telegram/ThirdParty/td
%build
++++++ td-git20260508.tar.xz -> td-git20260516.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/CMake/GeneratePkgConfig.cmake
new/td-git20260516/CMake/GeneratePkgConfig.cmake
--- old/td-git20260508/CMake/GeneratePkgConfig.cmake 2026-05-08
16:53:41.123622169 +0200
+++ new/td-git20260516/CMake/GeneratePkgConfig.cmake 2026-06-09
20:14:16.620428536 +0200
@@ -8,12 +8,13 @@
get_filename_component(NAME "${PATH}" NAME_WE)
if (IS_ABSOLUTE ${PATH})
get_filename_component(DIRECTORY_NAME "${PATH}" DIRECTORY)
- if (WIN32)
- set(${OUTPUT} "-l\"${DIRECTORY_NAME}/${NAME}\"" PARENT_SCOPE)
- else()
- get_filename_component(FULL_NAME "${PATH}" NAME)
- set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l:${FULL_NAME}" PARENT_SCOPE)
+ get_filename_component(FULL_NAME "${PATH}" NAME)
+ string(REGEX REPLACE "^lib([^.]+).*$" "\\1" LIB_NAME "${FULL_NAME}")
+ # If the regex didn't match (no lib prefix), fall back to name without
extension
+ if ("${LIB_NAME}" STREQUAL "${FULL_NAME}")
+ set(LIB_NAME "${NAME}")
endif()
+ set(${OUTPUT} "-L\"${DIRECTORY_NAME}\" -l${LIB_NAME}" PARENT_SCOPE)
return()
endif()
@@ -31,17 +32,58 @@
# message("Generating pkg-config for ${TARGET}")
get_filename_component(PREFIX "${CMAKE_INSTALL_PREFIX}" REALPATH)
- get_target_property(LIST "${TARGET}" LINK_LIBRARIES)
+ get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
+ if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ get_target_property(LIST "${TARGET}" INTERFACE_LINK_LIBRARIES)
+ else()
+ get_target_property(LIST "${TARGET}" LINK_LIBRARIES)
+ endif()
+
+ if ("${LIST}" STREQUAL "LIST-NOTFOUND")
+ set(LIST "")
+ endif()
+
+ set(INTERFACE_LIBS "")
+ if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ set(PROPAGATED "")
+ foreach (DEP ${LIST})
+ if (TARGET "${DEP}")
+ get_target_property(DEP_TYPE "${DEP}" TYPE)
+ if ("${DEP_TYPE}" STREQUAL "STATIC_LIBRARY" OR "${DEP_TYPE}" STREQUAL
"SHARED_LIBRARY")
+ list(APPEND INTERFACE_LIBS "${DEP}")
+ get_target_property(DEP_LIBS "${DEP}" LINK_LIBRARIES)
+ if (NOT "${DEP_LIBS}" STREQUAL "DEP_LIBS-NOTFOUND")
+ list(APPEND PROPAGATED ${DEP_LIBS})
+ endif()
+ else()
+ list(APPEND PROPAGATED "${DEP}")
+ endif()
+ else()
+ list(APPEND PROPAGATED "${DEP}")
+ endif()
+ endforeach()
+ if (PROPAGATED)
+ list(REMOVE_DUPLICATES PROPAGATED)
+ endif()
+ set(LIST "${PROPAGATED}")
+ endif()
+
set(REQS "")
set(LIBS "")
foreach (LIB ${LIST})
if (TARGET "${LIB}")
+ if ("${LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
+ get_target_property(LIB_TYPE "${LIB}" TYPE)
+ if ("${LIB_TYPE}" STREQUAL "STATIC_LIBRARY")
+ continue()
+ endif()
+ endif()
set(HAS_REQS 1)
list(APPEND REQS "${LIB}")
else()
set(HAS_LIBS 1)
get_relative_link(LINK "${LIB}")
- if (NOT LINK EQUAL "")
+ if (NOT "${LINK}" STREQUAL "")
list(APPEND LIBS "${LINK}")
endif()
endif()
@@ -77,6 +119,36 @@
endif()
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig")
+
+ get_target_property(TARGET_OUTPUT_NAME "${TARGET}" OUTPUT_NAME)
+ if ("${TARGET_OUTPUT_NAME}" STREQUAL "TARGET_OUTPUT_NAME-NOTFOUND")
+ set(TARGET_OUTPUT_NAME "${TARGET}")
+ endif()
+
+ if ("${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
+ set(LIBS_LINE "")
+ foreach (ILIB ${INTERFACE_LIBS})
+ get_target_property(ILIB_OUTPUT_NAME "${ILIB}" OUTPUT_NAME)
+ if ("${ILIB_OUTPUT_NAME}" STREQUAL "ILIB_OUTPUT_NAME-NOTFOUND")
+ set(ILIB_OUTPUT_NAME "${ILIB}")
+ endif()
+ set(LIBS_LINE "${LIBS_LINE} -l${ILIB_OUTPUT_NAME}")
+ endforeach()
+ set(LIBS_LINE "Libs: -L\"${PKGCONFIG_LIBDIR}\"${LIBS_LINE}")
+ else()
+ set(LIBS_LINE "Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET_OUTPUT_NAME}")
+ endif()
+
+ get_target_property(_td_iface_defs "${TARGET}" INTERFACE_COMPILE_DEFINITIONS)
+ set(CFLAGS_DEFS "")
+ if (NOT "${_td_iface_defs}" STREQUAL "_td_iface_defs-NOTFOUND")
+ foreach(_def ${_td_iface_defs})
+ string(APPEND CFLAGS_DEFS " -D${_def}")
+ endforeach()
+ unset(_def)
+ endif()
+ unset(_td_iface_defs)
+
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc"
CONTENT
"prefix=${PREFIX}
@@ -84,15 +156,13 @@
Description: ${DESCRIPTION}
Version: ${PROJECT_VERSION}
-CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\"
-Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET}
+CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\"${CFLAGS_DEFS}
+${LIBS_LINE}
${REQUIRES}${LIBRARIES}")
- get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
- if (LIBRARY_TYPE STREQUAL "STATIC_LIBRARY" OR LIBRARY_TYPE STREQUAL
"SHARED_LIBRARY")
+ if ("${LIBRARY_TYPE}" STREQUAL "STATIC_LIBRARY" OR "${LIBRARY_TYPE}"
STREQUAL "SHARED_LIBRARY" OR
+ "${LIBRARY_TYPE}" STREQUAL "INTERFACE_LIBRARY")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
- elseif (LIBRARY_TYPE STREQUAL "INTERFACE_LIBRARY")
- # TODO: support interface libraries
else()
message(FATAL_ERROR "Don't know how to handle ${TARGET} of type
${LIBRARY_TYPE}")
endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/README.md new/td-git20260516/README.md
--- old/td-git20260508/README.md 2026-05-08 16:53:41.123622169 +0200
+++ new/td-git20260516/README.md 2026-06-09 20:14:16.620428536 +0200
@@ -21,7 +21,7 @@
* **Cross-platform**: `TDLib` can be used on Android, iOS, Windows, macOS,
Linux, FreeBSD, OpenBSD, NetBSD, illumos, Windows Phone, WebAssembly, watchOS,
tvOS, visionOS, Tizen, Cygwin. It should also work on other *nix systems with
or without minimal effort.
* **Multilanguage**: `TDLib` can be easily used with any programming language
that is able to execute C functions. Additionally, it already has native Java
(using `JNI`) bindings and .NET (using `C++/CLI` and `C++/CX`) bindings.
* **Easy to use**: `TDLib` takes care of all network implementation details,
encryption and local data storage.
-* **High-performance**: in the [Telegram Bot
API](https://core.telegram.org/bots/api), each `TDLib` instance handles more
than 25000 active bots simultaneously.
+* **High-performance**: in the [Telegram Bot
API](https://core.telegram.org/bots/api), each `TDLib` instance handles more
than 37000 active bots simultaneously.
* **Well-documented**: all `TDLib` API methods and public interfaces are fully
documented.
* **Consistent**: `TDLib` guarantees that all updates are delivered in the
right order.
* **Reliable**: `TDLib` remains stable on slow and unreliable Internet
connections.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/benchmark/bench_misc.cpp
new/td-git20260516/benchmark/bench_misc.cpp
--- old/td-git20260508/benchmark/bench_misc.cpp 2026-05-08 16:53:41.124311219
+0200
+++ new/td-git20260516/benchmark/bench_misc.cpp 2026-06-09 20:14:16.621113519
+0200
@@ -13,6 +13,7 @@
#include "td/utils/common.h"
#include "td/utils/logging.h"
#include "td/utils/port/Clocks.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/EventFd.h"
#include "td/utils/port/FileFd.h"
#include "td/utils/port/path.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/benchmark/bench_queue.cpp
new/td-git20260516/benchmark/bench_queue.cpp
--- old/td-git20260508/benchmark/bench_queue.cpp 2026-05-08
16:53:41.124311219 +0200
+++ new/td-git20260516/benchmark/bench_queue.cpp 2026-06-09
20:14:16.621113519 +0200
@@ -8,6 +8,7 @@
#include "td/utils/common.h"
#include "td/utils/logging.h"
#include "td/utils/MpscPollableQueue.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/sleep.h"
#include "td/utils/port/thread.h"
#include "td/utils/queue.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/benchmark/check_tls.cpp
new/td-git20260516/benchmark/check_tls.cpp
--- old/td-git20260508/benchmark/check_tls.cpp 2026-05-08 16:53:41.124311219
+0200
+++ new/td-git20260516/benchmark/check_tls.cpp 2026-06-09 20:14:16.621113519
+0200
@@ -9,6 +9,7 @@
#include "td/utils/format.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/Iocp.h"
#include "td/utils/port/IPAddress.h"
#include "td/utils/port/sleep.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/example/ios/Python-Apple-support.patch
new/td-git20260516/example/ios/Python-Apple-support.patch
--- old/td-git20260508/example/ios/Python-Apple-support.patch 2026-05-08
16:53:41.125290796 +0200
+++ new/td-git20260516/example/ios/Python-Apple-support.patch 2026-06-09
20:14:16.622074872 +0200
@@ -1,5 +1,5 @@
diff --git a/Makefile b/Makefile
-index a1d13e9..8efcf20 100644
+index a1d13e9..34b8d32 100644
--- a/Makefile
+++ b/Makefile
@@ -18,8 +18,13 @@
@@ -79,18 +79,20 @@
# The architecture of the machine doing the build
HOST_ARCH=$(shell uname -m)
HOST_PYTHON=install/macOS/macosx/python-$(PYTHON_VERSION)
-@@ -212,6 +236,10 @@ ARCH-$(target)=$$(subst .,,$$(suffix $(target)))
-
+@@ -213,11 +237,7 @@ ARCH-$(target)=$$(subst .,,$$(suffix $(target)))
ifeq ($(os),macOS)
TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-darwin
-+else ifeq ($(os),visionOS)
-+TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-xros
-+else ifeq ($(os),visionOS-simulator)
-+TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-xros-simulator
else
- ifeq ($$(findstring simulator,$$(SDK-$(target))),)
- TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))
-@@ -662,7 +690,7 @@ BZIP2_FATLIB-$(sdk)=$$(BZIP2_MERGE-$(sdk))/lib/libbz2.a
+- ifeq ($$(findstring simulator,$$(SDK-$(target))),)
+-TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))
+- else
+-TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))-simulator
+- endif
++ TARGET_TRIPLE-$(target)=$$(ARCH-$(target))-apple-$$(OS_LOWER-$(target))
+ endif
+
+ SDK_ROOT-$(target)=$$(shell xcrun --sdk $$(SDK-$(target)) --show-sdk-path)
+@@ -662,7 +682,7 @@ BZIP2_FATLIB-$(sdk)=$$(BZIP2_MERGE-$(sdk))/lib/libbz2.a
XZ_MERGE-$(sdk)=$(PROJECT_DIR)/merge/$(os)/$(sdk)/xz-$(XZ_VERSION)
XZ_FATLIB-$(sdk)=$$(XZ_MERGE-$(sdk))/lib/liblzma.a
@@ -99,7 +101,7 @@
OPENSSL_FATINCLUDE-$(sdk)=$$(OPENSSL_MERGE-$(sdk))/include
OPENSSL_SSL_FATLIB-$(sdk)=$$(OPENSSL_MERGE-$(sdk))/lib/libssl.a
OPENSSL_CRYPTO_FATLIB-$(sdk)=$$(OPENSSL_MERGE-$(sdk))/lib/libcrypto.a
-@@ -716,14 +744,14 @@ $$(OPENSSL_SSL_FATLIB-$(sdk)): $$(foreach
target,$$(SDK_TARGETS-$(sdk)),$$(OPENS
+@@ -716,14 +736,14 @@ $$(OPENSSL_SSL_FATLIB-$(sdk)): $$(foreach
target,$$(SDK_TARGETS-$(sdk)),$$(OPENS
mkdir -p $$(OPENSSL_MERGE-$(sdk))/lib
lipo -create -output $$@ \
$$(foreach
target,$$(SDK_TARGETS-$(sdk)),$$(OPENSSL_SSL_LIB-$$(target))) \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/example/python/tdjson_example.py
new/td-git20260516/example/python/tdjson_example.py
--- old/td-git20260508/example/python/tdjson_example.py 2026-05-08
16:53:41.125758037 +0200
+++ new/td-git20260516/example/python/tdjson_example.py 2026-06-09
20:14:16.622530814 +0200
@@ -89,7 +89,8 @@
if verbosity_level == 0:
sys.exit(f"TDLib fatal error: {message.decode('utf-8')}")
- self._td_set_log_message_callback(2, on_log_message_callback)
+ self._log_message_callback = on_log_message_callback
+ self._td_set_log_message_callback(2, self._log_message_callback)
self.execute(
{"@type": "setLogVerbosityLevel", "new_verbosity_level":
verbosity_level}
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/generate/scheme/td_api.tl
new/td-git20260516/td/generate/scheme/td_api.tl
--- old/td-git20260508/td/generate/scheme/td_api.tl 2026-05-08
16:53:41.153908615 +0200
+++ new/td-git20260516/td/generate/scheme/td_api.tl 2026-06-09
20:14:16.649836034 +0200
@@ -11460,7 +11460,7 @@
//@to_language_code Language code of the language to which the message is
translated. Must be one of
//-"af", "sq", "am", "ar", "hy", "az", "eu", "be", "bn", "bs", "bg", "ca",
"ceb", "zh-CN", "zh", "zh-Hans", "zh-TW", "zh-Hant", "co", "hr", "cs", "da",
"nl", "en", "eo", "et",
//-"fi", "fr", "fy", "gl", "ka", "de", "el", "gu", "ht", "ha", "haw", "he",
"iw", "hi", "hmn", "hu", "is", "ig", "id", "in", "ga", "it", "ja", "jv", "kn",
"kk", "km", "rw", "ko",
-//-"ku", "ky", "lo", "la", "lv", "lt", "lb", "mk", "mg", "ms", "ml", "mt",
"mi", "mr", "mn", "my", "ne", "no", "ny", "or", "ps", "fa", "pl", "pt", "pa",
"ro", "ru", "sm", "gd", "sr",
+//-"ku", "ky", "lo", "la", "lv", "lt", "lb", "mk", "mg", "ms", "ml", "mt",
"mi", "mr", "mn", "my", "ne", "no", "ny", "or", "ps", "fa", "pl", "pt",
"pt-BR", "pa", "ro", "ru", "sm", "gd", "sr",
//-"st", "sn", "sd", "si", "sk", "sl", "so", "es", "su", "sw", "sv", "tl",
"tg", "ta", "tt", "te", "th", "tr", "tk", "uk", "ur", "ug", "uz", "vi", "cy",
"xh", "yi", "ji", "yo", "zu"
//@tone Tone of the translation; must be one of "", "formal", "neutral",
"casual"; defaults to "neutral"
translateText text:formattedText to_language_code:string tone:string =
FormattedText;
@@ -12823,7 +12823,7 @@
transferChatOwnership chat_id:int53 user_id:int53 password:string = Ok;
//@description Returns the user who will become the owner of the chat after 7
days if the current user does not return to the supergroup or channel during
that period or immediately for basic groups; requires owner privileges in the
chat.
-//-Available only for supergroups and channel chats
+//-Available only for basic groups, supergroups, and channel chats
//@chat_id Chat identifier
getChatOwnerAfterLeaving chat_id:int53 = User;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/HttpTransport.cpp
new/td-git20260516/td/mtproto/HttpTransport.cpp
--- old/td-git20260508/td/mtproto/HttpTransport.cpp 2026-05-08
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/HttpTransport.cpp 2026-06-09
20:14:16.652756177 +0200
@@ -24,7 +24,7 @@
namespace mtproto {
namespace http {
-Result<size_t> Transport::read_next(BufferSlice *message, uint32 *quick_ack) {
+Result<size_t> Transport::read_next(BufferSlice *message, uint32 *quick_ack,
int32 *error_code) {
CHECK(can_read());
auto r_size = reader_.read_next(&http_query_);
if (r_size.is_error() || r_size.ok() != 0) {
@@ -37,6 +37,7 @@
return Status::Error("Wrong response");
}
*message = std::move(http_query_.container_[1]);
+ *error_code = http_query_.code_;
turn_ = Write;
return 0;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/HttpTransport.h
new/td-git20260516/td/mtproto/HttpTransport.h
--- old/td-git20260508/td/mtproto/HttpTransport.h 2026-05-08
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/HttpTransport.h 2026-06-09
20:14:16.652756177 +0200
@@ -27,23 +27,31 @@
explicit Transport(string secret) : secret_(std::move(secret)) {
}
- Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) final
TD_WARN_UNUSED_RESULT;
+ Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack, int32
*error_code) final TD_WARN_UNUSED_RESULT;
+
bool support_quick_ack() const final {
return false;
}
+
void write(BufferWriter &&message, bool quick_ack) final;
+
bool can_read() const final;
+
bool can_write() const final;
+
void init(ChainBufferReader *input, ChainBufferWriter *output) final {
reader_.init(input);
output_ = output;
}
size_t max_prepend_size() const final;
+
size_t max_append_size() const final;
+
TransportType get_type() const final {
return {TransportType::Http, 0, ProxySecret::from_raw(secret_)};
}
+
bool use_random_padding() const final;
private:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/IStreamTransport.h
new/td-git20260516/td/mtproto/IStreamTransport.h
--- old/td-git20260508/td/mtproto/IStreamTransport.h 2026-05-08
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/IStreamTransport.h 2026-06-09
20:14:16.652756177 +0200
@@ -22,7 +22,7 @@
IStreamTransport(const IStreamTransport &) = delete;
IStreamTransport &operator=(const IStreamTransport &) = delete;
virtual ~IStreamTransport() = default;
- virtual Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) =
0;
+ virtual Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack,
int32 *error_code) = 0;
virtual bool support_quick_ack() const = 0;
virtual void write(BufferWriter &&message, bool quick_ack) = 0;
virtual bool can_read() const = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/RawConnection.cpp
new/td-git20260516/td/mtproto/RawConnection.cpp
--- old/td-git20260508/td/mtproto/RawConnection.cpp 2026-05-08
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/RawConnection.cpp 2026-06-09
20:14:16.652756177 +0200
@@ -163,7 +163,8 @@
while (transport_->can_read()) {
BufferSlice packet;
uint32 quick_ack = 0;
- TRY_RESULT(wait_size, transport_->read_next(&packet, &quick_ack));
+ int32 error_code = 0;
+ TRY_RESULT(wait_size, transport_->read_next(&packet, &quick_ack,
&error_code));
if (wait_size != 0) {
constexpr size_t MAX_PACKET_SIZE = (1 << 22) + 1024;
if (wait_size > MAX_PACKET_SIZE) {
@@ -189,7 +190,7 @@
PacketInfo packet_info;
packet_info.version = 2;
- TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(),
auth_key, &packet_info));
+ TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(),
error_code, auth_key, &packet_info));
switch (read_result.type()) {
case Transport::ReadResult::Quickack:
TRY_STATUS(on_quick_ack(read_result.quick_ack(), callback));
@@ -283,7 +284,7 @@
RawConnectionHttp(IPAddress ip_address, unique_ptr<StatsCallback>
stats_callback)
: ip_address_(std::move(ip_address)),
stats_callback_(std::move(stats_callback)) {
LOG(DEBUG) << "Create raw connection " << this;
- answers_ = std::make_shared<MpscPollableQueue<Result<BufferSlice>>>();
+ answers_ = std::make_shared<MpscPollableQueue<Result<std::pair<int32,
BufferSlice>>>>();
answers_->init();
}
@@ -369,7 +370,7 @@
unique_ptr<StatsCallback> stats_callback_;
ConnectionManager::ConnectionToken connection_token_;
- std::shared_ptr<MpscPollableQueue<Result<BufferSlice>>> answers_;
+ std::shared_ptr<MpscPollableQueue<Result<std::pair<int32, BufferSlice>>>>
answers_;
std::vector<BufferSlice> to_send_;
void on_read(size_t size, Callback &callback) {
@@ -396,7 +397,9 @@
break;
}
for (int i = 0; i < packets_n; i++) {
- TRY_RESULT(packet, answers_->reader_get_unsafe());
+ TRY_RESULT(answer, answers_->reader_get_unsafe());
+ auto error_code = answer.first;
+ auto packet = std::move(answer.second);
on_read(packet.size(), callback);
CHECK(mode_ == Receive);
mode_ = Send;
@@ -404,11 +407,10 @@
PacketInfo packet_info;
packet_info.version = 2;
- TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(),
auth_key, &packet_info));
+ TRY_RESULT(read_result, Transport::read(packet.as_mutable_slice(),
error_code, auth_key, &packet_info));
switch (read_result.type()) {
- case Transport::ReadResult::Quickack: {
+ case Transport::ReadResult::Quickack:
break;
- }
case Transport::ReadResult::Error: {
TRY_STATUS(on_read_mtproto_error(read_result.error()));
break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/TcpTransport.cpp
new/td-git20260516/td/mtproto/TcpTransport.cpp
--- old/td-git20260508/td/mtproto/TcpTransport.cpp 2026-05-08
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/TcpTransport.cpp 2026-06-09
20:14:16.652756177 +0200
@@ -142,7 +142,7 @@
MutableSlice(header_).substr(56).copy_from(header_slice.substr(56));
}
-Result<size_t> ObfuscatedTransport::read_next(BufferSlice *message, uint32
*quick_ack) {
+Result<size_t> ObfuscatedTransport::read_next(BufferSlice *message, uint32
*quick_ack, int32 *error_code) {
if (secret_.emulate_tls()) {
tls_reader_byte_flow_.wakeup();
} else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/TcpTransport.h
new/td-git20260516/td/mtproto/TcpTransport.h
--- old/td-git20260508/td/mtproto/TcpTransport.h 2026-05-08
16:53:41.156331743 +0200
+++ new/td-git20260516/td/mtproto/TcpTransport.h 2026-06-09
20:14:16.652756177 +0200
@@ -53,7 +53,7 @@
class OldTransport final : public IStreamTransport {
public:
OldTransport() = default;
- Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) final
TD_WARN_UNUSED_RESULT {
+ Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack, int32
*error_code) final TD_WARN_UNUSED_RESULT {
return impl_.read_from_stream(input_, message, quick_ack);
}
bool support_quick_ack() const final {
@@ -103,7 +103,7 @@
: dc_id_(dc_id), secret_(std::move(secret)),
impl_(secret_.use_random_padding()) {
}
- Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack) final
TD_WARN_UNUSED_RESULT;
+ Result<size_t> read_next(BufferSlice *message, uint32 *quick_ack, int32
*error_code) final TD_WARN_UNUSED_RESULT;
bool support_quick_ack() const final {
return true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/Transport.cpp
new/td-git20260516/td/mtproto/Transport.cpp
--- old/td-git20260508/td/mtproto/Transport.cpp 2026-05-08 16:53:41.156331743
+0200
+++ new/td-git20260516/td/mtproto/Transport.cpp 2026-06-09 20:14:16.652835915
+0200
@@ -415,7 +415,11 @@
return as<uint64>(message.begin());
}
-Result<Transport::ReadResult> Transport::read(MutableSlice message, const
AuthKey &auth_key, PacketInfo *packet_info) {
+Result<Transport::ReadResult> Transport::read(MutableSlice message, int32
error_code, const AuthKey &auth_key,
+ PacketInfo *packet_info) {
+ if (error_code >= 300) {
+ return ReadResult::make_error(-error_code);
+ }
if (message.size() < 16) {
if (message.size() < 4) {
return Status::Error(PSLICE() << "Invalid MTProto message: smaller than
4 bytes [size = " << message.size()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/mtproto/Transport.h
new/td-git20260516/td/mtproto/Transport.h
--- old/td-git20260508/td/mtproto/Transport.h 2026-05-08 16:53:41.156331743
+0200
+++ new/td-git20260516/td/mtproto/Transport.h 2026-06-09 20:14:16.652835915
+0200
@@ -87,7 +87,7 @@
// Returns size of MTProto packet.
// If dest.size() >= size, the packet is also written into [dest].
// If auth_key is nonempty, encryption will be used.
- static Result<ReadResult> read(MutableSlice message, const AuthKey &auth_key,
+ static Result<ReadResult> read(MutableSlice message, int32 error_code, const
AuthKey &auth_key,
PacketInfo *packet_info)
TD_WARN_UNUSED_RESULT;
static BufferWriter write(const Storer &storer, const AuthKey &auth_key,
PacketInfo *packet_info,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/td/telegram/BusinessConnectionManager.cpp
new/td-git20260516/td/telegram/BusinessConnectionManager.cpp
--- old/td-git20260508/td/telegram/BusinessConnectionManager.cpp
2026-05-08 16:53:41.162908380 +0200
+++ new/td-git20260516/td/telegram/BusinessConnectionManager.cpp
2026-06-09 20:14:16.659835636 +0200
@@ -1287,7 +1287,7 @@
fake_message->content_ = std::move(message_contents[media_pos]);
fake_message->init_file_upload_ids(td_);
auto input_media =
get_message_content_input_media(fake_message->content_.get(), td_,
MessageSelfDestructType(),
- string(),
td_->auth_manager_->is_bot());
+ string(),
td_->auth_manager_->is_bot(), -1);
auto file_id = fake_message->file_upload_id_.get_file_id();
if (input_media != nullptr || !file_id.is_valid()) {
if (!file_id.is_valid() ||
td_->file_manager_->get_file_view(file_id).has_full_remote_location()) {
@@ -1307,8 +1307,8 @@
return;
}
- auto input_media =
- get_message_content_input_media(content, td_, message->ttl_,
message->send_emoji_, td_->auth_manager_->is_bot());
+ auto input_media = get_message_content_input_media(content, td_,
message->ttl_, message->send_emoji_,
+
td_->auth_manager_->is_bot(), -1);
if (input_media != nullptr) {
td_->create_handler<SendBusinessMediaQuery>(std::move(promise))->send(std::move(message),
std::move(input_media));
return;
@@ -1492,7 +1492,7 @@
}
auto input_media =
- get_message_content_input_media(message->content_.get(), td_,
message->ttl_, message->send_emoji_, true);
+ get_message_content_input_media(message->content_.get(), td_,
message->ttl_, message->send_emoji_, true, -1);
if (input_media == nullptr) {
return promise.set_error(400, "Failed to upload file");
}
@@ -1560,7 +1560,7 @@
create_business_message_to_send(business_connection_id, dialog_id,
input_reply_to.clone(), disable_notification,
protect_content, effect_id, nullptr,
std::move(message_content));
auto input_media =
get_message_content_input_media(message->content_.get(), td_, message->ttl_,
- message->send_emoji_,
td_->auth_manager_->is_bot());
+ message->send_emoji_,
td_->auth_manager_->is_bot(), -1);
if (input_media != nullptr) {
auto file_id = message->file_upload_id_.get_file_id();
CHECK(file_id.is_valid());
@@ -1655,8 +1655,13 @@
auto messages = td_api::make_object<td_api::businessMessages>();
for (auto &update_ptr : updates->updates_) {
auto update =
telegram_api::move_object_as<telegram_api::updateBotNewBusinessMessage>(update_ptr);
-
messages->messages_.push_back(td_->messages_manager_->get_business_message_object(
- std::move(update->message_), std::move(update->reply_to_message_)));
+ auto message_object =
td_->messages_manager_->get_business_message_object(std::move(update->message_),
+
std::move(update->reply_to_message_));
+ if (message_object == nullptr) {
+ LOG(ERROR) << "Failed to create send business album message";
+ return promise.set_error(500, "Receive invalid business connection
messages");
+ }
+ messages->messages_.push_back(std::move(message_object));
}
promise.set_value(std::move(messages));
}
@@ -1692,7 +1697,7 @@
auto upload_result = r_upload_result.move_as_ok();
input_media.push_back(std::move(upload_result.input_media_));
}
- auto full_input_media =
get_message_content_input_media(message->content_.get(), td_,
std::move(input_media));
+ auto full_input_media =
get_message_content_multi_input_media(message->content_.get(), td_,
std::move(input_media));
td_->create_handler<SendBusinessMediaQuery>(std::move(promise))
->send(std::move(message), std::move(full_input_media));
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/Client.cpp
new/td-git20260516/td/telegram/Client.cpp
--- old/td-git20260508/td/telegram/Client.cpp 2026-05-08 16:53:41.164908328
+0200
+++ new/td-git20260516/td/telegram/Client.cpp 2026-06-09 20:14:16.661835557
+0200
@@ -21,6 +21,7 @@
#include "td/utils/logging.h"
#include "td/utils/misc.h"
#include "td/utils/MpscPollableQueue.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/RwMutex.h"
#include "td/utils/port/thread.h"
#include "td/utils/Slice.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/ClientDotNet.cpp
new/td-git20260516/td/telegram/ClientDotNet.cpp
--- old/td-git20260508/td/telegram/ClientDotNet.cpp 2026-05-08
16:53:41.164908328 +0200
+++ new/td-git20260516/td/telegram/ClientDotNet.cpp 2026-06-09
20:14:16.661835557 +0200
@@ -11,6 +11,7 @@
#include "td/telegram/TdDotNetApi.h"
#include "td/utils/port/CxCli.h"
+#include "td/utils/port/platform.h"
#pragma managed(push, off)
#include <cstdint>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/EmojiGameInfo.cpp
new/td-git20260516/td/telegram/EmojiGameInfo.cpp
--- old/td-git20260508/td/telegram/EmojiGameInfo.cpp 2026-05-08
16:53:41.167908250 +0200
+++ new/td-git20260516/td/telegram/EmojiGameInfo.cpp 2026-06-09
20:14:16.664835438 +0200
@@ -52,7 +52,7 @@
CHECK(params_.size() == 7u);
auto suggested_amounts =
transform(full_split(td->option_manager_->get_option_string("ton_stakedice_stake_suggested_amounts"),
','),
- to_integer<int64>);
+ [](const auto &str) { return to_integer<int64>(str); });
return td_api::make_object<td_api::stakeDiceState>(game_hash_, prev_stake_,
std::move(suggested_amounts),
current_streak_,
vector<int32>(params_.begin(), params_.begin() + 6), params_[6]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/ForumTopic.cpp
new/td-git20260516/td/telegram/ForumTopic.cpp
--- old/td-git20260508/td/telegram/ForumTopic.cpp 2026-05-08
16:53:41.168908223 +0200
+++ new/td-git20260516/td/telegram/ForumTopic.cpp 2026-06-09
20:14:16.664835438 +0200
@@ -97,6 +97,7 @@
new_unread_poll_vote_count = 0;
}
if (unread_poll_vote_count_ == new_unread_poll_vote_count) {
+ LOG(INFO) << "Number of unread poll votes is still " <<
unread_poll_vote_count_;
return false;
}
unread_poll_vote_count_ = new_unread_poll_vote_count;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/ForumTopicManager.cpp
new/td-git20260516/td/telegram/ForumTopicManager.cpp
--- old/td-git20260508/td/telegram/ForumTopicManager.cpp 2026-05-08
16:53:41.168908223 +0200
+++ new/td-git20260516/td/telegram/ForumTopicManager.cpp 2026-06-09
20:14:16.665835398 +0200
@@ -1451,10 +1451,12 @@
<< forum_topic_id << " in " << dialog_id;
auto dialog_topics = get_dialog_topics(dialog_id);
if (dialog_topics == nullptr) {
+ LOG(INFO) << "Topic list of " << dialog_id << " not found";
return;
}
auto topic = get_topic(dialog_topics, forum_topic_id);
if (topic == nullptr || topic->topic_ == nullptr) {
+ LOG(INFO) << "Topic " << forum_topic_id << " not found";
return;
}
if (topic->topic_->update_unread_poll_vote_count(count, is_relative)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/InlineMessageManager.cpp
new/td-git20260516/td/telegram/InlineMessageManager.cpp
--- old/td-git20260508/td/telegram/InlineMessageManager.cpp 2026-05-08
16:53:41.170908171 +0200
+++ new/td-git20260516/td/telegram/InlineMessageManager.cpp 2026-06-09
20:14:16.667835318 +0200
@@ -299,7 +299,7 @@
TRY_RESULT_PROMISE(promise, input_bot_inline_message_id,
get_input_bot_inline_message_id(inline_message_id));
auto input_media =
- get_message_content_input_media(content.content.get(), td_,
MessageSelfDestructType(), string(), true);
+ get_message_content_input_media(content.content.get(), td_,
MessageSelfDestructType(), string(), true, -1);
if (input_media == nullptr) {
return promise.set_error(400, "Invalid message content specified");
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessageContent.cpp
new/td-git20260516/td/telegram/MessageContent.cpp
--- old/td-git20260508/td/telegram/MessageContent.cpp 2026-05-08
16:53:41.172908119 +0200
+++ new/td-git20260516/td/telegram/MessageContent.cpp 2026-06-09
20:14:16.669835239 +0200
@@ -5486,7 +5486,7 @@
}
input_media.push_back(std::move(media));
}
- return get_message_content_input_media(content, td,
std::move(input_media));
+ return get_message_content_multi_input_media(content, td,
std::move(input_media));
}
case MessageContentType::Photo: {
const auto *m = static_cast<const MessagePhoto *>(content);
@@ -5630,7 +5630,7 @@
return nullptr;
}
-telegram_api::object_ptr<telegram_api::InputMedia>
get_message_content_input_media(
+telegram_api::object_ptr<telegram_api::InputMedia>
get_message_content_multi_input_media(
const MessageContent *content, Td *td,
vector<telegram_api::object_ptr<telegram_api::InputMedia>> &&input_media) {
CHECK(content != nullptr);
switch (content->get_type()) {
@@ -9962,18 +9962,12 @@
case telegram_api::messageActionChatMigrateTo::ID:
case telegram_api::messageActionChannelCreate::ID:
case telegram_api::messageActionChannelMigrateFrom::ID:
- case telegram_api::messageActionBotAllowed::ID:
- case telegram_api::messageActionSecureValuesSent::ID:
case telegram_api::messageActionSecureValuesSentMe::ID:
case telegram_api::messageActionGroupCall::ID:
case telegram_api::messageActionInviteToGroupCall::ID:
case telegram_api::messageActionGroupCallScheduled::ID:
case telegram_api::messageActionChatJoinedByRequest::ID:
- case telegram_api::messageActionWebViewDataSent::ID:
case telegram_api::messageActionWebViewDataSentMe::ID:
- case telegram_api::messageActionTopicCreate::ID:
- case telegram_api::messageActionTopicEdit::ID:
- case telegram_api::messageActionRequestedPeer::ID:
case telegram_api::messageActionGiveawayLaunch::ID:
case telegram_api::messageActionGiveawayResults::ID:
case telegram_api::messageActionBoostApply::ID:
@@ -9983,7 +9977,6 @@
case telegram_api::messageActionSuggestedPostRefund::ID:
case telegram_api::messageActionNewCreatorPending::ID:
case telegram_api::messageActionChangeCreator::ID:
- case telegram_api::messageActionManagedBotCreated::ID:
LOG(ERROR) << "Receive business " << to_string(action_ptr);
break;
case telegram_api::messageActionHistoryClear::ID:
@@ -10022,6 +10015,23 @@
case telegram_api::messageActionPollDeleteAnswer::ID:
// ok
break;
+ case telegram_api::messageActionBotAllowed::ID:
+ case telegram_api::messageActionSecureValuesSent::ID:
+ case telegram_api::messageActionWebViewDataSent::ID:
+ case telegram_api::messageActionTopicCreate::ID:
+ case telegram_api::messageActionTopicEdit::ID:
+ case telegram_api::messageActionRequestedPeer::ID:
+ case telegram_api::messageActionManagedBotCreated::ID:
+ // ok in chats with bots
+ if (owner_dialog_id.get_type() == DialogType::User) {
+ auto user_id = owner_dialog_id.get_user_id();
+ if (!td->user_manager_->is_user_bot(user_id) &&
!td->user_manager_->is_user_deleted(user_id)) {
+ LOG(ERROR) << "Receive in " << owner_dialog_id << " business " <<
to_string(action_ptr);
+ }
+ } else {
+ LOG(ERROR) << "Receive in " << owner_dialog_id << " business " <<
to_string(action_ptr);
+ }
+ break;
default:
UNREACHABLE();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessageContent.h
new/td-git20260516/td/telegram/MessageContent.h
--- old/td-git20260508/td/telegram/MessageContent.h 2026-05-08
16:53:41.172908119 +0200
+++ new/td-git20260516/td/telegram/MessageContent.h 2026-06-09
20:14:16.669835239 +0200
@@ -138,7 +138,7 @@
const MessageContent *content, Td *td,
telegram_api::object_ptr<telegram_api::InputEncryptedFile> input_file,
BufferSlice thumbnail, int32 layer);
-telegram_api::object_ptr<telegram_api::InputMedia>
get_message_content_input_media(
+telegram_api::object_ptr<telegram_api::InputMedia>
get_message_content_multi_input_media(
const MessageContent *content, Td *td,
vector<telegram_api::object_ptr<telegram_api::InputMedia>> &&input_media);
telegram_api::object_ptr<telegram_api::InputMedia>
get_message_content_input_media(
@@ -150,7 +150,7 @@
telegram_api::object_ptr<telegram_api::InputMedia>
get_message_content_input_media(const MessageContent *content,
Td *td, MessageSelfDestructType ttl,
const string &emoji, bool force,
-
int32 media_pos = -1);
+
int32 media_pos);
telegram_api::object_ptr<telegram_api::InputMedia>
get_message_content_input_media_web_page(
const Td *td, const MessageContent *content);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessageQueryManager.cpp
new/td-git20260516/td/telegram/MessageQueryManager.cpp
--- old/td-git20260508/td/telegram/MessageQueryManager.cpp 2026-05-08
16:53:41.174908067 +0200
+++ new/td-git20260516/td/telegram/MessageQueryManager.cpp 2026-06-09
20:14:16.671835160 +0200
@@ -1756,7 +1756,10 @@
auto messages_info = get_messages_info(td_, DialogId(),
result_ptr.move_as_ok(), "GetPersonalChannelHistoryQuery");
auto messages = td_api::make_object<td_api::messages>();
for (auto &message : messages_info.messages) {
-
messages->messages_.push_back(td_->messages_manager_->get_guest_message_object(std::move(message),
false));
+ auto message_object =
td_->messages_manager_->get_guest_message_object(std::move(message), false);
+ if (message_object != nullptr) {
+ messages->messages_.push_back(std::move(message_object));
+ }
}
promise_.set_value(std::move(messages));
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/MessagesManager.cpp
new/td-git20260516/td/telegram/MessagesManager.cpp
--- old/td-git20260508/td/telegram/MessagesManager.cpp 2026-05-08
16:53:41.176908014 +0200
+++ new/td-git20260516/td/telegram/MessagesManager.cpp 2026-06-09
20:14:16.673835080 +0200
@@ -8955,7 +8955,7 @@
// remove_message_notification_id(d, m, true, false); // must be called
before unread_reactions are cleared
m->reactions->unread_reactions_.clear();
- on_unread_message_reaction_removed(d, m, nullptr);
+ on_unread_message_reaction_removed(d, m,
"read_all_local_dialog_reactions");
on_message_changed(d, m, true, "read_all_local_dialog_reactions");
}
}
@@ -10487,7 +10487,8 @@
continue;
}
- auto counts = transform(full_split(Slice(it.second)),
to_integer_safe<int32>);
+ auto counts =
+ transform(full_split(Slice(it.second)), [](const auto &str) { return
to_integer_safe<int32>(str); });
if ((counts.size() != 4 && counts.size() != 6) || any_of(counts,
[](const auto &c) { return c.is_error(); })) {
LOG(ERROR) << "Can't parse " << it.second;
} else {
@@ -21802,7 +21803,7 @@
CHECK(static_cast<size_t>(media_pos) < file_upload_ids.size());
}
auto input_media = get_message_content_input_media(content, td_, m->ttl,
m->send_emoji,
-
td_->auth_manager_->is_bot() && bad_parts.empty());
+
td_->auth_manager_->is_bot() && bad_parts.empty(), media_pos);
auto can_have_multiple_files =
can_message_content_have_multiple_files(content_type);
if (input_media == nullptr || media_pos >= 0 || !bad_parts.empty() ||
can_have_multiple_files) {
if (content_type == MessageContentType::Game || content_type ==
MessageContentType::Story) {
@@ -22289,7 +22290,7 @@
}
const FormattedText *caption =
get_message_content_caption(m->content.get());
- auto input_media = get_message_content_input_media(m->content.get(), td_,
m->ttl, m->send_emoji, true);
+ auto input_media = get_message_content_input_media(m->content.get(), td_,
m->ttl, m->send_emoji, true, -1);
if (input_media == nullptr) {
// TODO return CHECK
auto file_upload_id = get_message_send_file_upload_id(dialog_id, m, -1);
@@ -22387,7 +22388,7 @@
return;
}
- auto input_media = get_message_content_input_media(m->content.get(), td_,
m->ttl, m->send_emoji, true);
+ auto input_media = get_message_content_input_media(m->content.get(), td_,
m->ttl, m->send_emoji, true, -1);
CHECK(input_media != nullptr);
pending_internal_media_sends_.erase(it);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/NotificationManager.cpp
new/td-git20260516/td/telegram/NotificationManager.cpp
--- old/td-git20260508/td/telegram/NotificationManager.cpp 2026-05-08
16:53:41.177907989 +0200
+++ new/td-git20260516/td/telegram/NotificationManager.cpp 2026-06-09
20:14:16.674835040 +0200
@@ -332,7 +332,8 @@
return;
}
- auto notification_announcement_ids_string = implode(transform(stored_ids,
to_string<int32>));
+ auto notification_announcement_ids_string =
+ implode(transform(stored_ids, [](int32 stored_id) { return
to_string(stored_id); }));
G()->td_db()->get_binlog_pmc()->set("notification_announcement_ids",
notification_announcement_ids_string);
}
@@ -3997,7 +3998,7 @@
packet_info.is_creator = true;
packet_info.check_mod4 = false;
- TRY_RESULT(result, mtproto::Transport::read(payload, auth_key,
&packet_info));
+ TRY_RESULT(result, mtproto::Transport::read(payload, 0, auth_key,
&packet_info));
if (result.type() != mtproto::Transport::ReadResult::Packet) {
return Status::Error(400, "Wrong packet type");
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/OptionManager.cpp
new/td-git20260516/td/telegram/OptionManager.cpp
--- old/td-git20260508/td/telegram/OptionManager.cpp 2026-05-08
16:53:41.177907989 +0200
+++ new/td-git20260516/td/telegram/OptionManager.cpp 2026-06-09
20:14:16.674835040 +0200
@@ -562,7 +562,7 @@
}
if (name == "whitelisted_bots") {
return td_api::make_object<td_api::updateTrustedMiniAppBots>(
- transform(full_split(get_option_string(name), ','),
to_integer<int64>));
+ transform(full_split(get_option_string(name), ','), [](const auto
&str) { return to_integer<int64>(str); }));
}
return nullptr;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/Outline.cpp
new/td-git20260516/td/telegram/Outline.cpp
--- old/td-git20260508/td/telegram/Outline.cpp 2026-05-08 16:53:41.177907989
+0200
+++ new/td-git20260516/td/telegram/Outline.cpp 2026-06-09 20:14:16.674835040
+0200
@@ -349,7 +349,7 @@
skip_commas();
if (path[pos] == '\0') {
LOG(ERROR) << "Receive unclosed path " << path << " from " << source;
- return nullptr;
+ return string();
}
if (is_alpha(path[pos])) {
command = path[pos++];
@@ -437,7 +437,7 @@
default:
LOG(ERROR) << "Receive invalid command " << command << " at pos " <<
pos << " from " << source << ": "
<< path;
- return nullptr;
+ return string();
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/PollManager.hpp
new/td-git20260516/td/telegram/PollManager.hpp
--- old/td-git20260508/td/telegram/PollManager.hpp 2026-05-08
16:53:41.179907937 +0200
+++ new/td-git20260516/td/telegram/PollManager.hpp 2026-06-09
20:14:16.676834961 +0200
@@ -360,11 +360,6 @@
correct_option_ids.push_back(correct_option_id);
}
}
- auto status = check_quiz_correct_option_ids(correct_option_ids,
option_texts.size(), false);
- if (status.is_error()) {
- parser.set_error(status.message().str());
- return PollId();
- }
}
if (has_open_period) {
parse(open_period, parser);
@@ -401,6 +396,13 @@
options.emplace_back(FormattedText{std::move(option_texts[i]),
std::move(option_entities[i])}, nullptr);
}
}
+ if (is_quiz) {
+ auto status = check_quiz_correct_option_ids(correct_option_ids,
options.size(), false);
+ if (status.is_error()) {
+ parser.set_error(status.message().str());
+ return PollId();
+ }
+ }
if (parser.get_error() != nullptr) {
return PollId();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/QuickReplyManager.cpp
new/td-git20260516/td/telegram/QuickReplyManager.cpp
--- old/td-git20260508/td/telegram/QuickReplyManager.cpp 2026-05-08
16:53:41.180907910 +0200
+++ new/td-git20260516/td/telegram/QuickReplyManager.cpp 2026-06-09
20:14:16.677834921 +0200
@@ -2294,7 +2294,7 @@
}
auto file_upload_id = is_edit ? m->edited_file_upload_id : m->file_upload_id;
LOG(DEBUG) << "Need to send " << file_upload_id;
- auto input_media = get_message_content_input_media(content, td_, {},
m->send_emoji, false);
+ auto input_media = get_message_content_input_media(content, td_, {},
m->send_emoji, false, -1);
if (input_media == nullptr) {
if (content_type == MessageContentType::Game || content_type ==
MessageContentType::Story) {
return;
@@ -2492,7 +2492,7 @@
save_quick_reply_shortcuts();
- auto input_media = get_message_content_input_media(content.get(), td_, {},
m->send_emoji, true);
+ auto input_media = get_message_content_input_media(content.get(), td_, {},
m->send_emoji, true, -1);
Status result;
if (input_media == nullptr) {
result = Status::Error(400, "Failed to upload file");
@@ -2592,7 +2592,7 @@
<< " and is_finished = " <<
static_cast<bool>(request.is_finished[i]);
const FormattedText *caption =
get_message_content_caption(m->content.get());
- auto input_media = get_message_content_input_media(m->content.get(), td_,
{}, m->send_emoji, true);
+ auto input_media = get_message_content_input_media(m->content.get(), td_,
{}, m->send_emoji, true, -1);
CHECK(input_media != nullptr);
auto entities = get_input_message_entities(td_->user_manager_.get(),
caption, "do_send_message_group");
int32 input_single_media_flags = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/SecretChatActor.cpp
new/td-git20260516/td/telegram/SecretChatActor.cpp
--- old/td-git20260508/td/telegram/SecretChatActor.cpp 2026-05-08
16:53:41.182907858 +0200
+++ new/td-git20260516/td/telegram/SecretChatActor.cpp 2026-06-09
20:14:16.679834842 +0200
@@ -788,7 +788,7 @@
mtproto_version = versions[i];
packet_info.version = mtproto_version;
packet_info.is_creator = auth_state_.x == 0;
- r_read_result = mtproto::Transport::read(data, *auth_key, &packet_info);
+ r_read_result = mtproto::Transport::read(data, 0, *auth_key, &packet_info);
if (i + 1 != versions.size() && r_read_result.is_error()) {
if (config_state_.his_layer >=
static_cast<int32>(SecretChatLayer::Mtproto2)) {
LOG(WARNING) << tag("mtproto", mtproto_version) << " decryption failed
" << r_read_result.error();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/StarGiftManager.cpp
new/td-git20260516/td/telegram/StarGiftManager.cpp
--- old/td-git20260508/td/telegram/StarGiftManager.cpp 2026-05-08
16:53:41.184907806 +0200
+++ new/td-git20260516/td/telegram/StarGiftManager.cpp 2026-06-09
20:14:16.681834762 +0200
@@ -1830,7 +1830,7 @@
transform(full_split(td_->option_manager_->get_option_string("stargifts_craft_attribute_permilles",
"100,80,400,70,350,700,60,300,600,1000"),
','),
- to_integer<int32>);
+ [](const auto &str) { return to_integer<int32>(str); });
CHECK(attribute_persistence_per_mille.size() == 10u);
vector<td_api::object_ptr<td_api::attributeCraftPersistenceProbability>>
probabilities;
for (size_t num = 1; num <= 4; num++) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/telegram/cli.cpp
new/td-git20260516/td/telegram/cli.cpp
--- old/td-git20260508/td/telegram/cli.cpp 2026-05-08 16:53:41.190907649
+0200
+++ new/td-git20260516/td/telegram/cli.cpp 2026-06-09 20:14:16.686834563
+0200
@@ -964,7 +964,7 @@
template <class T>
static vector<T> to_integers(Slice integers) {
- return transform(transform(autosplit(integers), trim<Slice>),
to_integer<T>);
+ return transform(autosplit(integers), [](const auto &slice) { return
to_integer<T>(trim(slice)); });
}
static void get_args(string &args, string &arg) {
@@ -8388,7 +8388,7 @@
ReactionNotificationSource poll_votes;
int64 sound_id;
bool show_preview;
- get_args(args, message_reactions, story_reactions, sound_id,
show_preview);
+ get_args(args, message_reactions, story_reactions, poll_votes, sound_id,
show_preview);
send_request(td_api::make_object<td_api::setReactionNotificationSettings>(
td_api::make_object<td_api::reactionNotificationSettings>(message_reactions,
story_reactions, poll_votes,
sound_id,
show_preview)));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/td/telegram/net/NetQueryDispatcher.cpp
new/td-git20260516/td/telegram/net/NetQueryDispatcher.cpp
--- old/td-git20260508/td/telegram/net/NetQueryDispatcher.cpp 2026-05-08
16:53:41.193539742 +0200
+++ new/td-git20260516/td/telegram/net/NetQueryDispatcher.cpp 2026-06-09
20:14:16.690533941 +0200
@@ -26,6 +26,7 @@
#include "td/utils/common.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/sleep.h"
#include "td/utils/Slice.h"
#include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/td/tl/tl_dotnet_object.h
new/td-git20260516/td/tl/tl_dotnet_object.h
--- old/td-git20260508/td/tl/tl_dotnet_object.h 2026-05-08 16:53:41.194908917
+0200
+++ new/td-git20260516/td/tl/tl_dotnet_object.h 2026-06-09 20:14:16.691924134
+0200
@@ -7,6 +7,7 @@
#pragma once
#include "td/utils/port/CxCli.h"
+#include "td/utils/port/platform.h"
#pragma managed(push, off)
#include "td/telegram/td_api.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/tdactor/td/actor/ConcurrentScheduler.h
new/td-git20260516/tdactor/td/actor/ConcurrentScheduler.h
--- old/td-git20260508/tdactor/td/actor/ConcurrentScheduler.h 2026-05-08
16:53:41.195130546 +0200
+++ new/td-git20260516/tdactor/td/actor/ConcurrentScheduler.h 2026-06-09
20:14:16.692179105 +0200
@@ -9,6 +9,7 @@
#include "td/actor/actor.h"
#include "td/utils/common.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/thread.h"
#include "td/utils/Slice.h"
#include "td/utils/Time.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdactor/td/actor/impl/Scheduler.h
new/td-git20260516/tdactor/td/actor/impl/Scheduler.h
--- old/td-git20260508/tdactor/td/actor/impl/Scheduler.h 2026-05-08
16:53:41.195356242 +0200
+++ new/td-git20260516/tdactor/td/actor/impl/Scheduler.h 2026-06-09
20:14:16.692401675 +0200
@@ -13,6 +13,7 @@
#include "td/utils/Heap.h"
#include "td/utils/logging.h"
#include "td/utils/ObjectPool.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/PollableFd.h"
#include "td/utils/port/PollFlags.h"
#include "td/utils/Promise.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdactor/test/actors_simple.cpp
new/td-git20260516/tdactor/test/actors_simple.cpp
--- old/td-git20260508/tdactor/test/actors_simple.cpp 2026-05-08
16:53:41.195657357 +0200
+++ new/td-git20260516/tdactor/test/actors_simple.cpp 2026-06-09
20:14:16.692703913 +0200
@@ -14,6 +14,7 @@
#include "td/utils/logging.h"
#include "td/utils/MpscPollableQueue.h"
#include "td/utils/Observer.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/FileFd.h"
#include "td/utils/port/path.h"
#include "td/utils/port/thread.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tddb/td/db/detail/RawSqliteDb.h
new/td-git20260516/tddb/td/db/detail/RawSqliteDb.h
--- old/td-git20260508/tddb/td/db/detail/RawSqliteDb.h 2026-05-08
16:53:41.196518164 +0200
+++ new/td-git20260516/tddb/td/db/detail/RawSqliteDb.h 2026-06-09
20:14:16.693534625 +0200
@@ -6,6 +6,7 @@
//
#pragma once
+#include "td/utils/common.h"
#include "td/utils/optional.h"
#include "td/utils/Slice.h"
#include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdnet/td/net/DarwinHttp.h
new/td-git20260516/tdnet/td/net/DarwinHttp.h
--- old/td-git20260508/tdnet/td/net/DarwinHttp.h 2026-05-08
16:53:41.197905112 +0200
+++ new/td-git20260516/tdnet/td/net/DarwinHttp.h 2026-06-09
20:14:16.694899151 +0200
@@ -7,15 +7,18 @@
#pragma once
#include "td/utils/buffer.h"
+#include "td/utils/common.h"
#include "td/utils/Promise.h"
#include "td/utils/Slice.h"
+#include <utility>
+
namespace td {
class DarwinHttp {
public:
- static void get(CSlice url, Promise<BufferSlice> promise);
- static void post(CSlice url, Slice data, Promise<BufferSlice> promise);
+ static void get(CSlice url, Promise<std::pair<int32, BufferSlice>> promise);
+ static void post(CSlice url, Slice data, Promise<std::pair<int32,
BufferSlice>> promise);
};
} // namespace td
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdnet/td/net/DarwinHttp.mm
new/td-git20260516/tdnet/td/net/DarwinHttp.mm
--- old/td-git20260508/tdnet/td/net/DarwinHttp.mm 2026-05-08
16:53:41.197932853 +0200
+++ new/td-git20260516/tdnet/td/net/DarwinHttp.mm 2026-06-09
20:14:16.694930208 +0200
@@ -52,7 +52,7 @@
return request;
}
-void http_send(NSURLRequest *request, Promise<BufferSlice> promise) {
+void http_send(NSURLRequest *request, Promise<std::pair<int32, BufferSlice>>
promise) {
__block auto callback = std::move(promise);
NSURLSessionDataTask *dataTask =
[getSession()
@@ -60,7 +60,12 @@
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
if (error == nil) {
- callback.set_value(BufferSlice(Slice((const char *)([data bytes]),
[data length])));
+ int32 statusCode = 0;
+ if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
+ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
+ statusCode = static_cast<int32>(httpResponse.statusCode);
+ }
+ callback.set_value(std::make_pair(statusCode,
BufferSlice(Slice((const char *)([data bytes]), [data length]))));
} else {
callback.set_error(static_cast<int32>([error code]), "HTTP request
failed");
}
@@ -69,11 +74,11 @@
}
} // namespace
-void DarwinHttp::get(CSlice url, Promise<BufferSlice> promise) {
+void DarwinHttp::get(CSlice url, Promise<std::pair<int32, BufferSlice>>
promise) {
return http_send(http_get(url), std::move(promise));
}
-void DarwinHttp::post(CSlice url, Slice data, Promise<BufferSlice> promise) {
+void DarwinHttp::post(CSlice url, Slice data, Promise<std::pair<int32,
BufferSlice>> promise) {
return http_send(http_post(url, data), std::move(promise));
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdnet/td/net/SslCtx.cpp
new/td-git20260516/tdnet/td/net/SslCtx.cpp
--- old/td-git20260508/tdnet/td/net/SslCtx.cpp 2026-05-08 16:53:41.197932853
+0200
+++ new/td-git20260516/tdnet/td/net/SslCtx.cpp 2026-06-09 20:14:16.694930208
+0200
@@ -11,6 +11,7 @@
#include "td/utils/FlatHashMap.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/path.h"
#include "td/utils/port/wstring_convert.h"
#include "td/utils/ScopeGuard.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/BufferedUdp.h
new/td-git20260516/tdutils/td/utils/BufferedUdp.h
--- old/td-git20260508/tdutils/td/utils/BufferedUdp.h 2026-05-08
16:53:41.199193678 +0200
+++ new/td-git20260516/tdutils/td/utils/BufferedUdp.h 2026-06-09
20:14:16.696246707 +0200
@@ -10,6 +10,7 @@
#include "td/utils/common.h"
#include "td/utils/logging.h"
#include "td/utils/optional.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/PollableFd.h"
#include "td/utils/port/thread_local.h"
#include "td/utils/port/UdpSocketFd.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/MpmcQueue.h
new/td-git20260516/tdutils/td/utils/MpmcQueue.h
--- old/td-git20260508/tdutils/td/utils/MpmcQueue.h 2026-05-08
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/MpmcQueue.h 2026-06-09
20:14:16.696246707 +0200
@@ -11,6 +11,7 @@
// To close queue, one should send as much sentinel elements as there are
readers.
// Once there are no readers and writers, one may easily destroy queue
+#include "td/utils/common.h"
#include "td/utils/format.h"
#include "td/utils/HazardPointers.h"
#include "td/utils/logging.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/MpscPollableQueue.h
new/td-git20260516/tdutils/td/utils/MpscPollableQueue.h
--- old/td-git20260508/tdutils/td/utils/MpscPollableQueue.h 2026-05-08
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/MpscPollableQueue.h 2026-06-09
20:14:16.696246707 +0200
@@ -8,6 +8,7 @@
#include "td/utils/common.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/EventFd.h"
#if !TD_EVENTFD_UNSUPPORTED
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/OptionParser.cpp
new/td-git20260516/tdutils/td/utils/OptionParser.cpp
--- old/td-git20260508/tdutils/td/utils/OptionParser.cpp 2026-05-08
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/OptionParser.cpp 2026-06-09
20:14:16.696834166 +0200
@@ -9,6 +9,7 @@
#include "td/utils/FlatHashMap.h"
#include "td/utils/logging.h"
#include "td/utils/PathView.h"
+#include "td/utils/port/config.h"
#include "td/utils/SliceBuilder.h"
#if TD_PORT_WINDOWS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/Status.h
new/td-git20260516/tdutils/td/utils/Status.h
--- old/td-git20260508/tdutils/td/utils/Status.h 2026-05-08
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/Status.h 2026-06-09
20:14:16.696834166 +0200
@@ -8,6 +8,7 @@
#include "td/utils/common.h"
#include "td/utils/logging.h"
+#include "td/utils/port/config.h"
#include "td/utils/ScopeGuard.h"
#include "td/utils/Slice.h"
#include "td/utils/StackAllocator.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/StorerBase.h
new/td-git20260516/tdutils/td/utils/StorerBase.h
--- old/td-git20260508/tdutils/td/utils/StorerBase.h 2026-05-08
16:53:41.199907414 +0200
+++ new/td-git20260516/tdutils/td/utils/StorerBase.h 2026-06-09
20:14:16.696834166 +0200
@@ -6,6 +6,7 @@
//
#pragma once
+#include "td/utils/common.h"
#include "td/utils/int_types.h"
namespace td {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/benchmark.h
new/td-git20260516/tdutils/td/utils/benchmark.h
--- old/td-git20260508/tdutils/td/utils/benchmark.h 2026-05-08
16:53:41.200907388 +0200
+++ new/td-git20260516/tdutils/td/utils/benchmark.h 2026-06-09
20:14:16.697834127 +0200
@@ -6,6 +6,7 @@
//
#pragma once
+#include "td/utils/common.h"
#include "td/utils/format.h"
#include "td/utils/logging.h"
#include "td/utils/port/Clocks.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/crypto.cpp
new/td-git20260516/tdutils/td/utils/crypto.cpp
--- old/td-git20260508/tdutils/td/utils/crypto.cpp 2026-05-08
16:53:41.200907388 +0200
+++ new/td-git20260516/tdutils/td/utils/crypto.cpp 2026-06-09
20:14:16.697834127 +0200
@@ -13,6 +13,7 @@
#include "td/utils/Destructor.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/RwMutex.h"
#include "td/utils/port/thread_local.h"
#include "td/utils/Random.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/Clocks.cpp
new/td-git20260516/tdutils/td/utils/port/Clocks.cpp
--- old/td-git20260508/tdutils/td/utils/port/Clocks.cpp 2026-05-08
16:53:41.201907362 +0200
+++ new/td-git20260516/tdutils/td/utils/port/Clocks.cpp 2026-06-09
20:14:16.697834127 +0200
@@ -6,7 +6,9 @@
//
#include "td/utils/port/Clocks.h"
-#include "td/utils/port/platform.h"
+#include "td/utils/port/config.h"
+#include "td/utils/Slice.h"
+#include "td/utils/SliceBuilder.h"
#include <chrono>
#include <ctime>
@@ -57,6 +59,59 @@
return
static_cast<double>(std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count())
* 1e-9;
}
+string Clocks::get_debug() {
+ string result;
+#if TD_PORT_POSIX
+ auto add_clock = [&](Slice clock_name, clockid_t clock_id) {
+ struct timespec spec;
+ if (clock_gettime(clock_id, &spec) == 0) {
+ result += PSTRING() << '[' << clock_name << " = "
+ << static_cast<double>(spec.tv_nsec) * 1e-9 +
static_cast<double>(spec.tv_sec) << ']';
+ } else {
+ result += PSTRING() << '[' << clock_name << " failed]";
+ }
+ };
+
+#ifdef CLOCK_REALTIME
+ add_clock("REALTIME", CLOCK_REALTIME);
+#endif
+#ifdef CLOCK_REALTIME_COARSE
+ add_clock("REALTIME_COARSE", CLOCK_REALTIME_COARSE);
+#endif
+#ifdef CLOCK_TAI
+ add_clock("TAI", CLOCK_TAI);
+#endif
+#ifdef CLOCK_MONOTONIC
+ add_clock("MONOTONIC", CLOCK_MONOTONIC);
+#endif
+#ifdef CLOCK_MONOTONIC_COARSE
+ add_clock("MONOTONIC_COARSE", CLOCK_MONOTONIC_COARSE);
+#endif
+#ifdef CLOCK_MONOTONIC_RAW
+ add_clock("MONOTONIC_RAW", CLOCK_MONOTONIC_RAW);
+#endif
+#ifdef CLOCK_BOOTTIME
+ add_clock("BOOTTIME", CLOCK_BOOTTIME);
+#endif
+#ifdef CLOCK_BOOTTIME_ALARM
+ add_clock("BOOTTIME_ALARM", CLOCK_BOOTTIME_ALARM);
+#endif
+#ifdef CLOCK_PROCESS_CPUTIME_ID
+ add_clock("PROCESS_CPUTIME_ID", CLOCK_PROCESS_CPUTIME_ID);
+#endif
+#ifdef CLOCK_THREAD_CPUTIME_ID
+ add_clock("THREAD_CPUTIME_ID", CLOCK_THREAD_CPUTIME_ID);
+#endif
+#endif
+
+ auto duration = std::chrono::steady_clock::now().time_since_epoch();
+ result +=
+ PSTRING() << "[chrono::steady = "
+ <<
static_cast<double>(std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count())
* 1e-9
+ << ']';
+ return result;
+}
+
int Clocks::tz_offset() {
// not thread-safe on POSIX, so calculate the offset only once
static int offset = [] {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/Clocks.h
new/td-git20260516/tdutils/td/utils/port/Clocks.h
--- old/td-git20260508/tdutils/td/utils/port/Clocks.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/Clocks.h 2026-06-09
20:14:16.699464281 +0200
@@ -6,6 +6,8 @@
//
#pragma once
+#include "td/utils/common.h"
+
namespace td {
struct Clocks {
@@ -13,6 +15,8 @@
static double system();
+ static string get_debug();
+
static int tz_offset();
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/CxCli.h
new/td-git20260516/tdutils/td/utils/port/CxCli.h
--- old/td-git20260508/tdutils/td/utils/port/CxCli.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/CxCli.h 2026-06-09
20:14:16.699464281 +0200
@@ -7,7 +7,7 @@
#pragma once
#pragma managed(push, off)
-#include "td/utils/port/config.h"
+#include "td/utils/port/platform.h"
#pragma managed(pop)
#include "td/utils/common.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/FileFd.cpp
new/td-git20260516/tdutils/td/utils/port/FileFd.cpp
--- old/td-git20260508/tdutils/td/utils/port/FileFd.cpp 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/FileFd.cpp 2026-06-09
20:14:16.699464281 +0200
@@ -17,6 +17,7 @@
#include "td/utils/FlatHashSet.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/PollableFd.h"
#include "td/utils/port/detail/skip_eintr.h"
#include "td/utils/port/PollFlags.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/FileFd.h
new/td-git20260516/tdutils/td/utils/port/FileFd.h
--- old/td-git20260508/tdutils/td/utils/port/FileFd.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/FileFd.h 2026-06-09
20:14:16.699464281 +0200
@@ -6,8 +6,6 @@
//
#pragma once
-#include "td/utils/port/config.h"
-
#include "td/utils/common.h"
#include "td/utils/port/detail/NativeFd.h"
#include "td/utils/port/detail/PollableFd.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/FromApp.h
new/td-git20260516/tdutils/td/utils/port/FromApp.h
--- old/td-git20260508/tdutils/td/utils/port/FromApp.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/FromApp.h 2026-06-09
20:14:16.699464281 +0200
@@ -7,6 +7,7 @@
#pragma once
#include "td/utils/common.h"
+#include "td/utils/port/config.h"
#ifdef TD_PORT_WINDOWS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/IPAddress.h
new/td-git20260516/tdutils/td/utils/port/IPAddress.h
--- old/td-git20260508/tdutils/td/utils/port/IPAddress.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/IPAddress.h 2026-06-09
20:14:16.699464281 +0200
@@ -6,8 +6,6 @@
//
#pragma once
-#include "td/utils/port/config.h"
-
#include "td/utils/common.h"
#include "td/utils/Slice.h"
#include "td/utils/Status.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/IoSlice.h
new/td-git20260516/tdutils/td/utils/port/IoSlice.h
--- old/td-git20260508/tdutils/td/utils/port/IoSlice.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/IoSlice.h 2026-06-09
20:14:16.699464281 +0200
@@ -6,6 +6,7 @@
//
#pragma once
+#include "td/utils/port/config.h"
#include "td/utils/Slice.h"
#if TD_PORT_POSIX
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/RwMutex.h
new/td-git20260516/tdutils/td/utils/port/RwMutex.h
--- old/td-git20260508/tdutils/td/utils/port/RwMutex.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/RwMutex.h 2026-06-09
20:14:16.699464281 +0200
@@ -6,9 +6,8 @@
//
#pragma once
-#include "td/utils/port/config.h"
-
#include "td/utils/common.h"
+#include "td/utils/port/config.h"
#if TD_PORT_POSIX
#include <pthread.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.cpp
new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.cpp
--- old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.cpp 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.cpp 2026-06-09
20:14:16.699464281 +0200
@@ -6,10 +6,9 @@
//
#include "td/utils/port/ServerSocketFd.h"
-#include "td/utils/port/config.h"
-
#include "td/utils/common.h"
#include "td/utils/logging.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/skip_eintr.h"
#include "td/utils/port/IPAddress.h"
#include "td/utils/port/PollFlags.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.h
new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.h
--- old/td-git20260508/tdutils/td/utils/port/ServerSocketFd.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/ServerSocketFd.h 2026-06-09
20:14:16.699464281 +0200
@@ -8,6 +8,7 @@
#include "td/utils/port/detail/NativeFd.h"
#include "td/utils/port/detail/PollableFd.h"
+#include "td/utils/port/platform.h"
#include "td/utils/port/SocketFd.h"
#include "td/utils/Slice.h"
@@ -16,6 +17,7 @@
#include <memory>
namespace td {
+
namespace detail {
class ServerSocketFdImpl;
class ServerSocketFdImplDeleter {
@@ -54,4 +56,5 @@
std::unique_ptr<detail::ServerSocketFdImpl,
detail::ServerSocketFdImplDeleter> impl_;
explicit ServerSocketFd(unique_ptr<detail::ServerSocketFdImpl> impl);
};
+
} // namespace td
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/SocketFd.h
new/td-git20260516/tdutils/td/utils/port/SocketFd.h
--- old/td-git20260508/tdutils/td/utils/port/SocketFd.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/SocketFd.h 2026-06-09
20:14:16.699464281 +0200
@@ -7,11 +7,11 @@
#pragma once
#include "td/utils/port/config.h"
-
#include "td/utils/port/detail/NativeFd.h"
#include "td/utils/port/detail/PollableFd.h"
#include "td/utils/port/IoSlice.h"
#include "td/utils/port/IPAddress.h"
+#include "td/utils/port/platform.h"
#include "td/utils/Slice.h"
#include "td/utils/Span.h"
#include "td/utils/Status.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/Stat.h
new/td-git20260516/tdutils/td/utils/port/Stat.h
--- old/td-git20260508/tdutils/td/utils/port/Stat.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/Stat.h 2026-06-09
20:14:16.699464281 +0200
@@ -6,9 +6,8 @@
//
#pragma once
-#include "td/utils/port/config.h"
-
#include "td/utils/common.h"
+#include "td/utils/port/config.h"
#include "td/utils/Slice.h"
#include "td/utils/Status.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/StdStreams.cpp
new/td-git20260516/tdutils/td/utils/port/StdStreams.cpp
--- old/td-git20260508/tdutils/td/utils/port/StdStreams.cpp 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/StdStreams.cpp 2026-06-09
20:14:16.699464281 +0200
@@ -8,6 +8,7 @@
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/Iocp.h"
#include "td/utils/port/detail/NativeFd.h"
#include "td/utils/port/detail/PollableFd.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/UdpSocketFd.h
new/td-git20260516/tdutils/td/utils/port/UdpSocketFd.h
--- old/td-git20260508/tdutils/td/utils/port/UdpSocketFd.h 2026-05-08
16:53:41.202409167 +0200
+++ new/td-git20260516/tdutils/td/utils/port/UdpSocketFd.h 2026-06-09
20:14:16.699464281 +0200
@@ -13,6 +13,7 @@
#include "td/utils/port/detail/NativeFd.h"
#include "td/utils/port/detail/PollableFd.h"
#include "td/utils/port/IPAddress.h"
+#include "td/utils/port/platform.h"
#include "td/utils/Slice.h"
#include "td/utils/Span.h"
#include "td/utils/Status.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/tdutils/td/utils/port/detail/PollableFd.h
new/td-git20260516/tdutils/td/utils/port/detail/PollableFd.h
--- old/td-git20260508/tdutils/td/utils/port/detail/PollableFd.h
2026-05-08 16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/detail/PollableFd.h
2026-06-09 20:14:16.700259868 +0200
@@ -11,6 +11,7 @@
#include "td/utils/List.h"
#include "td/utils/logging.h"
#include "td/utils/Observer.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/NativeFd.h"
#include "td/utils/port/Mutex.h"
#include "td/utils/port/PollFlags.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/td-git20260508/tdutils/td/utils/port/detail/skip_eintr.h
new/td-git20260516/tdutils/td/utils/port/detail/skip_eintr.h
--- old/td-git20260508/tdutils/td/utils/port/detail/skip_eintr.h
2026-05-08 16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/detail/skip_eintr.h
2026-06-09 20:14:16.700259868 +0200
@@ -6,6 +6,8 @@
//
#pragma once
+#include "td/utils/port/config.h"
+
#if TD_PORT_POSIX
#include "td/utils/common.h"
#include "td/utils/Time.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/path.cpp
new/td-git20260516/tdutils/td/utils/port/path.cpp
--- old/td-git20260508/tdutils/td/utils/port/path.cpp 2026-05-08
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/path.cpp 2026-06-09
20:14:16.700259868 +0200
@@ -6,10 +6,9 @@
//
#include "td/utils/port/path.h"
-#include "td/utils/port/config.h"
-
#include "td/utils/format.h"
#include "td/utils/logging.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/detail/skip_eintr.h"
#include "td/utils/ScopeGuard.h"
#include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/rlimit.cpp
new/td-git20260516/tdutils/td/utils/port/rlimit.cpp
--- old/td-git20260508/tdutils/td/utils/port/rlimit.cpp 2026-05-08
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/rlimit.cpp 2026-06-09
20:14:16.700259868 +0200
@@ -6,9 +6,8 @@
//
#include "td/utils/port/rlimit.h"
-#include "td/utils/port/config.h"
-
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#if TD_PORT_POSIX
#include <sys/resource.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/stacktrace.cpp
new/td-git20260516/tdutils/td/utils/port/stacktrace.cpp
--- old/td-git20260508/tdutils/td/utils/port/stacktrace.cpp 2026-05-08
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/stacktrace.cpp 2026-06-09
20:14:16.700259868 +0200
@@ -6,6 +6,8 @@
//
#include "td/utils/port/stacktrace.h"
+#include "td/utils/port/config.h"
+#include "td/utils/port/platform.h"
#include "td/utils/port/signals.h"
#if __GLIBC__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/thread_local.h
new/td-git20260516/tdutils/td/utils/port/thread_local.h
--- old/td-git20260508/tdutils/td/utils/port/thread_local.h 2026-05-08
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/thread_local.h 2026-06-09
20:14:16.700259868 +0200
@@ -6,8 +6,6 @@
//
#pragma once
-#include "td/utils/port/config.h"
-
#include "td/utils/common.h"
#include "td/utils/Destructor.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/uname.cpp
new/td-git20260516/tdutils/td/utils/port/uname.cpp
--- old/td-git20260508/tdutils/td/utils/port/uname.cpp 2026-05-08
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/uname.cpp 2026-06-09
20:14:16.700259868 +0200
@@ -6,12 +6,11 @@
//
#include "td/utils/port/uname.h"
-#include "td/utils/port/config.h"
-
#include "td/utils/common.h"
#include "td/utils/filesystem.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/Stat.h"
#include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/port/user.cpp
new/td-git20260516/tdutils/td/utils/port/user.cpp
--- old/td-git20260508/tdutils/td/utils/port/user.cpp 2026-05-08
16:53:41.203106353 +0200
+++ new/td-git20260516/tdutils/td/utils/port/user.cpp 2026-06-09
20:14:16.700259868 +0200
@@ -7,6 +7,7 @@
#include "td/utils/port/user.h"
#include "td/utils/port/config.h"
+#include "td/utils/port/platform.h"
#if TD_PORT_POSIX
#include "td/utils/SliceBuilder.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/td/utils/queue.h
new/td-git20260516/tdutils/td/utils/queue.h
--- old/td-git20260508/tdutils/td/utils/queue.h 2026-05-08 16:53:41.203106353
+0200
+++ new/td-git20260516/tdutils/td/utils/queue.h 2026-06-09 20:14:16.700259868
+0200
@@ -6,6 +6,7 @@
//
#pragma once
+#include "td/utils/port/config.h"
#include "td/utils/port/EventFd.h"
#include "td/utils/port/sleep.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/test/log.cpp
new/td-git20260516/tdutils/test/log.cpp
--- old/td-git20260508/tdutils/test/log.cpp 2026-05-08 16:53:41.204907284
+0200
+++ new/td-git20260516/tdutils/test/log.cpp 2026-06-09 20:14:16.701900584
+0200
@@ -7,11 +7,13 @@
#include "td/utils/AsyncFileLog.h"
#include "td/utils/benchmark.h"
#include "td/utils/CombinedLog.h"
+#include "td/utils/common.h"
#include "td/utils/FileLog.h"
#include "td/utils/format.h"
#include "td/utils/logging.h"
#include "td/utils/MemoryLog.h"
#include "td/utils/NullLog.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/path.h"
#include "td/utils/port/thread.h"
#include "td/utils/Slice.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/test/misc.cpp
new/td-git20260516/tdutils/test/misc.cpp
--- old/td-git20260508/tdutils/test/misc.cpp 2026-05-08 16:53:41.204907284
+0200
+++ new/td-git20260516/tdutils/test/misc.cpp 2026-06-09 20:14:16.701900584
+0200
@@ -21,6 +21,7 @@
#include "td/utils/invoke.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/EventFd.h"
#include "td/utils/port/FileFd.h"
#include "td/utils/port/IPAddress.h"
@@ -474,8 +475,8 @@
}
static void test_unique(td::vector<int> v, const td::vector<int> &expected) {
- auto v_str = td::transform(v, &td::to_string<int>);
- auto expected_str = td::transform(expected, &td::to_string<int>);
+ auto v_str = td::transform(v, [](int num) { return td::to_string(num); });
+ auto expected_str = td::transform(expected, [](int num) { return
td::to_string(num); });
td::unique(v);
ASSERT_EQ(expected, v);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/tdutils/test/port.cpp
new/td-git20260516/tdutils/test/port.cpp
--- old/td-git20260508/tdutils/test/port.cpp 2026-05-08 16:53:41.204907284
+0200
+++ new/td-git20260516/tdutils/test/port.cpp 2026-06-09 20:14:16.701900584
+0200
@@ -8,6 +8,7 @@
#include "td/utils/common.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/EventFd.h"
#include "td/utils/port/FileFd.h"
#include "td/utils/port/IoSlice.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/td-git20260508/test/tdclient.cpp
new/td-git20260516/test/tdclient.cpp
--- old/td-git20260508/test/tdclient.cpp 2026-05-08 16:53:41.205907257
+0200
+++ new/td-git20260516/test/tdclient.cpp 2026-06-09 20:14:16.702833928
+0200
@@ -22,6 +22,7 @@
#include "td/utils/format.h"
#include "td/utils/logging.h"
#include "td/utils/misc.h"
+#include "td/utils/port/config.h"
#include "td/utils/port/FileFd.h"
#include "td/utils/port/path.h"
#include "td/utils/port/sleep.h"
++++++ tdesktop-6.8.2-full.tar.gz -> tdesktop-6.9.1-full.tar.gz ++++++
/work/SRC/openSUSE:Factory/telegram-desktop/tdesktop-6.8.2-full.tar.gz
/work/SRC/openSUSE:Factory/.telegram-desktop.new.2375/tdesktop-6.9.1-full.tar.gz
differ: char 5, line 1
++++++ tg_owt-git20260123.tar.xz -> tg_owt-git20250512.tar.xz ++++++
/work/SRC/openSUSE:Factory/telegram-desktop/tg_owt-git20260123.tar.xz
/work/SRC/openSUSE:Factory/.telegram-desktop.new.2375/tg_owt-git20250512.tar.xz
differ: char 15, line 1