mirror of
https://github.com/weechat/weechat.git
synced 2026-06-13 06:34:47 +02:00
Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d67520a212 | |||
| b467f85f30 | |||
| 6d45a69f39 | |||
| 34f2e6cdd0 | |||
| a6e859b7ff | |||
| 103bddcc50 | |||
| 76a64e1280 | |||
| 75c01e8c8d | |||
| e8ce75f20c | |||
| 47f7518c1f | |||
| 9a9a262ea1 | |||
| 7fb3ca6686 | |||
| e98a32373e | |||
| 69d3787b5e | |||
| aa6cbf911e | |||
| cf1c4a689d | |||
| 48568edfe0 | |||
| d7b26e88b8 | |||
| 0407a08888 | |||
| ff3fd38086 | |||
| 847208f196 | |||
| f6ef908740 | |||
| f2bd5d773b | |||
| 6cbb35c644 | |||
| 372e7306bc | |||
| 927a50e366 | |||
| d0c00f7db2 | |||
| 9783256649 | |||
| 8106db400d | |||
| 4d617d0e01 | |||
| acbf1ddfcf |
@@ -29,6 +29,7 @@ Alphabetically:
|
||||
- Asakura
|
||||
- Bazerka
|
||||
- Benoit Papillault (benoit)
|
||||
- Caleb Josue Ruiz Torres
|
||||
- Chris Hills
|
||||
- Christian Duerr
|
||||
- Christian Heinz
|
||||
|
||||
@@ -13,9 +13,12 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
- **breaking:** core: fix buffer overflow in function utf8_next_char and return NULL for empty string
|
||||
- **breaking:** core: fix integer overflow and return "unsigned long" in function util_version_number
|
||||
- core: write configuration files on disk only if there are changes ([#2250](https://github.com/weechat/weechat/issues/2250))
|
||||
- core: always enable partial completion for templates in option weechat.completion.partial_completion_templates, add option weechat.completion.partial_completion_auto_expand to expand word on new completion ([#2253](https://github.com/weechat/weechat/issues/2253))
|
||||
- core: add script name in output of `/debug hooks <plugin>`
|
||||
|
||||
### Added
|
||||
|
||||
- core: add support of specifier `%@` for UTC time in function util_strftimeval
|
||||
- api: add function file_compare
|
||||
- irc: add support of strikethrough text in IRC messages ([#2248](https://github.com/weechat/weechat/issues/2248))
|
||||
- buflist: add variables `${number_zero}` and `${number_zero2}` (zero-padded buffer number)
|
||||
@@ -34,6 +37,8 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
- core: fix memory leak in function util_parse_delay
|
||||
- irc: display nick changes and quit messages when option irc.look.ignore_tag_messages is enabled ([#2241](https://github.com/weechat/weechat/issues/2241))
|
||||
- perl: fix build when multiplicity is not available ([#2243](https://github.com/weechat/weechat/issues/2243))
|
||||
- relay/weechat: fix empty buffers in client when WeeChat is running on Solaris/illumos
|
||||
- build: fix build on Solaris/illumos (issue #2251)
|
||||
|
||||
## Version 4.6.3 (2025-05-11)
|
||||
|
||||
|
||||
@@ -208,6 +208,7 @@ include(FindPkgConfig)
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckFunctionExists)
|
||||
include(CheckSymbolExists)
|
||||
include(CheckLibraryExists)
|
||||
|
||||
check_include_files("langinfo.h" HAVE_LANGINFO_CODESET)
|
||||
check_include_files("sys/resource.h" HAVE_SYS_RESOURCE_H)
|
||||
@@ -218,13 +219,33 @@ check_symbol_exists("malloc_trim" "malloc.h" HAVE_MALLOC_TRIM)
|
||||
check_function_exists(mallinfo HAVE_MALLINFO)
|
||||
check_function_exists(mallinfo2 HAVE_MALLINFO2)
|
||||
|
||||
check_symbol_exists("htonll" "sys/types.h;netinet/in.h;inttypes.h" HAVE_HTONLL)
|
||||
|
||||
check_symbol_exists("eat_newline_glitch" "term.h" HAVE_EAT_NEWLINE_GLITCH)
|
||||
|
||||
# Check if res_init requires libresolv
|
||||
check_function_exists(res_init, LIBC_HAS_RES_INIT)
|
||||
if(NOT LIBC_HAS_RES_INIT)
|
||||
find_library(RESOLV_LIBRARY resolv)
|
||||
if(RESOLV_LIBRARY)
|
||||
check_library_exists("${RESOLV_LIBRARY}" res_init "" LIBRESOLV_HAS_RES_INIT)
|
||||
if(LIBRESOLV_HAS_RES_INIT)
|
||||
list(APPEND EXTRA_LIBS ${RESOLV_LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Check for Large File Support
|
||||
if(ENABLE_LARGEFILE)
|
||||
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_LARGE_FILES)
|
||||
endif()
|
||||
|
||||
# _XPG4_2 is needed for macros like CMSG_SPACE
|
||||
# __EXTENSIONS__ is needed for constants like NI_MAXHOST and for struct timeval
|
||||
if(CMAKE_HOST_SOLARIS)
|
||||
add_definitions(-D_XPG4_2 -D__EXTENSIONS__)
|
||||
endif()
|
||||
|
||||
# Check for libgcrypt
|
||||
pkg_check_modules(LIBGCRYPT REQUIRED libgcrypt)
|
||||
include_directories(${LIBGCRYPT_INCLUDE_DIRS})
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
|
||||
# SPDX-FileCopyrightText: 2009 Julien Louis <ptitlouis@sysif.net>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#
|
||||
# This file is part of WeeChat, the extensible chat client.
|
||||
#
|
||||
# WeeChat is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# WeeChat is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# - Find Python
|
||||
# This module finds if Python is installed and determines where the include files
|
||||
# and libraries are. It also determines what the name of the library is. This
|
||||
# code sets the following variables:
|
||||
#
|
||||
# PYTHON_EXECUTABLE = full path to the python binary
|
||||
# PYTHON_INCLUDE_DIRS = path to where python.h can be found
|
||||
# PYTHON_LIBRARIES = path to where libpython.so* can be found
|
||||
# PYTHON_LDFLAGS = python compiler options for linking
|
||||
|
||||
pkg_check_modules(PYTHON python3-embed IMPORTED_TARGET GLOBAL)
|
||||
if(NOT PYTHON_FOUND)
|
||||
pkg_check_modules(PYTHON python3 IMPORTED_TARGET GLOBAL)
|
||||
endif()
|
||||
@@ -49,6 +49,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
#cmakedefine HAVE_MALLINFO2
|
||||
#cmakedefine HAVE_MALLOC_H
|
||||
#cmakedefine HAVE_MALLOC_TRIM
|
||||
#cmakedefine HAVE_HTONLL
|
||||
#cmakedefine HAVE_EAT_NEWLINE_GLITCH
|
||||
#cmakedefine HAVE_ASPELL_VERSION_STRING
|
||||
#cmakedefine HAVE_ENCHANT_GET_VERSION
|
||||
|
||||
@@ -38,6 +38,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
|
||||
if(ASCIIDOCTOR_FOUND)
|
||||
# common asciidoctor arguments
|
||||
set(ASCIIDOCTOR_ARGS
|
||||
-v
|
||||
-a experimental
|
||||
-a reproducible
|
||||
-a "prewrap!"
|
||||
|
||||
@@ -625,7 +625,7 @@ Einige Umgebungsvariablen werden von WeeChat genutzt, sofern sie definiert wurde
|
||||
[width="100%",cols="1m,6",options="header"]
|
||||
|===
|
||||
| Name | Beschreibung
|
||||
| WEECHAT_HOME | Das WeeChat Verzeichnis (beinhaltet Konfigurationsdateien, Protokolldateien, Skripten, ...). Gleiches Verhalten wie <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_HOME | Das WeeChat Verzeichnis (beinhaltet Konfigurationsdateien, Protokolldateien, Skripten, ...). Gleiches Verhalten wie <<build,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_PASSPHRASE | Die Passphrase zum Entschlüsseln von schutzwürdigen Daten.
|
||||
| WEECHAT_EXTRA_LIBDIR | Ein zusätzliches Verzeichnis um Erweiterungen zu installieren (vom "plugins" Verzeichnis in dieses Verzeichnis).
|
||||
|===
|
||||
@@ -3822,7 +3822,7 @@ WeeChat unterstützt folgende https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
|
||||
* <<irc_ircv3_batch,batch>>
|
||||
* <<irc_ircv3_cap_notify,cap-notify>>
|
||||
* <<irc_ircv3_chghost,chghost>>
|
||||
* <<irc_ircv3_draft/multiline,draft/multiline>>
|
||||
* <<irc_ircv3_draft_multiline,draft/multiline>>
|
||||
* <<irc_ircv3_echo_message,echo-message>>
|
||||
* <<irc_ircv3_extended_join,extended-join>>
|
||||
* <<irc_ircv3_invite_notify,invite-notify>>
|
||||
@@ -3869,7 +3869,7 @@ Spezifikation: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
|
||||
Diese Fähigkeit ermöglicht es dem Server, einen Account als Nachrichten-Tag an Befehle zu hängen,
|
||||
die an den Client gesendet werden. +
|
||||
WeeChat analysiert dieses Tag und speichert es in der Nachricht, aber es wird nicht verwendet oder
|
||||
angezeigt. Mit dem <<command_filter,/filter>> Befehl kann man diese Nachrichten explizit filtern,
|
||||
angezeigt. Mit dem <<command_weechat_filter,/filter>> Befehl kann man diese Nachrichten explizit filtern,
|
||||
in dem die Accounts nutzt.
|
||||
|
||||
Beispiel einer empfangenen IRC-Rohnachricht:
|
||||
|
||||
@@ -2165,7 +2165,7 @@ Arguments:
|
||||
Return value:
|
||||
|
||||
* array of strings, NULL if problem (must be freed by calling
|
||||
<<_free_split_command,free_split_command>> after use)
|
||||
<<_string_free_split_command,string_free_split_command>> after use)
|
||||
|
||||
C example:
|
||||
|
||||
@@ -4803,7 +4803,7 @@ This function is not available in scripting API.
|
||||
|
||||
==== util_strftimeval
|
||||
|
||||
_WeeChat ≥ 4.2.0, updated in 4.3.0._
|
||||
_WeeChat ≥ 4.2.0, updated in 4.3.0, 4.7.0._
|
||||
|
||||
Format date and time like function `strftime` in C library, using `struct timeval`
|
||||
as input, and supporting extra specifiers.
|
||||
@@ -4820,6 +4820,8 @@ Arguments:
|
||||
* _string_: buffer where the formatted string is stored
|
||||
* _max_: string size
|
||||
* _format_: format, the same as _strftime_ function, with these extra specifiers:
|
||||
** `%@`: return the date expressed in Coordinated Universal Time (UTC)
|
||||
instead of date relative to the user's specified timezone _(WeeChat ≥ 4.7.0)_
|
||||
** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits
|
||||
(for example `%.3` for milliseconds)
|
||||
** `%f`: alias of `%.6`
|
||||
@@ -4836,8 +4838,8 @@ C example:
|
||||
char time[256];
|
||||
struct timeval tv;
|
||||
gettimeofday (&tv, NULL);
|
||||
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
|
||||
/* result: 2023-12-26T18:10:04.460509 */
|
||||
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
|
||||
/* result: 2023-12-26T18:10:04.460509Z */
|
||||
----
|
||||
|
||||
[NOTE]
|
||||
|
||||
@@ -621,7 +621,7 @@ Some environment variables are used by WeeChat if they are defined:
|
||||
[width="100%",cols="1m,6",options="header"]
|
||||
|===
|
||||
| Name | Description
|
||||
| WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, etc.). Same behavior as <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, etc.). Same behavior as <<build,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_PASSPHRASE | The passphrase used to decrypt secured data.
|
||||
| WEECHAT_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path).
|
||||
|===
|
||||
@@ -3760,7 +3760,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
|
||||
* <<irc_ircv3_batch,batch>>
|
||||
* <<irc_ircv3_cap_notify,cap-notify>>
|
||||
* <<irc_ircv3_chghost,chghost>>
|
||||
* <<irc_ircv3_draft/multiline,draft/multiline>>
|
||||
* <<irc_ircv3_draft_multiline,draft/multiline>>
|
||||
* <<irc_ircv3_echo_message,echo-message>>
|
||||
* <<irc_ircv3_extended_join,extended-join>>
|
||||
* <<irc_ircv3_invite_notify,invite-notify>>
|
||||
@@ -3808,7 +3808,7 @@ Specification: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
|
||||
This capability allows the server to send account as message tag to commands
|
||||
sent to the client. +
|
||||
WeeChat parses this tag and saves it in the message, but it is not used or
|
||||
displayed. It can be used in <<command_filter,/filter>> command to filter
|
||||
displayed. It can be used in <<command_weechat_filter,/filter>> command to filter
|
||||
messages matching specific accounts.
|
||||
|
||||
Example of raw IRC message received:
|
||||
|
||||
@@ -2205,7 +2205,7 @@ Paramètres :
|
||||
Valeur de retour :
|
||||
|
||||
* tableau de chaînes, NULL en cas de problème (doit être supprimé par un appel à
|
||||
<<_free_split_command,free_split_command>> après utilisation)
|
||||
<<_string_free_split_command,string_free_split_command>> après utilisation)
|
||||
|
||||
Exemple en C :
|
||||
|
||||
@@ -4882,7 +4882,7 @@ Cette fonction n'est pas disponible dans l'API script.
|
||||
|
||||
==== util_strftimeval
|
||||
|
||||
_WeeChat ≥ 4.2.0, mis à jour dans la 4.3.0._
|
||||
_WeeChat ≥ 4.2.0, mis à jour dans la 4.3.0, 4.7.0._
|
||||
|
||||
Formatter la date et l'heure comme la fonction `strftime` de la bibliothèque C,
|
||||
en utilisant un `struct timeval` en entrée et en supportant des caractères de
|
||||
@@ -4901,6 +4901,8 @@ Paramètres :
|
||||
* _max_ : taille de la chaîne
|
||||
* _format_ : format, le même que celui de la fonction _strftime_, avec des
|
||||
caractères de conversion supplémentaires :
|
||||
** `%@` : retourner la date exprimée en Temps Universel Coordonné (UTC)
|
||||
au lieu de la date relative au fuseau horaire de l'utilisateur _(WeeChat ≥ 4.7.0)_
|
||||
** `%.N` où `N` est entre 1 and 6: microsecondes remplies avec des zéros sur
|
||||
N chiffres (par exemple `%.3` pour les millisecondes)
|
||||
** `%f` : alias de `%.6`
|
||||
@@ -4917,8 +4919,8 @@ Exemple en C :
|
||||
char time[256];
|
||||
struct timeval tv;
|
||||
gettimeofday (&tv, NULL);
|
||||
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
|
||||
/* résultat : 2023-12-26T18:10:04.460509 */
|
||||
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
|
||||
/* résultat : 2023-12-26T18:10:04.460509Z */
|
||||
----
|
||||
|
||||
[NOTE]
|
||||
|
||||
@@ -624,7 +624,7 @@ Des variables d'environnement sont utilisées par WeeChat si elles sont définie
|
||||
[width="100%",cols="1m,6",options="header"]
|
||||
|===
|
||||
| Nom | Description
|
||||
| WEECHAT_HOME | Le répertoire "maison" de WeeChat (avec les fichiers de configuration, logs, scripts, etc.). Même comportement que <<compile_with_cmake,l'option CMake>> `WEECHAT_HOME`.
|
||||
| WEECHAT_HOME | Le répertoire "maison" de WeeChat (avec les fichiers de configuration, logs, scripts, etc.). Même comportement que <<build,l'option CMake>> `WEECHAT_HOME`.
|
||||
| WEECHAT_PASSPHRASE | La phrase secrète utilisée pour déchiffrer les données sécurisées.
|
||||
| WEECHAT_EXTRA_LIBDIR | Un répertoire supplémentaire pour charger les extensions (depuis le répertoire "plugins" sous ce chemin).
|
||||
|===
|
||||
@@ -3869,7 +3869,7 @@ WeeChat supporte les https://ircv3.net/irc/[extensions IRCv3 ^↗^^] suivantes
|
||||
* <<irc_ircv3_batch,batch>>
|
||||
* <<irc_ircv3_cap_notify,cap-notify>>
|
||||
* <<irc_ircv3_chghost,chghost>>
|
||||
* <<irc_ircv3_draft/multiline,draft/multiline>>
|
||||
* <<irc_ircv3_draft_multiline,draft/multiline>>
|
||||
* <<irc_ircv3_echo_message,echo-message>>
|
||||
* <<irc_ircv3_extended_join,extended-join>>
|
||||
* <<irc_ircv3_invite_notify,invite-notify>>
|
||||
@@ -3917,7 +3917,7 @@ Spécification : https://ircv3.net/specs/extensions/account-tag[account-tag ^
|
||||
Cette capacité autorise le serveur à envoyer le compte comme étiquette de message
|
||||
dans les commandes envoyées au client. +
|
||||
WeeChat extrait cette étiquette et la sauve dans le message, mais elle n'est pas
|
||||
utilisée ni affichée. Elle peut être utilisée dans la commande <<command_filter,/filter>>
|
||||
utilisée ni affichée. Elle peut être utilisée dans la commande <<command_weechat_filter,/filter>>
|
||||
pour filtrer les messages correspondants à des comptes spécifiques.
|
||||
|
||||
Exemple de message IRC brut reçu :
|
||||
|
||||
@@ -2297,7 +2297,7 @@ Argomenti:
|
||||
Valore restituito:
|
||||
|
||||
* array di stringhe, NULL in caso di problemi (deve essere liberata chiamando
|
||||
<<_free_split_command,free_split_command>> dopo l'uso)
|
||||
<<_string_free_split_command,string_free_split_command>> dopo l'uso)
|
||||
|
||||
Esempio in C:
|
||||
|
||||
@@ -5023,7 +5023,7 @@ Questa funzione non è disponibile nelle API per lo scripting.
|
||||
// TRANSLATION MISSING
|
||||
==== util_strftimeval
|
||||
|
||||
_WeeChat ≥ 4.2.0, updated in 4.3.0._
|
||||
_WeeChat ≥ 4.2.0, updated in 4.3.0, 4.7.0._
|
||||
|
||||
Format date and time like function `strftime` in C library, using `struct timeval`
|
||||
as input, and supporting extra specifiers.
|
||||
@@ -5040,6 +5040,8 @@ Arguments:
|
||||
* _string_: buffer where the formatted string is stored
|
||||
* _max_: string size
|
||||
* _format_: format, the same as _strftime_ function, with these extra specifiers:
|
||||
** `%@`: return the date expressed in Coordinated Universal Time (UTC)
|
||||
instead of date relative to the user's specified timezone _(WeeChat ≥ 4.7.0)_
|
||||
** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits
|
||||
(for example `%.3` for milliseconds)
|
||||
** `%f`: alias of `%.6`
|
||||
@@ -5056,8 +5058,8 @@ C example:
|
||||
char time[256];
|
||||
struct timeval tv;
|
||||
gettimeofday (&tv, NULL);
|
||||
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
|
||||
/* result: 2023-12-26T18:10:04.460509 */
|
||||
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
|
||||
/* result: 2023-12-26T18:10:04.460509Z */
|
||||
----
|
||||
|
||||
[NOTE]
|
||||
|
||||
@@ -686,7 +686,7 @@ Some environment variables are used by WeeChat if they are defined:
|
||||
[width="100%",cols="1m,6",options="header"]
|
||||
|===
|
||||
| Name | Description
|
||||
| WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, ...). Same behavior as <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, ...). Same behavior as <<build,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_PASSPHRASE | The passphrase used to decrypt secured data.
|
||||
| WEECHAT_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path).
|
||||
|===
|
||||
@@ -4110,7 +4110,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
|
||||
* <<irc_ircv3_batch,batch>>
|
||||
* <<irc_ircv3_cap_notify,cap-notify>>
|
||||
* <<irc_ircv3_chghost,chghost>>
|
||||
* <<irc_ircv3_draft/multiline,draft/multiline>>
|
||||
* <<irc_ircv3_draft_multiline,draft/multiline>>
|
||||
* <<irc_ircv3_echo_message,echo-message>>
|
||||
* <<irc_ircv3_extended_join,extended-join>>
|
||||
* <<irc_ircv3_invite_notify,invite-notify>>
|
||||
@@ -4158,7 +4158,7 @@ Specification: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
|
||||
This capability allows the server to send account as message tag to commands
|
||||
sent to the client. +
|
||||
WeeChat parses this tag and saves it in the message, but it is not used or
|
||||
displayed. It can be used in <<command_filter,/filter>> command to filter
|
||||
displayed. It can be used in <<command_weechat_filter,/filter>> command to filter
|
||||
messages matching specific accounts.
|
||||
|
||||
Example of raw IRC message received:
|
||||
|
||||
@@ -2232,7 +2232,7 @@ char **weechat_string_split_command (const char *command, char separator);
|
||||
戻り値:
|
||||
|
||||
* 文字列の配列、分割に失敗した場合は NULL (使用後には必ず
|
||||
<<_free_split_command,free_split_command>> を呼び出して領域を開放してください)
|
||||
<<_string_free_split_command,string_free_split_command>> を呼び出して領域を開放してください)
|
||||
|
||||
C 言語での使用例:
|
||||
|
||||
@@ -4937,7 +4937,7 @@ weechat_printf (NULL, "date: %s",
|
||||
// TRANSLATION MISSING
|
||||
==== util_strftimeval
|
||||
|
||||
_WeeChat ≥ 4.2.0, updated in 4.3.0._
|
||||
_WeeChat ≥ 4.2.0, updated in 4.3.0, 4.7.0._
|
||||
|
||||
Format date and time like function `strftime` in C library, using `struct timeval`
|
||||
as input, and supporting extra specifiers.
|
||||
@@ -4954,6 +4954,8 @@ Arguments:
|
||||
* _string_: buffer where the formatted string is stored
|
||||
* _max_: string size
|
||||
* _format_: format, the same as _strftime_ function, with these extra specifiers:
|
||||
** `%@`: return the date expressed in Coordinated Universal Time (UTC)
|
||||
instead of date relative to the user's specified timezone _(WeeChat ≥ 4.7.0)_
|
||||
** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits
|
||||
(for example `%.3` for milliseconds)
|
||||
** `%f`: alias of `%.6`
|
||||
@@ -4970,8 +4972,8 @@ C example:
|
||||
char time[256];
|
||||
struct timeval tv;
|
||||
gettimeofday (&tv, NULL);
|
||||
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
|
||||
/* result: 2023-12-26T18:10:04.460509 */
|
||||
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
|
||||
/* result: 2023-12-26T18:10:04.460509Z */
|
||||
----
|
||||
|
||||
[NOTE]
|
||||
|
||||
@@ -659,7 +659,7 @@ include::includes/cmdline_options.ja.adoc[tag=debug]
|
||||
|===
|
||||
| 変数名 | 説明
|
||||
// TRANSLATION MISSING
|
||||
| WEECHAT_HOME | WeeChat ホームディレクトリ (ここには設定ファイル、ログ、スクリプトなどがあります) Same behavior as <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_HOME | WeeChat ホームディレクトリ (ここには設定ファイル、ログ、スクリプトなどがあります) Same behavior as <<build,CMake option>> `WEECHAT_HOME`.
|
||||
| WEECHAT_PASSPHRASE | 暗号化データを復号化するためのパスフレーズ
|
||||
| WEECHAT_EXTRA_LIBDIR | プラグインをロードするための追加ディレクトリパス (設定したパス内の "plugins" ディレクトリからロードします)
|
||||
|===
|
||||
@@ -3982,7 +3982,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
|
||||
* <<irc_ircv3_cap_notify,cap-notify>>
|
||||
* <<irc_ircv3_batch,batch>>
|
||||
* <<irc_ircv3_chghost,chghost>>
|
||||
* <<irc_ircv3_draft/multiline,draft/multiline>>
|
||||
* <<irc_ircv3_draft_multiline,draft/multiline>>
|
||||
* <<irc_ircv3_echo_message,echo-message>>
|
||||
* <<irc_ircv3_extended_join,extended-join>>
|
||||
* <<irc_ircv3_invite_notify,invite-notify>>
|
||||
@@ -4030,7 +4030,7 @@ Specification: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
|
||||
This capability allows the server to send account as message tag to commands
|
||||
sent to the client. +
|
||||
WeeChat parses this tag and saves it in the message, but it is not used or
|
||||
displayed. It can be used in <<command_filter,/filter>> command to filter
|
||||
displayed. It can be used in <<command_weechat_filter,/filter>> command to filter
|
||||
messages matching specific accounts.
|
||||
|
||||
Example of raw IRC message received:
|
||||
|
||||
@@ -620,7 +620,7 @@ Niektóre zmienne śwodowiskowe są używane przez WeeChat o ile zostały zdefin
|
||||
[width="100%",cols="1m,6",options="header"]
|
||||
|===
|
||||
| Nazwa | Opis
|
||||
| WEECHAT_HOME | Katalog domowy WeeChat (z plikami konfiguracyjnymi, logami, skryptami, ...). Działa tak samo jak <<compile_with_cmake,opcja CMake>> `WEECHAT_HOME`.
|
||||
| WEECHAT_HOME | Katalog domowy WeeChat (z plikami konfiguracyjnymi, logami, skryptami, ...). Działa tak samo jak <<build,opcja CMake>> `WEECHAT_HOME`.
|
||||
| WEECHAT_PASSPHRASE | Hasło używane do odszyfrowania zabezpieczonych danych.
|
||||
| WEECHAT_EXTRA_LIBDIR | Dodatkowy katalog do ładowania wtyczek (z katalogu "plugins" znajdującego się pod tą ścieżką).
|
||||
|===
|
||||
@@ -3785,7 +3785,7 @@ WeeChat wspiera następujące https://ircv3.net/irc/[rozszerzenia IRCv3 ^↗^^]
|
||||
* <<irc_ircv3_batch,batch>>
|
||||
* <<irc_ircv3_cap_notify,cap-notify>>
|
||||
* <<irc_ircv3_chghost,chghost>>
|
||||
* <<irc_ircv3_draft/multiline,draft/multiline>>
|
||||
* <<irc_ircv3_draft_multiline,draft/multiline>>
|
||||
* <<irc_ircv3_echo_message,echo-message>>
|
||||
* <<irc_ircv3_extended_join,extended-join>>
|
||||
* <<irc_ircv3_invite_notify,invite-notify>>
|
||||
@@ -3833,7 +3833,7 @@ Specyfikacja: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^^
|
||||
Ta właściwość pozwala serwerowi na wysyłanie komend konta jako tagów wiadomości
|
||||
do komend wysyłanych do klienta. +
|
||||
WeeChat parsuje te tagi i zapisuje je w wiadomości ale nie jest on używany ani
|
||||
wyświetlany. Można ich użyć w komendzie <<command_filter,/filter>> do filtrowania
|
||||
wyświetlany. Można ich użyć w komendzie <<command_weechat_filter,/filter>> do filtrowania
|
||||
wiadmości pasujących do konkretnych kont:
|
||||
|
||||
Przykład otrzymanej nieprzetworzonej wiadomości:
|
||||
|
||||
@@ -2086,7 +2086,7 @@ char **weechat_string_split_command (const char *command, char separator);
|
||||
|
||||
Повратна вредност:
|
||||
|
||||
* низ стрингова, NULL у случају проблема (након употребе мора да се ослободи позивом <<_free_split_command,free_split_command>>)
|
||||
* низ стрингова, NULL у случају проблема (након употребе мора да се ослободи позивом <<_string_free_split_command,string_free_split_command>>)
|
||||
|
||||
C пример:
|
||||
|
||||
@@ -4663,7 +4663,7 @@ weechat_printf (NULL, "date: %s",
|
||||
|
||||
==== util_strftimeval
|
||||
|
||||
_WeeChat ≥ 4.2.0, ажурирано у 4.3.0._
|
||||
_WeeChat ≥ 4.2.0, ажурирано у 4.3.0, 4.7.0._
|
||||
|
||||
Форматира датум и време као функција `strftime` из C библиотеке, користећи `struct timeval`
|
||||
као улаз уз подршку за додатне спецификаторе.
|
||||
@@ -4680,6 +4680,9 @@ int weechat_util_strftimeval (char *string, int max, const char *format, struct
|
||||
* _string_: бафер у који се смешта форматирани стринг
|
||||
* _max_: величина стринга
|
||||
* _format_: формат, исто као за _strftime_ функцију, са следећим додатним спецификаторима:
|
||||
// TRANSLATION MISSING
|
||||
** `%@`: return the date expressed in Coordinated Universal Time (UTC)
|
||||
instead of date relative to the user's specified timezone _(WeeChat ≥ 4.7.0)_
|
||||
** `%.N` где је `N` између 1 и 6: микросекунде допуњене нулама на N цифара
|
||||
(на пример `%.3` за милисекунде)
|
||||
** `%f`: алијас за `%.6`
|
||||
@@ -4696,8 +4699,8 @@ C пример:
|
||||
char time[256];
|
||||
struct timeval tv;
|
||||
gettimeofday (&tv, NULL);
|
||||
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
|
||||
/* резултат: 2023-12-26T18:10:04.460509 */
|
||||
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
|
||||
/* резултат: 2023-12-26T18:10:04.460509Z */
|
||||
----
|
||||
|
||||
[NOTE]
|
||||
|
||||
@@ -595,7 +595,7 @@ include::includes/cmdline_options.sr.adoc[tag=debug]
|
||||
[width="100%", cols="1m,6", options="header"]
|
||||
|===
|
||||
| Име | Опис
|
||||
| WEECHAT_HOME | WeeChat почетни директоријум (са конфигурационим фајловима, логовима, скриптама, итд.). Исто понашање као <<compile_with_cmake,CMake опција>> `WEECHAT_HOME`.
|
||||
| WEECHAT_HOME | WeeChat почетни директоријум (са конфигурационим фајловима, логовима, скриптама, итд.). Исто понашање као <<build,CMake опција>> `WEECHAT_HOME`.
|
||||
| WEECHAT_PASSPHRASE | Тајна реченица која се користи за дешифровање обезбеђених података.
|
||||
| WEECHAT_EXTRA_LIBDIR | Додатни директоријум из кога се учитавају додаци (из „plugins” директоријума на овој путањи).
|
||||
|===
|
||||
@@ -3556,7 +3556,7 @@ WeeChat подржава следећа https://ircv3.net/irc/[IRCv3 проши
|
||||
* <<irc_ircv3_batch,batch>>
|
||||
* <<irc_ircv3_cap_notify,cap-notify>>
|
||||
* <<irc_ircv3_chghost,chghost>>
|
||||
* <<irc_ircv3_draft/multiline,draft/multiline>>
|
||||
* <<irc_ircv3_draft_multiline,draft/multiline>>
|
||||
* <<irc_ircv3_echo_message,echo-message>>
|
||||
* <<irc_ircv3_extended_join,extended-join>>
|
||||
* <<irc_ircv3_invite_notify,invite-notify>>
|
||||
@@ -3602,7 +3602,7 @@ WeeChat такве поруке приказује ако је опција
|
||||
|
||||
Ова могућност оспособљава сервер да шаље налог као ознаку поруке у командама које шаље клијенту. +
|
||||
WeeChat парсира ову ознаку у чува је у поруци, али се она не користи нити приказује. Може да се
|
||||
користи у <<command_filter,/filter>> команди за филтрирање порука које се подударају са
|
||||
користи у <<command_weechat_filter,/filter>> команди за филтрирање порука које се подударају са
|
||||
одређеним налозима.
|
||||
|
||||
Пример примљене сирове IRC поруке:
|
||||
|
||||
+1
-2
@@ -81,8 +81,7 @@ foreach(pofile ${PO_FILES})
|
||||
add_custom_command(
|
||||
OUTPUT "${mofile}"
|
||||
COMMAND "${MSGMERGE_EXECUTABLE}" ARGS --quiet -o "${CMAKE_CURRENT_BINARY_DIR}/${pofile}" "${CMAKE_CURRENT_SOURCE_DIR}/${pofile}" ${POT_FILE_PATH}
|
||||
COMMAND "${MSGFMT_EXECUTABLE}" ARGS -o "${mofile}" "${CMAKE_CURRENT_BINARY_DIR}/${pofile}"
|
||||
COMMAND "${MSGFMT_EXECUTABLE}" ARGS -c --statistics --verbose --output-file=/dev/null "${CMAKE_CURRENT_BINARY_DIR}/${pofile}"
|
||||
COMMAND "${MSGFMT_EXECUTABLE}" ARGS -c --statistics --verbose -o "${mofile}" "${CMAKE_CURRENT_BINARY_DIR}/${pofile}"
|
||||
DEPENDS "${POT_FILE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/${pofile}"
|
||||
COMMENT "Compiling ${polang}.po"
|
||||
)
|
||||
|
||||
@@ -23,7 +23,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:24+0200\n"
|
||||
"Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -5440,6 +5440,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "upozornit uživatele pokud nastane částečné doplnění"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6375,15 +6379,13 @@ msgstr "Myš je vypnuta"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', velikost: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#, fuzzy
|
||||
msgid "fork error"
|
||||
msgstr "chyba"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-05 09:24+0200\n"
|
||||
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
|
||||
"Language-Team: German <kde-i18n-de@kde.org>\n"
|
||||
@@ -6199,6 +6199,10 @@ msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr ""
|
||||
"erzeugt eine Mitteilung (BEL) wenn eine teilweise Vervollständigung auftritt"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -7228,15 +7232,12 @@ msgstr "Maus ist inaktiv"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', Größe: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr "WeeChat wird im Hintergrund ausgeführt..."
|
||||
|
||||
#, c-format
|
||||
msgid "fork error"
|
||||
msgstr "Fork-Fehler"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@@ -7837,8 +7838,8 @@ msgstr ""
|
||||
|
||||
msgid " - ${number_zero2}: like ${number2} but the number is zero-padded"
|
||||
msgstr ""
|
||||
" - ${number_zero2}: wie ${number2}, aber die Zahl wird mit Nullen"
|
||||
" aufgefüllt"
|
||||
" - ${number_zero2}: wie ${number2}, aber die Zahl wird mit Nullen "
|
||||
"aufgefüllt"
|
||||
|
||||
msgid ""
|
||||
" - ${number_displayed}: \"1\" if the number is displayed, otherwise \"0\""
|
||||
@@ -18963,4 +18964,3 @@ msgstr ""
|
||||
"%s%s Datei \"%s\" zum Fortsetzen der Übertragung wird nicht akzeptiert "
|
||||
"(Port: %d, Startposition: %llu): xfer nicht gefunden oder nicht bereit für "
|
||||
"Transfer"
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Santiago Forero <santiago@forero.xyz>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -170,7 +170,7 @@ msgid ""
|
||||
"%sRenumbering is allowed only if option weechat.look.buffer_auto_renumber is "
|
||||
"off"
|
||||
msgstr ""
|
||||
"%sEl renombrado es permitido solo sila opción "
|
||||
"%sEl renombrado es permitido solo si la opción "
|
||||
"weechat.look.buffer_auto_renumber está desactivada (off)"
|
||||
|
||||
#, c-format
|
||||
@@ -846,7 +846,7 @@ msgstr "%sError: opción \"%s\" no encontrada"
|
||||
#, fuzzy
|
||||
#| msgid "Option changed: "
|
||||
msgid "Option unchanged: "
|
||||
msgstr "Opción cambiada: "
|
||||
msgstr "Opción sin cambios: "
|
||||
|
||||
msgid "Option changed: "
|
||||
msgstr "Opción cambiada: "
|
||||
@@ -5577,6 +5577,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "alertar al usuario cuando ocurre un completado parcial"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6559,15 +6563,13 @@ msgstr "Ratón desactivado"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', tamaño: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#, fuzzy
|
||||
msgid "fork error"
|
||||
msgstr "error"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:24+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-06-30 09:34+0200\n"
|
||||
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
"Language: fr\n"
|
||||
@@ -6068,6 +6068,12 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "envoyer une alerte (BEL) lorsqu'une complétion partielle survient"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
"étendre automatiquement le mot après une complétion partielle lors d'une "
|
||||
"nouvelle complétion"
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -7089,15 +7095,12 @@ msgstr "La souris est désactivée"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', taille : %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr "Lancement de WeeChat en tâche de fond..."
|
||||
|
||||
#, c-format
|
||||
msgid "fork error"
|
||||
msgstr "erreur de fork"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -5144,6 +5144,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6037,15 +6041,13 @@ msgstr "Nincs aliasz definiálva.\n"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#, fuzzy
|
||||
msgid "fork error"
|
||||
msgstr "%sSzerver: %s%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "Rendben"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -5560,6 +5560,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "avvisa l'utente quando si verifica un completamento parziale"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6497,15 +6501,13 @@ msgstr "Mouse disabilitato"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', dimensione %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#, fuzzy
|
||||
msgid "fork error"
|
||||
msgstr "errore"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
|
||||
"Language-Team: Japanese <https://github.com/l/weechat/tree/master/"
|
||||
@@ -5740,6 +5740,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "補完候補が複数あった場合に警告 (BEL) を送信"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6712,15 +6716,12 @@ msgstr "マウスを無効化しました"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s'、サイズ: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr "WeeChat をバックグラウンドで実行中..."
|
||||
|
||||
#, c-format
|
||||
msgid "fork error"
|
||||
msgstr "フォークエラー"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "成功"
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -6037,6 +6037,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "wyślij alarm (BEL), kiedy nastąpi częściowe dopełnienie"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -7080,15 +7084,12 @@ msgstr "Obsługa myszy wyłączona"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', rozmiar: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr "Uruchamianie WeeChat w tle..."
|
||||
|
||||
#, c-format
|
||||
msgid "fork error"
|
||||
msgstr "nie udało się utworzyć procesu"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
|
||||
"Language-Team: Portuguese <>\n"
|
||||
@@ -5778,6 +5778,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "alertar o utilizador ao completar parcialmente"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6754,15 +6758,13 @@ msgstr "O rato está desativado"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', tamanho: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#, fuzzy
|
||||
msgid "fork error"
|
||||
msgstr "erro"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
+6
-4
@@ -23,7 +23,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Érico Nogueira <ericonr@disroot.org>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -5481,6 +5481,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "alertar usuário quando uma completação parcial ocorre"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6404,15 +6408,13 @@ msgstr "Mouse está desabilitado"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', tamanho: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#, fuzzy
|
||||
msgid "fork error"
|
||||
msgstr "%s%s: erro: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -5178,6 +5178,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6075,15 +6079,13 @@ msgstr "Сокращения не заданы.\n"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#, fuzzy
|
||||
msgid "fork error"
|
||||
msgstr "%sСервер: %s%s\n"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -5861,6 +5861,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "шаље упозорење (BEL) када се догоди делимично довршавање"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6865,15 +6869,12 @@ msgstr "Миш је искључен"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM=’%s’, величина: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr "WeeChat се извршава у позадини..."
|
||||
|
||||
#, c-format
|
||||
msgid "fork error"
|
||||
msgstr "грешка при рачвању"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "ОК"
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2025-05-04 09:25+0200\n"
|
||||
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -5734,6 +5734,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr "kısmi bir tamamlama gerçekleştiğinde uyarı (BEL) gönder"
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -6757,15 +6761,12 @@ msgstr "Fare devre dışı"
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr " TERM='%s', boyut: %dx%d"
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr "WeeChat arka planda çalışıyor..."
|
||||
|
||||
#, c-format
|
||||
msgid "fork error"
|
||||
msgstr "çatal hatası"
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr "TAMAM"
|
||||
|
||||
|
||||
+5
-4
@@ -23,7 +23,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: WeeChat\n"
|
||||
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
|
||||
"POT-Creation-Date: 2025-05-04 09:21+0200\n"
|
||||
"POT-Creation-Date: 2025-06-30 09:32+0200\n"
|
||||
"PO-Revision-Date: 2014-08-16 10:27+0200\n"
|
||||
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
@@ -4804,6 +4804,10 @@ msgstr ""
|
||||
msgid "send alert (BEL) when a partial completion occurs"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"automatically expand word after partial completion when completing again"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"partially complete command names (stop when many commands found begin with "
|
||||
"same letters)"
|
||||
@@ -5622,15 +5626,12 @@ msgstr ""
|
||||
msgid " TERM='%s', size: %dx%d"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "Running WeeChat in background..."
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "fork error"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -313,6 +313,7 @@ struct t_config_option *config_completion_nick_first_only = NULL;
|
||||
struct t_config_option *config_completion_nick_ignore_chars = NULL;
|
||||
struct t_config_option *config_completion_nick_ignore_words = NULL;
|
||||
struct t_config_option *config_completion_partial_completion_alert = NULL;
|
||||
struct t_config_option *config_completion_partial_completion_auto_expand = NULL;
|
||||
struct t_config_option *config_completion_partial_completion_command = NULL;
|
||||
struct t_config_option *config_completion_partial_completion_command_arg = NULL;
|
||||
struct t_config_option *config_completion_partial_completion_count = NULL;
|
||||
@@ -5243,6 +5244,13 @@ config_weechat_init_options (void)
|
||||
N_("send alert (BEL) when a partial completion occurs"),
|
||||
NULL, 0, 0, "on", NULL, 0,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
config_completion_partial_completion_auto_expand = config_file_new_option (
|
||||
weechat_config_file, weechat_config_section_completion,
|
||||
"partial_completion_auto_expand", "boolean",
|
||||
N_("automatically expand word after partial completion when "
|
||||
"completing again"),
|
||||
NULL, 0, 0, "on", NULL, 0,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
config_completion_partial_completion_command = config_file_new_option (
|
||||
weechat_config_file, weechat_config_section_completion,
|
||||
"partial_completion_command", "boolean",
|
||||
|
||||
@@ -362,6 +362,7 @@ extern struct t_config_option *config_completion_nick_first_only;
|
||||
extern struct t_config_option *config_completion_nick_ignore_chars;
|
||||
extern struct t_config_option *config_completion_nick_ignore_words;
|
||||
extern struct t_config_option *config_completion_partial_completion_alert;
|
||||
extern struct t_config_option *config_completion_partial_completion_auto_expand;
|
||||
extern struct t_config_option *config_completion_partial_completion_command;
|
||||
extern struct t_config_option *config_completion_partial_completion_command_arg;
|
||||
extern struct t_config_option *config_completion_partial_completion_count;
|
||||
|
||||
+10
-6
@@ -36,10 +36,18 @@
|
||||
/* Bring in htobe64 */
|
||||
#ifdef __ANDROID__
|
||||
#define _BSD_SOURCE
|
||||
#define BE_INT64 htobe64
|
||||
#include <endian.h>
|
||||
#elif defined(__APPLE__)
|
||||
#include <libkern/OSByteOrder.h>
|
||||
#define htobe64 OSSwapHostToBigInt64
|
||||
#define BE_INT64 OSSwapHostToBigInt64
|
||||
#elif defined(HAVE_HTONLL)
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include <inttypes.h>
|
||||
#define BE_INT64 htonll
|
||||
#else
|
||||
#define BE_INT64 htobe64
|
||||
#endif
|
||||
|
||||
#include "weechat.h"
|
||||
@@ -49,10 +57,6 @@
|
||||
#include "core-string.h"
|
||||
#include "../plugins/plugin.h"
|
||||
|
||||
#ifdef htonll
|
||||
#define htobe64 htonll
|
||||
#endif
|
||||
|
||||
char *weecrypto_hash_algo_string[] = {
|
||||
"crc32",
|
||||
"md5",
|
||||
@@ -536,7 +540,7 @@ weecrypto_totp_generate_internal (const char *secret, int length_secret,
|
||||
int rc, offset, length;
|
||||
unsigned long bin_code;
|
||||
|
||||
moving_factor_swapped = htobe64 (moving_factor);
|
||||
moving_factor_swapped = BE_INT64 (moving_factor);
|
||||
rc = weecrypto_hmac (secret, length_secret,
|
||||
&moving_factor_swapped, sizeof (moving_factor_swapped),
|
||||
GCRY_MD_SHA1,
|
||||
|
||||
@@ -611,6 +611,12 @@ debug_hooks_plugin_types (const char *plugin_mask, const char **hook_types)
|
||||
(ptr_hook->plugin) ?
|
||||
ptr_hook->plugin->name : PLUGIN_CORE,
|
||||
-1);
|
||||
if (ptr_hook->subplugin)
|
||||
{
|
||||
string_dyn_concat (result_type, "(", -1);
|
||||
string_dyn_concat (result_type, ptr_hook->subplugin, -1);
|
||||
string_dyn_concat (result_type, ")", -1);
|
||||
}
|
||||
string_dyn_concat (result_type, ": ", -1);
|
||||
string_dyn_concat (result_type, desc, -1);
|
||||
string_dyn_concat (result_type, "\n", -1);
|
||||
|
||||
@@ -28,13 +28,6 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
/* _XPG4_2 is needed on SunOS for macros like CMSG_SPACE */
|
||||
/* __EXTENSIONS__ is needed on SunOS for constants like NI_MAXHOST */
|
||||
#ifdef __sun
|
||||
#define _XPG4_2
|
||||
#define __EXTENSIONS__
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -666,7 +666,9 @@ struct t_url_option url_options[] =
|
||||
#endif
|
||||
URL_DEF_OPTION(PINNEDPUBLICKEY, STRING, NULL),
|
||||
URL_DEF_OPTION(SSL_VERIFYSTATUS, LONG, NULL),
|
||||
#if LIBCURL_VERSION_NUM < 0x080F00 /* < 8.15.0 */
|
||||
URL_DEF_OPTION(SSL_FALSESTART, LONG, NULL),
|
||||
#endif
|
||||
#if LIBCURL_VERSION_NUM >= 0x073400 /* 7.52.0 */
|
||||
URL_DEF_OPTION(PROXY_CAINFO, STRING, NULL),
|
||||
URL_DEF_OPTION(PROXY_CAPATH, STRING, NULL),
|
||||
|
||||
+16
-5
@@ -168,6 +168,8 @@ util_get_time_string (const time_t *date)
|
||||
/*
|
||||
* Formats date and time like strftime (but with timeval structure as input)
|
||||
* and adds extra specifiers:
|
||||
* - "%@": return the date expressed in Coordinated Universal Time (UTC)
|
||||
* instead of date relative to the user's specified timezone
|
||||
* - "%.1" to "%.6": first N digits of microseconds, zero-padded
|
||||
* - "%f": alias of "%.6" (microseconds, zero-padded to 6 digits)
|
||||
* - "%!": timestamp as integer, in seconds (value of tv->tv_sec)
|
||||
@@ -178,14 +180,15 @@ util_strftimeval (char *string, int max, const char *format, struct timeval *tv)
|
||||
{
|
||||
char **format2, str_temp[32];
|
||||
const char *ptr_format;
|
||||
struct tm *local_time;
|
||||
int length, bytes;
|
||||
struct tm *date_time;
|
||||
int length, bytes, local_time;
|
||||
long usec;
|
||||
|
||||
if (!string || (max <= 0) || !format || !tv)
|
||||
return 0;
|
||||
|
||||
string[0] = '\0';
|
||||
local_time = 1;
|
||||
|
||||
if (!format[0])
|
||||
return 0;
|
||||
@@ -208,6 +211,11 @@ util_strftimeval (char *string, int max, const char *format, struct timeval *tv)
|
||||
string_dyn_concat (format2, "%%", -1);
|
||||
ptr_format += 2;
|
||||
}
|
||||
else if ((ptr_format[0] == '%') && (ptr_format[1] == '@'))
|
||||
{
|
||||
local_time = 0;
|
||||
ptr_format += 2;
|
||||
}
|
||||
else if ((ptr_format[0] == '%') && (ptr_format[1] == '.'))
|
||||
{
|
||||
if ((ptr_format[2] >= '1') && (ptr_format[2] <= '6'))
|
||||
@@ -244,14 +252,17 @@ util_strftimeval (char *string, int max, const char *format, struct timeval *tv)
|
||||
}
|
||||
}
|
||||
|
||||
local_time = localtime (&(tv->tv_sec));
|
||||
if (!local_time)
|
||||
if (local_time)
|
||||
date_time = localtime (&(tv->tv_sec));
|
||||
else
|
||||
date_time = gmtime (&(tv->tv_sec));
|
||||
if (!date_time)
|
||||
{
|
||||
string_dyn_free (format2, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bytes = strftime (string, max, *format2, local_time);
|
||||
bytes = strftime (string, max, *format2, date_time);
|
||||
|
||||
string_dyn_free (format2, 1);
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#ifndef WEECHAT_HOOK_URL_H
|
||||
#define WEECHAT_HOOK_URL_H
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
struct t_weechat_plugin;
|
||||
struct t_infolist_item;
|
||||
struct t_hashtable;
|
||||
|
||||
@@ -53,11 +53,6 @@ if(ENABLE_ZSTD)
|
||||
list(APPEND EXTRA_LIBS ${LIBZSTD_LDFLAGS})
|
||||
endif()
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||
# link with resolv lib on macOS
|
||||
list(APPEND EXTRA_LIBS "resolv")
|
||||
endif()
|
||||
|
||||
if(ENABLE_NCURSES)
|
||||
subdirs(normal)
|
||||
endif()
|
||||
|
||||
@@ -49,23 +49,20 @@ daemonize (void)
|
||||
pid_t pid;
|
||||
int fd, i;
|
||||
|
||||
printf (_("Running WeeChat in background..."));
|
||||
printf (" ");
|
||||
printf ("%s ", _("Running WeeChat in background..."));
|
||||
|
||||
pid = fork ();
|
||||
|
||||
if (pid < 0)
|
||||
{
|
||||
printf (_("fork error"));
|
||||
printf ("\n");
|
||||
printf ("%s\n", _("fork error"));
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (pid > 0)
|
||||
{
|
||||
/* parent process */
|
||||
printf (_("OK"));
|
||||
printf ("\n");
|
||||
printf ("%s\n", _("OK"));
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ set(LIB_GUI_CURSES_SRC
|
||||
|
||||
find_package(Ncurses)
|
||||
if(NCURSES_FOUND)
|
||||
add_definitions(${NCURSES_CFLAGS})
|
||||
check_include_files(ncursesw/ncurses.h NCURSESW_HEADERS)
|
||||
if(NCURSESW_HEADERS)
|
||||
add_definitions(-DHAVE_NCURSESW_CURSES_H)
|
||||
|
||||
+74
-34
@@ -127,8 +127,8 @@ gui_completion_init (struct t_gui_completion *completion,
|
||||
completion->args = NULL;
|
||||
completion->direction = 0;
|
||||
completion->add_space = 1;
|
||||
completion->force_partial_completion = 0;
|
||||
completion->reverse_partial_completion = 0;
|
||||
completion->partial_completion = 0;
|
||||
completion->template_partial_completion = 0;
|
||||
|
||||
completion->list = arraylist_new (
|
||||
32, 1, 0,
|
||||
@@ -631,7 +631,7 @@ gui_completion_build_list_template (struct t_gui_completion *completion,
|
||||
config_hashtable_completion_partial_templates,
|
||||
custom_completion))
|
||||
{
|
||||
completion->reverse_partial_completion = 1;
|
||||
completion->template_partial_completion = 1;
|
||||
}
|
||||
gui_completion_custom (completion,
|
||||
custom_completion,
|
||||
@@ -907,8 +907,6 @@ gui_completion_find_context (struct t_gui_completion *completion,
|
||||
const char *ptr_command, *ptr_data, *ptr_space, *ptr_newline, *prev_char;
|
||||
|
||||
/* look for context */
|
||||
gui_completion_free_data (completion);
|
||||
gui_completion_init (completion, completion->plugin, completion->buffer);
|
||||
ptr_command = NULL;
|
||||
command_arg = 0;
|
||||
|
||||
@@ -1241,7 +1239,7 @@ gui_completion_partial_build_list (struct t_gui_completion *completion,
|
||||
void
|
||||
gui_completion_complete (struct t_gui_completion *completion)
|
||||
{
|
||||
int length, word_found_seen, other_completion, partial_completion;
|
||||
int length, word_found_seen, other_completion;
|
||||
int common_prefix_size, index, index2;
|
||||
struct t_gui_completion_word *ptr_completion_word, *ptr_completion_word2;
|
||||
|
||||
@@ -1249,34 +1247,15 @@ gui_completion_complete (struct t_gui_completion *completion)
|
||||
word_found_seen = 0;
|
||||
other_completion = 0;
|
||||
|
||||
partial_completion = completion->force_partial_completion;
|
||||
|
||||
if (!partial_completion)
|
||||
{
|
||||
if (completion->context == GUI_COMPLETION_COMMAND)
|
||||
{
|
||||
partial_completion = CONFIG_BOOLEAN(config_completion_partial_completion_command);
|
||||
}
|
||||
else if (completion->context == GUI_COMPLETION_COMMAND_ARG)
|
||||
{
|
||||
partial_completion = CONFIG_BOOLEAN(config_completion_partial_completion_command_arg);
|
||||
}
|
||||
else
|
||||
partial_completion = CONFIG_BOOLEAN(config_completion_partial_completion_other);
|
||||
}
|
||||
|
||||
if (completion->reverse_partial_completion)
|
||||
partial_completion ^= 1;
|
||||
|
||||
common_prefix_size = 0;
|
||||
if (partial_completion
|
||||
if (completion->partial_completion
|
||||
&& completion->list && (completion->list->size > 0))
|
||||
{
|
||||
common_prefix_size = gui_completion_common_prefix_size (completion->list,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (partial_completion
|
||||
if (completion->partial_completion
|
||||
&& completion->word_found
|
||||
&& (utf8_strlen (completion->word_found) >= common_prefix_size))
|
||||
{
|
||||
@@ -1355,7 +1334,7 @@ gui_completion_complete (struct t_gui_completion *completion)
|
||||
completion->position = 0;
|
||||
|
||||
/* stop after common prefix, if asked by user */
|
||||
if (partial_completion
|
||||
if (completion->partial_completion
|
||||
&& ((utf8_strlen (completion->word_found) >= common_prefix_size))
|
||||
&& (other_completion > 0))
|
||||
{
|
||||
@@ -1523,7 +1502,7 @@ gui_completion_search (struct t_gui_completion *completion, const char *data,
|
||||
int position, int direction)
|
||||
{
|
||||
char *old_word_found;
|
||||
int real_position;
|
||||
int real_position, force_no_partial;
|
||||
|
||||
if (!completion || !data || (position < 0))
|
||||
return 0;
|
||||
@@ -1532,14 +1511,75 @@ gui_completion_search (struct t_gui_completion *completion, const char *data,
|
||||
|
||||
completion->direction = direction;
|
||||
|
||||
force_no_partial = 0;
|
||||
if ((completion->context != GUI_COMPLETION_NULL)
|
||||
&& (arraylist_size (completion->partial_list) > 0)
|
||||
&& CONFIG_BOOLEAN(config_completion_partial_completion_auto_expand))
|
||||
{
|
||||
force_no_partial = 1;
|
||||
arraylist_clear (completion->partial_list);
|
||||
}
|
||||
|
||||
/* if new completion => look for base word */
|
||||
if (real_position != completion->position)
|
||||
{
|
||||
free (completion->word_found);
|
||||
completion->word_found = NULL;
|
||||
completion->word_found_is_nick = 0;
|
||||
gui_completion_free_data (completion);
|
||||
gui_completion_init (completion, completion->plugin, completion->buffer);
|
||||
completion->partial_completion = (direction < 0);
|
||||
completion->direction = direction;
|
||||
gui_completion_find_context (completion, data, real_position);
|
||||
completion->force_partial_completion = (direction < 0);
|
||||
if (force_no_partial)
|
||||
{
|
||||
completion->partial_completion = 0;
|
||||
completion->direction = 1;
|
||||
}
|
||||
else if (completion->template_partial_completion)
|
||||
{
|
||||
if (completion->direction < 0)
|
||||
{
|
||||
completion->partial_completion = 0;
|
||||
completion->direction = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
completion->partial_completion = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (completion->context)
|
||||
{
|
||||
case GUI_COMPLETION_NULL:
|
||||
break;
|
||||
case GUI_COMPLETION_COMMAND:
|
||||
if (CONFIG_BOOLEAN(config_completion_partial_completion_command))
|
||||
{
|
||||
completion->partial_completion ^= 1;
|
||||
if (completion->direction < 0)
|
||||
completion->direction = 1;
|
||||
}
|
||||
break;
|
||||
case GUI_COMPLETION_COMMAND_ARG:
|
||||
if (CONFIG_BOOLEAN(config_completion_partial_completion_command_arg))
|
||||
{
|
||||
completion->partial_completion ^= 1;
|
||||
if (completion->direction < 0)
|
||||
completion->direction = 1;
|
||||
}
|
||||
break;
|
||||
case GUI_COMPLETION_AUTO:
|
||||
if (CONFIG_BOOLEAN(config_completion_partial_completion_other))
|
||||
{
|
||||
completion->partial_completion ^= 1;
|
||||
if (completion->direction < 0)
|
||||
completion->direction = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* completion */
|
||||
@@ -1656,8 +1696,8 @@ gui_completion_hdata_completion_cb (const void *pointer, void *data,
|
||||
HDATA_VAR(struct t_gui_completion, args, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, direction, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, add_space, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, force_partial_completion, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, reverse_partial_completion, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, partial_completion, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, template_partial_completion, INTEGER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, list, POINTER, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, word_found, STRING, 0, NULL, NULL);
|
||||
HDATA_VAR(struct t_gui_completion, word_found_is_nick, INTEGER, 0, NULL, NULL);
|
||||
@@ -1745,8 +1785,8 @@ gui_completion_print_log (void)
|
||||
log_printf (" args. . . . . . . . . . . : '%s'", ptr_completion->args);
|
||||
log_printf (" direction . . . . . . . . : %d", ptr_completion->direction);
|
||||
log_printf (" add_space . . . . . . . . : %d", ptr_completion->add_space);
|
||||
log_printf (" force_partial_completion. : %d", ptr_completion->force_partial_completion);
|
||||
log_printf (" reverse_partial_completion: %d", ptr_completion->reverse_partial_completion);
|
||||
log_printf (" partial_completion. . . . : %d", ptr_completion->partial_completion);
|
||||
log_printf (" template_partial_completion: %d", ptr_completion->template_partial_completion);
|
||||
log_printf (" list. . . . . . . . . . . : %p", ptr_completion->list);
|
||||
log_printf (" word_found. . . . . . . . : '%s'", ptr_completion->word_found);
|
||||
log_printf (" word_found_is_nick. . . . : %d", ptr_completion->word_found_is_nick);
|
||||
|
||||
@@ -56,8 +56,8 @@ struct t_gui_completion
|
||||
char *args; /* command line args (including base word) */
|
||||
int direction; /* +1=search next word, -1=previous word */
|
||||
int add_space; /* add space after completion? */
|
||||
int force_partial_completion; /* force partial completion? */
|
||||
int reverse_partial_completion; /* reverse partial completion? */
|
||||
int partial_completion; /* partial completion? */
|
||||
int template_partial_completion; /* template with partial completion? */
|
||||
|
||||
/* for command argument completion */
|
||||
struct t_arraylist *list; /* data list for completion */
|
||||
|
||||
@@ -124,8 +124,12 @@ else()
|
||||
endif()
|
||||
|
||||
if(ENABLE_SCRIPTS AND ENABLE_PYTHON)
|
||||
find_package(Python)
|
||||
if(PYTHON_FOUND)
|
||||
if(CMAKE_VERSION VERSION_LESS "3.18.0")
|
||||
find_package(Python 3.0 COMPONENTS Development)
|
||||
else()
|
||||
find_package(Python 3.0 COMPONENTS Development.Embed)
|
||||
endif()
|
||||
if(Python_FOUND)
|
||||
add_subdirectory(python)
|
||||
else()
|
||||
message(SEND_ERROR "Python not found")
|
||||
|
||||
@@ -27,6 +27,7 @@ add_library(lua MODULE
|
||||
set_target_properties(lua PROPERTIES PREFIX "")
|
||||
|
||||
if(LUA_FOUND)
|
||||
add_definitions(${LUA_CFLAGS})
|
||||
include_directories(${LUA_INCLUDE_DIRS})
|
||||
target_link_libraries(lua ${LUA_LDFLAGS} weechat_plugins_scripts coverage_config)
|
||||
endif()
|
||||
|
||||
@@ -25,8 +25,10 @@ add_library(python MODULE
|
||||
)
|
||||
set_target_properties(python PROPERTIES PREFIX "")
|
||||
|
||||
if(PYTHON_FOUND)
|
||||
target_link_libraries(python PkgConfig::PYTHON weechat_plugins_scripts coverage_config)
|
||||
if(Python_FOUND)
|
||||
include_directories(${Python_INCLUDE_DIRS})
|
||||
add_definitions(${Python_DEFINITIONS})
|
||||
target_link_libraries(python ${Python_LIBRARIES} weechat_plugins_scripts coverage_config)
|
||||
endif()
|
||||
|
||||
install(TARGETS python LIBRARY DESTINATION "${WEECHAT_LIBDIR}/plugins")
|
||||
|
||||
@@ -59,15 +59,11 @@
|
||||
|
||||
#define MSG_ADD_HDATA_TIME_USEC(__json_name, \
|
||||
__var_name, __var_name_usec) \
|
||||
time_value = weechat_hdata_time (hdata, pointer, __var_name); \
|
||||
local_time = localtime (&time_value); \
|
||||
time_value -= local_time->tm_gmtoff; \
|
||||
local_time = localtime (&time_value); \
|
||||
tv.tv_sec = mktime (local_time); \
|
||||
tv.tv_sec = weechat_hdata_time (hdata, pointer, __var_name); \
|
||||
tv.tv_usec = weechat_hdata_integer (hdata, pointer, \
|
||||
__var_name_usec); \
|
||||
weechat_util_strftimeval (str_time, sizeof (str_time), \
|
||||
"%FT%T.%fZ", &tv); \
|
||||
"%@%FT%T.%fZ", &tv); \
|
||||
MSG_ADD_STR_BUF(__json_name, str_time);
|
||||
|
||||
#define MSG_ADD_HDATA_STR(__json_name, __var_name) \
|
||||
@@ -489,9 +485,7 @@ relay_api_msg_line_data_to_json (struct t_gui_line_data *line_data,
|
||||
const char *ptr_string;
|
||||
char *string, str_time[256], str_var[64];
|
||||
int i, tags_count;
|
||||
time_t time_value;
|
||||
struct timeval tv;
|
||||
struct tm *local_time;
|
||||
|
||||
hdata = relay_hdata_line_data;
|
||||
pointer = line_data;
|
||||
@@ -794,9 +788,7 @@ relay_api_msg_hotlist_to_json (struct t_gui_hotlist *hotlist)
|
||||
struct t_gui_hotlist *pointer;
|
||||
struct t_gui_buffer *buffer;
|
||||
cJSON *json, *json_count;
|
||||
time_t time_value;
|
||||
struct timeval tv;
|
||||
struct tm *local_time;
|
||||
char str_time[256], str_key[32];
|
||||
int i, array_size;
|
||||
long long buffer_id;
|
||||
|
||||
@@ -25,6 +25,10 @@ if(NOT DEFINED ENV{LIB_FUZZING_ENGINE})
|
||||
set(ENV{LIB_FUZZING_ENGINE} "-fsanitize=address,fuzzer")
|
||||
endif()
|
||||
|
||||
if ("$ENV{LIB_FUZZING_ENGINE}" MATCHES "-fsanitize=.*fuzzer")
|
||||
set(ENV{LIB_FUZZING_ENGINE} "$ENV{LIB_FUZZING_ENGINE};-fsanitize=fuzzer-no-link")
|
||||
endif()
|
||||
|
||||
remove_definitions(-DHAVE_CONFIG_H)
|
||||
include_directories(
|
||||
${PROJECT_BINARY_DIR}
|
||||
@@ -98,6 +102,6 @@ set(FUZZ_CORE_TARGETS calc eval crypto secure string utf8 util)
|
||||
foreach(fuzz_target ${FUZZ_CORE_TARGETS})
|
||||
add_executable(weechat_core_${fuzz_target}_fuzzer core/${fuzz_target}-fuzzer.cc)
|
||||
target_link_libraries(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_LINK} coverage_config)
|
||||
set_target_properties(weechat_core_${fuzz_target}_fuzzer PROPERTIES LINK_FLAGS "$ENV{LIB_FUZZING_ENGINE}")
|
||||
set_target_properties(weechat_core_${fuzz_target}_fuzzer PROPERTIES LINK_OPTIONS "$ENV{LIB_FUZZING_ENGINE}")
|
||||
add_dependencies(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_DEPS})
|
||||
endforeach()
|
||||
|
||||
@@ -35,6 +35,10 @@ extern "C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
|
||||
{
|
||||
char *str;
|
||||
|
||||
/* ignore huge data */
|
||||
if (size > 65536)
|
||||
return 0;
|
||||
|
||||
str = (char *)malloc (size + 1);
|
||||
memcpy (str, data, size);
|
||||
str[size] = '\0';
|
||||
|
||||
@@ -61,6 +61,10 @@ LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
|
||||
char *str, hash[1024], *encrypted, *decrypted;
|
||||
int length_encrypted, length_decrypted;
|
||||
|
||||
/* ignore empty or huge data */
|
||||
if ((size == 0) || (size > 65536))
|
||||
return 0;
|
||||
|
||||
str = (char *)malloc (size + 1);
|
||||
memcpy (str, data, size);
|
||||
str[size] = '\0';
|
||||
@@ -68,23 +72,20 @@ LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
|
||||
if (size >= 8)
|
||||
secure_derive_key (str, str, (unsigned char *)hash, sizeof (hash));
|
||||
|
||||
if (size > 0)
|
||||
{
|
||||
encrypted = NULL;
|
||||
decrypted = NULL;
|
||||
config_file_option_set (secure_config_crypt_salt, "on", 1);
|
||||
secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted);
|
||||
secure_decrypt_data (encrypted, length_encrypted, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &decrypted, &length_decrypted);
|
||||
assert ((size_t)length_decrypted == size);
|
||||
assert (memcmp (decrypted, str, length_decrypted) == 0);
|
||||
free (encrypted);
|
||||
free (decrypted);
|
||||
config_file_option_set (secure_config_crypt_salt, "off", 1);
|
||||
encrypted = NULL;
|
||||
secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted);
|
||||
free (encrypted);
|
||||
config_file_option_reset (secure_config_crypt_salt, 1);
|
||||
}
|
||||
encrypted = NULL;
|
||||
decrypted = NULL;
|
||||
config_file_option_set (secure_config_crypt_salt, "on", 1);
|
||||
secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted);
|
||||
secure_decrypt_data (encrypted, length_encrypted, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &decrypted, &length_decrypted);
|
||||
assert ((size_t)length_decrypted == size);
|
||||
assert (memcmp (decrypted, str, length_decrypted) == 0);
|
||||
free (encrypted);
|
||||
free (decrypted);
|
||||
config_file_option_set (secure_config_crypt_salt, "off", 1);
|
||||
encrypted = NULL;
|
||||
secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted);
|
||||
free (encrypted);
|
||||
config_file_option_reset (secure_config_crypt_salt, 1);
|
||||
|
||||
free (str);
|
||||
|
||||
|
||||
@@ -344,6 +344,7 @@ TEST(CoreCalc, Expression)
|
||||
WEE_CHECK_CALC("0.0000000008", "1/1234567890");
|
||||
WEE_CHECK_CALC("0.0000000001", "1/12345678901");
|
||||
WEE_CHECK_CALC("0", "1/123456789012");
|
||||
WEE_CHECK_CALC("1.2222222222", "1+0.22222222222222222222222222222222222");
|
||||
|
||||
/* expressions with parentheses */
|
||||
WEE_CHECK_CALC("6", "((6))");
|
||||
|
||||
@@ -187,6 +187,11 @@ TEST(CoreUtil, Strftimeval)
|
||||
"%H:%M:%S", &tv));
|
||||
STRCMP_EQUAL("10:29:09", str_time);
|
||||
|
||||
strcpy (str_time, "test");
|
||||
LONGS_EQUAL(8, util_strftimeval (str_time, sizeof (str_time),
|
||||
"%@%H:%M:%S", &tv));
|
||||
STRCMP_EQUAL("10:29:09", str_time);
|
||||
|
||||
strcpy (str_time, "test");
|
||||
LONGS_EQUAL(19, util_strftimeval (str_time, sizeof (str_time),
|
||||
"%Y-%m-%d %H:%M:%S", &tv));
|
||||
|
||||
@@ -419,12 +419,12 @@ TEST(RelayApiMsg, LinesToJson)
|
||||
gmtime_r (&(gui_buffers->own_lines->last_line->prev_line->data->date), &gm_time);
|
||||
tv.tv_sec = mktime (&gm_time);
|
||||
tv.tv_usec = gui_buffers->own_lines->last_line->prev_line->data->date_usec;
|
||||
util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
|
||||
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv);
|
||||
WEE_CHECK_OBJ_STR(str_date, json_line, "date");
|
||||
gmtime_r (&(gui_buffers->own_lines->last_line->prev_line->data->date_printed), &gm_time);
|
||||
tv.tv_sec = mktime (&gm_time);
|
||||
tv.tv_usec = gui_buffers->own_lines->last_line->prev_line->data->date_usec_printed;
|
||||
util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
|
||||
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv);
|
||||
WEE_CHECK_OBJ_STR(str_date, json_line, "date_printed");
|
||||
WEE_CHECK_OBJ_BOOL(0, json_line, "highlight");
|
||||
WEE_CHECK_OBJ_STR("nick1", json_line, "prefix");
|
||||
@@ -455,12 +455,12 @@ TEST(RelayApiMsg, LinesToJson)
|
||||
gmtime_r (&(gui_buffers->own_lines->last_line->data->date), &gm_time);
|
||||
tv.tv_sec = mktime (&gm_time);
|
||||
tv.tv_usec = gui_buffers->own_lines->last_line->data->date_usec;
|
||||
util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
|
||||
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv);
|
||||
WEE_CHECK_OBJ_STR(str_date, json_line, "date");
|
||||
gmtime_r (&(gui_buffers->own_lines->last_line->data->date_printed), &gm_time);
|
||||
tv.tv_sec = mktime (&gm_time);
|
||||
tv.tv_usec = gui_buffers->own_lines->last_line->data->date_usec_printed;
|
||||
util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
|
||||
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv);
|
||||
WEE_CHECK_OBJ_STR(str_date, json_line, "date_printed");
|
||||
WEE_CHECK_OBJ_BOOL(0, json_line, "highlight");
|
||||
WEE_CHECK_OBJ_STR("", json_line, "prefix");
|
||||
@@ -626,7 +626,7 @@ TEST(RelayApiMsg, HotlistToJson)
|
||||
gmtime_r (&time_value, &gm_time);
|
||||
tv.tv_sec = mktime (&gm_time);
|
||||
tv.tv_usec = hdata_integer (relay_hdata_hotlist, gui_hotlist, "time_usec");
|
||||
util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
|
||||
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv);
|
||||
WEE_CHECK_OBJ_STR(str_date, json, "date");
|
||||
WEE_CHECK_OBJ_NUM(gui_buffers->id, json, "buffer_id");
|
||||
json_count = cJSON_GetObjectItem (json, "count");
|
||||
|
||||
Reference in New Issue
Block a user