summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.adoc1
-rw-r--r--doc/en/weechat_plugin_api.en.adoc50
-rw-r--r--doc/fr/weechat_plugin_api.fr.adoc52
-rw-r--r--doc/it/weechat_plugin_api.it.adoc54
-rw-r--r--doc/ja/weechat_plugin_api.ja.adoc52
-rw-r--r--doc/sr/weechat_plugin_api.sr.adoc49
-rw-r--r--src/core/wee-eval.c5
-rw-r--r--src/core/wee-hdata.c61
-rw-r--r--src/core/wee-hdata.h2
-rw-r--r--src/plugins/buflist/buflist-mouse.c8
-rw-r--r--src/plugins/guile/weechat-guile-api.c21
-rw-r--r--src/plugins/javascript/weechat-js-api.cpp19
-rw-r--r--src/plugins/lua/weechat-lua-api.c21
-rw-r--r--src/plugins/perl/weechat-perl-api.c22
-rw-r--r--src/plugins/php/weechat-php-api.c22
-rw-r--r--src/plugins/php/weechat-php-api.h1
-rw-r--r--src/plugins/php/weechat-php.c1
-rw-r--r--src/plugins/php/weechat-php.stub.php1
-rw-r--r--src/plugins/php/weechat-php_arginfo.h4
-rw-r--r--src/plugins/php/weechat-php_legacy_arginfo.h4
-rw-r--r--src/plugins/plugin.c1
-rw-r--r--src/plugins/python/weechat-python-api.c22
-rw-r--r--src/plugins/python/weechat.pyi10
-rw-r--r--src/plugins/relay/weechat/relay-weechat-msg.c25
-rw-r--r--src/plugins/relay/weechat/relay-weechat-msg.h2
-rw-r--r--src/plugins/ruby/weechat-ruby-api.c27
-rw-r--r--src/plugins/tcl/weechat-tcl-api.c21
-rw-r--r--src/plugins/weechat-plugin.h30
-rw-r--r--tests/unit/core/test-core-hdata.cpp172
29 files changed, 730 insertions, 30 deletions
diff --git a/ChangeLog.adoc b/ChangeLog.adoc
index 3961a6644..cc2181036 100644
--- a/ChangeLog.adoc
+++ b/ChangeLog.adoc
@@ -24,6 +24,7 @@ New features::
* api: add modifier "color_decode" to decode WeeChat colors with a replacement string
* api: use whole replacement string instead of first char in function string_remove_color
* api: add functions config_option_get_{string|pointer} and config_{boolean|integer|string|color|enum}_inherited in scripting API
+ * api: add function "hdata_longlong" (issue #2081)
* api: add info "plugin_loaded"
* api: add support of specifier `%!` for timestamp in function util_strftimeval
* api: add support of base64url in encode/decode functions
diff --git a/doc/en/weechat_plugin_api.en.adoc b/doc/en/weechat_plugin_api.en.adoc
index 5f47df843..4ef7eb658 100644
--- a/doc/en/weechat_plugin_api.en.adoc
+++ b/doc/en/weechat_plugin_api.en.adoc
@@ -18095,7 +18095,7 @@ This function is not available in scripting API.
==== hdata_new_var
-_WeeChat ≥ 0.3.6, updated in 0.3.7, 0.3.9, 0.4.3, 3.4._
+_WeeChat ≥ 0.3.6, updated in 0.3.7, 0.3.9, 0.4.3, 3.4, 4.3.0._
Create a new variable in hdata.
@@ -18116,6 +18116,7 @@ Arguments:
** _WEECHAT_HDATA_CHAR_
** _WEECHAT_HDATA_INTEGER_
** _WEECHAT_HDATA_LONG_
+** _WEECHAT_HDATA_LONGLONG_ (_WeeChat ≥ 4.3.0_)
** _WEECHAT_HDATA_STRING_
** _WEECHAT_HDATA_SHARED_STRING_ (_WeeChat ≥ 0.4.3_)
** _WEECHAT_HDATA_POINTER_
@@ -18396,6 +18397,9 @@ switch (type)
case WEECHAT_HDATA_LONG:
/* ... */
break;
+ case WEECHAT_HDATA_LONGLONG:
+ /* ... */
+ break;
case WEECHAT_HDATA_STRING:
/* ... */
break;
@@ -18997,7 +19001,7 @@ weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))
_WeeChat ≥ 0.3.6._
-Return value of long variable in structure using hdata.
+Return value of "long" variable in structure using hdata.
Prototype:
@@ -19035,6 +19039,48 @@ def hdata_long(hdata: str, pointer: str, name: str) -> int: ...
weechat.prnt("", "longvar = %d" % weechat.hdata_long(hdata, pointer, "longvar"))
----
+==== hdata_longlong
+
+_WeeChat ≥ 4.3.0._
+
+Return value of "long long" variable in structure using hdata.
+
+Prototype:
+
+[source,c]
+----
+long long weechat_hdata_longlong (struct t_hdata *hdata, void *pointer, const char *name);
+----
+
+Arguments:
+
+* _hdata_: hdata pointer
+* _pointer_: pointer to WeeChat/plugin object
+* _name_: variable name (must be type "long long"); for arrays, the name can be
+ "N|name" where N is the index in array (starting at 0), for example: "2|name"
+
+Return value:
+
+* long long value of variable
+
+C example:
+
+[source,c]
+----
+weechat_printf (NULL, "longlongvar = %lld", weechat_hdata_longlong (hdata, pointer, "longlongvar"));
+----
+
+Script (Python):
+
+[source,python]
+----
+# prototype
+def hdata_longlong(hdata: str, pointer: str, name: str) -> int: ...
+
+# example
+weechat.prnt("", "longlongvar = %d" % weechat.hdata_longlong(hdata, pointer, "longlongvar"))
+----
+
==== hdata_string
_WeeChat ≥ 0.3.6._
diff --git a/doc/fr/weechat_plugin_api.fr.adoc b/doc/fr/weechat_plugin_api.fr.adoc
index ebfd68376..f8afcae20 100644
--- a/doc/fr/weechat_plugin_api.fr.adoc
+++ b/doc/fr/weechat_plugin_api.fr.adoc
@@ -18476,7 +18476,7 @@ Cette fonction n'est pas disponible dans l'API script.
==== hdata_new_var
-_WeeChat ≥ 0.3.6, mis à jour dans la 0.3.7, 0.3.9, 0.4.3, 3.4._
+_WeeChat ≥ 0.3.6, mis à jour dans la 0.3.7, 0.3.9, 0.4.3, 3.4, 4.3.0._
Créer une nouvelle variable dans le hdata.
@@ -18497,6 +18497,7 @@ Paramètres :
** _WEECHAT_HDATA_CHAR_
** _WEECHAT_HDATA_INTEGER_
** _WEECHAT_HDATA_LONG_
+** _WEECHAT_HDATA_LONGLONG_ (_WeeChat ≥ 4.3.0_)
** _WEECHAT_HDATA_STRING_
** _WEECHAT_HDATA_SHARED_STRING_ (_WeeChat ≥ 0.4.3_)
** _WEECHAT_HDATA_POINTER_
@@ -18781,6 +18782,9 @@ switch (type)
case WEECHAT_HDATA_LONG:
/* ... */
break;
+ case WEECHAT_HDATA_LONGLONG:
+ /* ... */
+ break;
case WEECHAT_HDATA_STRING:
/* ... */
break;
@@ -19392,7 +19396,7 @@ weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))
_WeeChat ≥ 0.3.6._
Retourner la valeur de la variable dans la structure en utilisant le hdata, sous
-forme d'entier long.
+forme d'entier "long".
Prototype :
@@ -19431,6 +19435,50 @@ def hdata_long(hdata: str, pointer: str, name: str) -> int: ...
weechat.prnt("", "longvar = %d" % weechat.hdata_long(hdata, pointer, "longvar"))
----
+==== hdata_longlong
+
+_WeeChat ≥ 4.3.0._
+
+Retourner la valeur de la variable dans la structure en utilisant le hdata, sous
+forme d'entier "long long".
+
+Prototype :
+
+[source,c]
+----
+long long weechat_hdata_longlong (struct t_hdata *hdata, void *pointer, const char *name);
+----
+
+Paramètres :
+
+* _hdata_ : pointeur vers le hdata
+* _pointer_ : pointeur vers un objet WeeChat ou d'une extension
+* _name_ : nom de la variable (doit être de type "long long"); pour les tableaux,
+ le nom peut être "N|name" où N est un index dans le tableau (démarrant à 0),
+ par exemple : "2|name"
+
+Valeur de retour :
+
+* valeur de la variable, sous forme d'entier "long long".
+
+Exemple en C :
+
+[source,c]
+----
+weechat_printf (NULL, "longlongvar = %llu", weechat_hdata_longlong (hdata, pointer, "longlongvar"));
+----
+
+Script (Python) :
+
+[source,python]
+----
+# prototype
+def hdata_longlong(hdata: str, pointer: str, name: str) -> int: ...
+
+# exemple
+weechat.prnt("", "longlongvar = %d" % weechat.hdata_longlong(hdata, pointer, "longlongvar"))
+----
+
==== hdata_string
_WeeChat ≥ 0.3.6._
diff --git a/doc/it/weechat_plugin_api.it.adoc b/doc/it/weechat_plugin_api.it.adoc
index f18010656..ac20083bc 100644
--- a/doc/it/weechat_plugin_api.it.adoc
+++ b/doc/it/weechat_plugin_api.it.adoc
@@ -18923,7 +18923,7 @@ Questa funzione non è disponibile nelle API per lo scripting.
==== hdata_new_var
// TRANSLATION MISSING
-_WeeChat ≥ 0.3.6, updated in 0.3.7, 0.3.9, 0.4.3, 3.4_
+_WeeChat ≥ 0.3.6, updated in 0.3.7, 0.3.9, 0.4.3, 3.4, 4.3.0_
Crea una nuova variabile in hdata.
@@ -18944,6 +18944,7 @@ Argomenti:
** _WEECHAT_HDATA_CHAR_
** _WEECHAT_HDATA_INTEGER_
** _WEECHAT_HDATA_LONG_
+** _WEECHAT_HDATA_LONGLONG_ (_WeeChat ≥ 4.3.0_)
** _WEECHAT_HDATA_STRING_
** _WEECHAT_HDATA_SHARED_STRING_ (_WeeChat ≥ 0.4.3_)
** _WEECHAT_HDATA_POINTER_
@@ -19233,6 +19234,9 @@ switch (type)
case WEECHAT_HDATA_LONG:
/* ... */
break;
+ case WEECHAT_HDATA_LONGLONG:
+ /* ... */
+ break;
case WEECHAT_HDATA_STRING:
/* ... */
break;
@@ -19856,7 +19860,7 @@ weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))
_WeeChat ≥ 0.3.6._
-Restituisce il valore della variabile long della struttura usando hdata.
+Restituisce il valore della variabile "long" della struttura usando hdata.
Prototipo:
@@ -19896,6 +19900,52 @@ def hdata_long(hdata: str, pointer: str, name: str) -> int: ...
weechat.prnt("", "longvar = %d" % weechat.hdata_long(hdata, pointer, "longvar"))
----
+==== hdata_longlong
+
+_WeeChat ≥ 4.3.0._
+
+// TRANSLATION MISSING
+Return value of "long long" variable in structure using hdata.
+
+Prototipo:
+
+[source,c]
+----
+long long weechat_hdata_longlong (struct t_hdata *hdata, void *pointer, const char *name);
+----
+
+Argomenti:
+
+* _hdata_: puntatore hdata
+* _pointer_: puntatore all'oggetto di WeeChat/plugin
+// TRANSLATION MISSING
+* _name_: nome della variabile (deve essere di tipo "long long"); for arrays,
+ the name can be "N|name" where N is the index in array (starting at 0),
+ for example: "2|name"
+
+Valore restituito:
+
+// TRANSLATION MISSING
+* "long long" value of variable
+
+Esempio in C:
+
+[source,c]
+----
+weechat_printf (NULL, "longlongvar = %lld", weechat_hdata_longlong (hdata, pointer, "longlongvar"));
+----
+
+Script (Python):
+
+[source,python]
+----
+# prototipo
+def hdata_longlong(hdata: str, pointer: str, name: str) -> int: ...
+
+# esempio
+weechat.prnt("", "longlongvar = %d" % weechat.hdata_longlong(hdata, pointer, "longlongvar"))
+----
+
==== hdata_string
_WeeChat ≥ 0.3.6._
diff --git a/doc/ja/weechat_plugin_api.ja.adoc b/doc/ja/weechat_plugin_api.ja.adoc
index 1b7189d77..3822fbb67 100644
--- a/doc/ja/weechat_plugin_api.ja.adoc
+++ b/doc/ja/weechat_plugin_api.ja.adoc
@@ -18338,7 +18338,7 @@ struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next", 0, 0
==== hdata_new_var
// TRANSLATION MISSING
-_WeeChat ≥ 0.3.6, updated in 0.3.7, 0.3.9, 0.4.3, 3.4._
+_WeeChat ≥ 0.3.6, updated in 0.3.7, 0.3.9, 0.4.3, 3.4, 4.3.0._
hdata に新しい変数を作成。
@@ -18359,6 +18359,7 @@ void weechat_hdata_new_var (struct t_hdata *hdata, const char *name, int offset,
** _WEECHAT_HDATA_CHAR_
** _WEECHAT_HDATA_INTEGER_
** _WEECHAT_HDATA_LONG_
+** _WEECHAT_HDATA_LONGLONG_ (_WeeChat ≥ 4.3.0_)
** _WEECHAT_HDATA_STRING_
** _WEECHAT_HDATA_SHARED_STRING_ (_WeeChat ≥ 0.4.3_)
** _WEECHAT_HDATA_POINTER_
@@ -18642,6 +18643,9 @@ switch (type)
case WEECHAT_HDATA_LONG:
/* ... */
break;
+ case WEECHAT_HDATA_LONGLONG:
+ /* ... */
+ break;
case WEECHAT_HDATA_STRING:
/* ... */
break;
@@ -19243,7 +19247,7 @@ weechat.prnt("", "number = %d" % weechat.hdata_integer(hdata, buffer, "number"))
_WeeChat バージョン 0.3.6 以上で利用可。_
-hdata を使って構造体に含まれる long 型変数の値を返す。
+hdata を使って構造体に含まれる "long" 型変数の値を返す。
プロトタイプ:
@@ -19281,6 +19285,50 @@ def hdata_long(hdata: str, pointer: str, name: str) -> int: ...
weechat.prnt("", "longvar = %d" % weechat.hdata_long(hdata, pointer, "longvar"))
----
+==== hdata_longlong
+
+_WeeChat バージョン 4.3.0 以上で利用可。_
+
+// TRANSLATION MISSING
+Return value of "long long" variable in structure using hdata.
+
+プロトタイプ:
+
+[source,c]
+----
+long long weechat_hdata_longlong (struct t_hdata *hdata, void *pointer, const char *name);
+----
+
+引数:
+
+* _hdata_: hdata へのポインタ
+* _pointer_: WeeChat および plugin オブジェクトへのポインタ
+* _name_: 変数名 (必ず「long long 型」であること); 配列の場合、"N|name"
+ のように名前を指定することが可能。ここで N は配列のインデックス (1 番目は 0)、例: "2|name"
+
+戻り値:
+
+// TRANSLATION MISSING
+* "long long" value of variable
+
+C 言語での使用例:
+
+[source,c]
+----
+weechat_printf (NULL, "longlongvar = %lld", weechat_hdata_longlong (hdata, pointer, "longlongvar"));
+----
+
+スクリプト (Python) での使用例:
+
+[source,python]
+----
+# プロトタイプ
+def hdata_longlong(hdata: str, pointer: str, name: str) -> int: ...
+
+# 例
+weechat.prnt("", "longlongvar = %d" % weechat.hdata_longlong(hdata, pointer, "longlongvar"))
+----
+
==== hdata_string
_WeeChat バージョン 0.3.6 以上で利用可。_
diff --git a/doc/sr/weechat_plugin_api.sr.adoc b/doc/sr/weechat_plugin_api.sr.adoc
index 4fef6bb08..eae7b8cc4 100644
--- a/doc/sr/weechat_plugin_api.sr.adoc
+++ b/doc/sr/weechat_plugin_api.sr.adoc
@@ -17607,7 +17607,7 @@ struct t_hdata *hdata = weechat_hdata_new ("myplugin_list", "prev", "next", 0, 0
==== hdata_new_var
-_WeeChat ≥ 0.3.6, ажурирано у верзијама 0.3.7, 0.3.9, 0.4.3 и 3.4._
+_WeeChat ≥ 0.3.6, ажурирано у верзијама 0.3.7, 0.3.9, 0.4.3, 3.4 и 4.3.0._
Креира нову променљиву у hdata.
@@ -17628,6 +17628,7 @@ void weechat_hdata_new_var (struct t_hdata *hdata, const char *name, int offset,
** _WEECHAT_HDATA_CHAR_
** _WEECHAT_HDATA_INTEGER_
** _WEECHAT_HDATA_LONG_
+** _WEECHAT_HDATA_LONGLONG_ (_WeeChat ≥ 4.3.0_)
** _WEECHAT_HDATA_STRING_
** _WEECHAT_HDATA_SHARED_STRING_ (_WeeChat ≥ 0.4.3_)
** _WEECHAT_HDATA_POINTER_
@@ -17902,6 +17903,9 @@ switch (type)
case WEECHAT_HDATA_LONG:
/* ... */
break;
+ case WEECHAT_HDATA_LONGLONG:
+ /* ... */
+ break;
case WEECHAT_HDATA_STRING:
/* ... */
break;
@@ -18524,6 +18528,49 @@ def hdata_long(hdata: str, pointer: str, name: str) -> int: ...
weechat.prnt("", "longvar = %d" % weechat.hdata_long(hdata, pointer, "longvar"))
----
+==== hdata_longlong
+
+_WeeChat ≥ 4.3.0._
+
+// TRANSLATION MISSING
+Return value of "long long" variable in structure using hdata.
+
+Прототип:
+
+[source,c]
+----
+long long weechat_hdata_longlong (struct t_hdata *hdata, void *pointer, const char *name);
+----
+
+Аргументи:
+
+* _hdata_: показивач на hdata
+* _pointer_: показивач на објекат програма WeeChat/додатка
+* _name_: име променљиве (мора бити типа „long long”); у случају низова, име може да буде „N|име” где је N индекс низа (који почиње од 0), на пример: „2|име”
+
+Повратна вредност:
+
+// TRANSLATION MISSING
+* "long long" value of variable
+
+C пример:
+
+[source,c]
+----
+weechat_printf (NULL, "longlongvar = %lld", weechat_hdata_longlong (hdata, pointer, "longlongvar"));
+----
+
+Скрипта (Python):
+
+[source,python]
+----
+# прототип
+def hdata_longlong(hdata: str, pointer: str, name: str) -> int: ...
+
+# пример
+weechat.prnt("", "longlongvar = %d" % weechat.hdata_longlong(hdata, pointer, "longlongvar"))
+----
+
==== hdata_string
_WeeChat ≥ 0.3.6._
diff --git a/src/core/wee-eval.c b/src/core/wee-eval.c
index 7909f05d0..fef8a8949 100644
--- a/src/core/wee-eval.c
+++ b/src/core/wee-eval.c
@@ -1230,6 +1230,11 @@ eval_hdata_get_value (struct t_hdata *hdata, void *pointer, const char *path,
"%ld", hdata_long (hdata, pointer, var_name));
value = strdup (str_value);
break;
+ case WEECHAT_HDATA_LONGLONG:
+ snprintf (str_value, sizeof (str_value),
+ "%lld", hdata_longlong (hdata, pointer, var_name));
+ value = strdup (str_value);
+ break;
case WEECHAT_HDATA_STRING:
case WEECHAT_HDATA_SHARED_STRING:
ptr_value = hdata_string (hdata, pointer, var_name);
diff --git a/src/core/wee-hdata.c b/src/core/wee-hdata.c
index 933d92d64..0a3dc6a30 100644
--- a/src/core/wee-hdata.c
+++ b/src/core/wee-hdata.c
@@ -38,8 +38,8 @@
struct t_hashtable *weechat_hdata = NULL;
-char *hdata_type_string[9] =
-{ "other", "char", "integer", "long", "string", "pointer", "time",
+char *hdata_type_string[WEECHAT_NUM_HDATA_TYPES] =
+{ "other", "char", "integer", "long", "longlong", "string", "pointer", "time",
"hashtable", "shared_string" };
@@ -331,6 +331,8 @@ hdata_get_var_array_size (struct t_hdata *hdata, void *pointer,
return *((int *)(pointer + offset));
case WEECHAT_HDATA_LONG:
return (int)(*((long *)(pointer + offset)));
+ case WEECHAT_HDATA_LONGLONG:
+ return (int)(*((long long *)(pointer + offset)));
default:
break;
}
@@ -799,7 +801,41 @@ hdata_long (struct t_hdata *hdata, void *pointer, const char *name)
}
}
- return 0;
+ return 0L;
+}
+
+/*
+ * Gets "long long" value of a variable in hdata.
+ */
+
+long long
+hdata_longlong (struct t_hdata *hdata, void *pointer, const char *name)
+{
+ int index;
+ const char *ptr_name;
+ struct t_hdata_var *var;
+
+ if (!hdata || !pointer || !name)
+ return 0;
+
+ hdata_get_index_and_name (name, &index, &ptr_name);
+ var = hashtable_get (hdata->hash_var, ptr_name);
+ if (var && (var->offset >= 0))
+ {
+ if (var->array_size && (index >= 0))
+ {
+ if (var->array_pointer)
+ return (*((long long **)(pointer + var->offset)))[index];
+ else
+ return ((long long *)(pointer + var->offset))[index];
+ }
+ else
+ {
+ return *((long long *)(pointer + var->offset));
+ }
+ }
+
+ return 0LL;
}
/*
@@ -904,7 +940,7 @@ hdata_time (struct t_hdata *hdata, void *pointer, const char *name)
}
}
- return 0;
+ return (time_t)0;
}
/*
@@ -958,6 +994,7 @@ hdata_compare (struct t_hdata *hdata, void *pointer1, void *pointer2,
{
int rc, type, type1, type2, int_value1, int_value2;
long long_value1, long_value2;
+ long long longlong_value1, longlong_value2;
char *var_name, *property, char_value1, char_value2;
const char *ptr_var_name, *pos, *pos_open_paren, *hdata_name;
const char *str_value1, *str_value2;
@@ -1013,6 +1050,12 @@ hdata_compare (struct t_hdata *hdata, void *pointer1, void *pointer2,
rc = (long_value1 < long_value2) ?
-1 : ((long_value1 > long_value2) ? 1 : 0);
break;
+ case WEECHAT_HDATA_LONGLONG:
+ longlong_value1 = hdata_longlong (hdata, pointer1, var_name);
+ longlong_value2 = hdata_longlong (hdata, pointer2, var_name);
+ rc = (longlong_value1 < longlong_value2) ?
+ -1 : ((longlong_value1 > longlong_value2) ? 1 : 0);
+ break;
case WEECHAT_HDATA_STRING:
case WEECHAT_HDATA_SHARED_STRING:
str_value1 = hdata_string (hdata, pointer1, var_name);
@@ -1181,6 +1224,7 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
struct t_hdata_var *var;
char **ptr_string, *error;
long number;
+ long long number_longlong;
unsigned long ptr;
int rc;
@@ -1220,6 +1264,15 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
return 1;
}
break;
+ case WEECHAT_HDATA_LONGLONG:
+ error = NULL;
+ number_longlong = strtoll (value, &error, 10);
+ if (error && !error[0])
+ {
+ *((long long *)(pointer + var->offset)) = number_longlong;
+ return 1;
+ }
+ break;
case WEECHAT_HDATA_STRING:
ptr_string = (char **)(pointer + var->offset);
if (*ptr_string)
diff --git a/src/core/wee-hdata.h b/src/core/wee-hdata.h
index d70d24b9f..078c06f47 100644
--- a/src/core/wee-hdata.h
+++ b/src/core/wee-hdata.h
@@ -122,6 +122,8 @@ extern int hdata_integer (struct t_hdata *hdata, void *pointer,
const char *name);
extern long hdata_long (struct t_hdata *hdata, void *pointer,
const char *name);
+extern long long hdata_longlong (struct t_hdata *hdata, void *pointer,
+ const char *name);
extern const char *hdata_string (struct t_hdata *hdata, void *pointer,
const char *name);
extern void *hdata_pointer (struct t_hdata *hdata, void *pointer,
diff --git a/src/plugins/buflist/buflist-mouse.c b/src/plugins/buflist/buflist-mouse.c
index 8ed15eb6b..5f349d29d 100644
--- a/src/plugins/buflist/buflist-mouse.c
+++ b/src/plugins/buflist/buflist-mouse.c
@@ -125,6 +125,14 @@ end:
ptr_buffer, list_keys[i]) : -1);
weechat_hashtable_set (info, list_keys[i], str_value);
break;
+ case WEECHAT_HDATA_LONGLONG:
+ snprintf (str_value, sizeof (str_value),
+ "%lld",
+ (ptr_buffer) ?
+ weechat_hdata_longlong (buflist_hdata_buffer,
+ ptr_buffer, list_keys[i]) : 0);
+ weechat_hashtable_set (info, list_keys[i], str_value);
+ break;
case WEECHAT_HDATA_STRING:
case WEECHAT_HDATA_SHARED_STRING:
ptr_value = weechat_hdata_string (buflist_hdata_buffer,
diff --git a/src/plugins/guile/weechat-guile-api.c b/src/plugins/guile/weechat-guile-api.c
index dc012ca9c..535b0707f 100644
--- a/src/plugins/guile/weechat-guile-api.c
+++ b/src/plugins/guile/weechat-guile-api.c
@@ -93,6 +93,9 @@
#define API_RETURN_LONG(__long) \
API_FREE_STRINGS; \
return scm_from_long (__long)
+#define API_RETURN_LONGLONG(__long) \
+ API_FREE_STRINGS; \
+ return scm_from_long_long (__long)
#define API_RETURN_OTHER(__scm) \
API_FREE_STRINGS; \
return __scm
@@ -5149,6 +5152,23 @@ weechat_guile_api_hdata_long (SCM hdata, SCM pointer, SCM name)
}
SCM
+weechat_guile_api_hdata_longlong (SCM hdata, SCM pointer, SCM name)
+{
+ long long value;
+
+ API_INIT_FUNC(1, "hdata_longlong", API_RETURN_LONGLONG(0));
+ if (!scm_is_string (hdata) || !scm_is_string (pointer)
+ || !scm_is_string (name))
+ API_WRONG_ARGS(API_RETURN_LONGLONG(0));
+
+ value = weechat_hdata_longlong (API_STR2PTR(API_SCM_TO_STRING(hdata)),
+ API_STR2PTR(API_SCM_TO_STRING(pointer)),
+ API_SCM_TO_STRING(name));
+
+ API_RETURN_LONGLONG(value);
+}
+
+SCM
weechat_guile_api_hdata_string (SCM hdata, SCM pointer, SCM name)
{
const char *result;
@@ -5631,6 +5651,7 @@ weechat_guile_api_module_init (void *data)
API_DEF_FUNC(hdata_char, 3);
API_DEF_FUNC(hdata_integer, 3);
API_DEF_FUNC(hdata_long, 3);
+ API_DEF_FUNC(hdata_longlong, 3);
API_DEF_FUNC(hdata_string, 3);
API_DEF_FUNC(hdata_pointer, 3);
API_DEF_FUNC(hdata_time, 3);
diff --git a/src/plugins/javascript/weechat-js-api.cpp b/src/plugins/javascript/weechat-js-api.cpp
index d477c40e0..c17fe046a 100644
--- a/src/plugins/javascript/weechat-js-api.cpp
+++ b/src/plugins/javascript/weechat-js-api.cpp
@@ -5066,6 +5066,24 @@ API_FUNC(hdata_long)
API_RETURN_LONG(value);
}
+API_FUNC(hdata_longlong)
+{
+ long long value;
+
+ API_INIT_FUNC(1, "hdata_longlong", "sss", API_RETURN_LONG(0));
+
+ v8::String::Utf8Value hdata(args[0]);
+ v8::String::Utf8Value pointer(args[1]);
+ v8::String::Utf8Value name(args[2]);
+
+ value = weechat_hdata_longlong (
+ (struct t_hdata *)API_STR2PTR(*hdata),
+ API_STR2PTR(*pointer),
+ *name);
+
+ API_RETURN_LONG(value);
+}
+
API_FUNC(hdata_string)
{
const char *result;
@@ -5543,6 +5561,7 @@ WeechatJsV8::loadLibs()
API_DEF_FUNC(hdata_char);
API_DEF_FUNC(hdata_integer);
API_DEF_FUNC(hdata_long);
+ API_DEF_FUNC(hdata_longlong);
API_DEF_FUNC(hdata_string);
API_DEF_FUNC(hdata_pointer);
API_DEF_FUNC(hdata_time);
diff --git a/src/plugins/lua/weechat-lua-api.c b/src/plugins/lua/weechat-lua-api.c
index fcc0f09a3..c13fdb38e 100644
--- a/src/plugins/lua/weechat-lua-api.c
+++ b/src/plugins/lua/weechat-lua-api.c
@@ -5475,6 +5475,26 @@ API_FUNC(hdata_long)
API_RETURN_LONG(value);
}
+API_FUNC(hdata_longlong)
+{
+ const char *hdata, *pointer, *name;
+ long long value;
+
+ API_INIT_FUNC(1, "hdata_longlong", API_RETURN_LONG(0));
+ if (lua_gettop (L) < 3)
+ API_WRONG_ARGS(API_RETURN_LONG(0));
+
+ hdata = lua_tostring (L, -3);
+ pointer = lua_tostring (L, -2);
+ name = lua_tostring (L, -1);
+
+ value = weechat_hdata_longlong (API_STR2PTR(hdata),
+ API_STR2PTR(pointer),
+ name);
+
+ API_RETURN_LONG(value);
+}
+
API_FUNC(hdata_string)
{
const char *hdata, *pointer, *name, *result;
@@ -5951,6 +5971,7 @@ const struct luaL_Reg weechat_lua_api_funcs[] = {
API_DEF_FUNC(hdata_char),
API_DEF_FUNC(hdata_integer),
API_DEF_FUNC(hdata_long),
+ API_DEF_FUNC(hdata_longlong),
API_DEF_FUNC(hdata_string),
API_DEF_FUNC(hdata_pointer),
API_DEF_FUNC(hdata_time),
diff --git a/src/plugins/perl/weechat-perl-api.c b/src/plugins/perl/weechat-perl-api.c
index 89280fb8e..7c0c386bb 100644
--- a/src/plugins/perl/weechat-perl-api.c
+++ b/src/plugins/perl/weechat-perl-api.c
@@ -5392,6 +5392,27 @@ API_FUNC(hdata_long)
API_RETURN_LONG(value);
}
+API_FUNC(hdata_longlong)
+{
+ char *hdata, *pointer, *name;
+ long long value;
+ dXSARGS;
+
+ API_INIT_FUNC(1, "hdata_longlong", API_RETURN_LONG(0));
+ if (items < 3)
+ API_WRONG_ARGS(API_RETURN_LONG(0));
+
+ hdata = SvPV_nolen (ST (0));
+ pointer = SvPV_nolen (ST (1));
+ name = SvPV_nolen (ST (2));
+
+ value = weechat_hdata_longlong (API_STR2PTR(hdata),
+ API_STR2PTR(pointer),
+ name);
+
+ API_RETURN_LONG(value);
+}
+
API_FUNC(hdata_string)
{
char *hdata, *pointer, *name;
@@ -5888,6 +5909,7 @@ weechat_perl_api_init (pTHX)
API_DEF_FUNC(hdata_char);
API_DEF_FUNC(hdata_integer);
API_DEF_FUNC(hdata_long);
+ API_DEF_FUNC(hdata_longlong);
API_DEF_FUNC(hdata_string);
API_DEF_FUNC(hdata_pointer);
API_DEF_FUNC(hdata_time);
diff --git a/src/plugins/php/weechat-php-api.c b/src/plugins/php/weechat-php-api.c
index 43ec87cab..3624ba7ea 100644
--- a/src/plugins/php/weechat-php-api.c
+++ b/src/plugins/php/weechat-php-api.c
@@ -5544,6 +5544,28 @@ API_FUNC(hdata_long)
API_RETURN_LONG(result);
}
+API_FUNC(hdata_longlong)
+{
+ zend_string *z_hdata, *z_pointer, *z_name;
+ struct t_hdata *hdata;
+ void *pointer;
+ char *name;
+ long long result;
+
+ API_INIT_FUNC(1, "hdata_longlong", API_RETURN_LONG(0));
+ if (zend_parse_parameters (ZEND_NUM_ARGS(), "SSS", &z_hdata, &z_pointer,
+ &z_name) == FAILURE)
+ API_WRONG_ARGS(API_RETURN_LONG(0));
+
+ hdata = (struct t_hdata *)API_STR2PTR(ZSTR_VAL(z_hdata));
+ pointer = (void *)API_STR2PTR(ZSTR_VAL(z_pointer));
+ name = ZSTR_VAL(z_name);
+
+ result = weechat_hdata_longlong (hdata, pointer, (const char *)name);
+
+ API_RETURN_LONG(result);
+}
+
API_FUNC(hdata_string)
{
zend_string *z_hdata, *z_pointer, *z_name;
diff --git a/src/plugins/php/weechat-php-api.h b/src/plugins/php/weechat-php-api.h
index 240053c4e..40d30d4a6 100644
--- a/src/plugins/php/weechat-php-api.h
+++ b/src/plugins/php/weechat-php-api.h
@@ -252,6 +252,7 @@ PHP_FUNCTION(weechat_hdata_search);
PHP_FUNCTION(weechat_hdata_char);
PHP_FUNCTION(weechat_hdata_integer);
PHP_FUNCTION(weechat_hdata_long);
+PHP_FUNCTION(weechat_hdata_longlong);
PHP_FUNCTION(weechat_hdata_string);
PHP_FUNCTION(weechat_hdata_pointer);
PHP_FUNCTION(weechat_hdata_time);
diff --git a/src/plugins/php/weechat-php.c b/src/plugins/php/weechat-php.c
index 3ef3df50a..4c5dafd82 100644
--- a/src/plugins/php/weechat-php.c
+++ b/src/plugins/php/weechat-php.c
@@ -310,6 +310,7 @@ const zend_function_entry weechat_functions[] = {
PHP_FE(weechat_hdata_char, arginfo_weechat_hdata_char)
PHP_FE(weechat_hdata_integer, arginfo_weechat_hdata_integer)
PHP_FE(weechat_hdata_long, arginfo_weechat_hdata_long)
+ PHP_FE(weechat_hdata_longlong, arginfo_weechat_hdata_longlong)
PHP_FE(weechat_hdata_string, arginfo_weechat_hdata_string)
PHP_FE(weechat_hdata_pointer, arginfo_weechat_hdata_pointer)
PHP_FE(weechat_hdata_time, arginfo_weechat_hdata_time)
diff --git a/src/plugins/php/weechat-php.stub.php b/src/plugins/php/weechat-php.stub.php
index 5ed87ae77..82dee73df 100644
--- a/src/plugins/php/weechat-php.stub.php
+++ b/src/plugins/php/weechat-php.stub.php
@@ -218,6 +218,7 @@ function weechat_hdata_search(string $p0, string $p1, string $p2, array $p3, arr
function weechat_hdata_char(string $p0, string $p1, string $p2): int {}
function weechat_hdata_integer(string $p0, string $p1, string $p2): int {}
function weechat_hdata_long(string $p0, string $p1, string $p2): int {}
+function weechat_hdata_longlong(string $p0, string $p1, string $p2): int {}
function weechat_hdata_string(string $p0, string $p1, string $p2): string {}
function weechat_hdata_pointer(string $p0, string $p1, string $p2): string {}
function weechat_hdata_time(string $p0, string $p1, string $p2): int {}
diff --git a/src/plugins/php/weechat-php_arginfo.h b/src/plugins/php/weechat-php_arginfo.h
index a4d83439f..f5353b4d6 100644
--- a/src/plugins/php/weechat-php_arginfo.h
+++ b/src/plugins/php/weechat-php_arginfo.h
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 59292da89eab98ef1f615c173d9722b9fdafad80 */
+ * Stub hash: cf4a06ff974bca04f671e75e22f7d16534ca643f */
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_weechat_register, 0, 7, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, p0, IS_STRING, 0)
@@ -616,6 +616,8 @@ ZEND_END_ARG_INFO()
#define arginfo_weechat_hdata_long arginfo_weechat_config_write_line
+#define arginfo_weechat_hdata_longlong arginfo_weechat_config_write_line
+
#define arginfo_weechat_hdata_string arginfo_weechat_config_search_option
#define arginfo_weechat_hdata_pointer arginfo_weechat_config_search_option
diff --git a/src/plugins/php/weechat-php_legacy_arginfo.h b/src/plugins/php/weechat-php_legacy_arginfo.h
index 224fe77f8..36716de6c 100644
--- a/src/plugins/php/weechat-php_legacy_arginfo.h
+++ b/src/plugins/php/weechat-php_legacy_arginfo.h
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 59292da89eab98ef1f615c173d9722b9fdafad80 */
+ * Stub hash: cf4a06ff974bca04f671e75e22f7d16534ca643f */
ZEND_BEGIN_ARG_INFO_EX(arginfo_weechat_register, 0, 0, 7)
ZEND_ARG_INFO(0, p0)
@@ -451,6 +451,8 @@ ZEND_END_ARG_INFO()
#define arginfo_weechat_hdata_long arginfo_weechat_ngettext
+#define arginfo_weechat_hdata_longlong arginfo_weechat_ngettext
+
#define arginfo_weechat_hdata_string arginfo_weechat_ngettext
#define arginfo_weechat_hdata_pointer arginfo_weechat_ngettext
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index ada30e87d..aa0792d8e 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -932,6 +932,7 @@ plugin_load (const char *filename, int init_plugin, int argc, char **argv)
new_plugin->hdata_char = &hdata_char;
new_plugin->hdata_integer = &hdata_integer;
new_plugin->hdata_long = &hdata_long;
+ new_plugin->hdata_longlong = &hdata_longlong;
new_plugin->hdata_string = &hdata_string;
new_plugin->hdata_pointer = &hdata_pointer;
new_plugin->hdata_time = &hdata_time;
diff --git a/src/plugins/python/weechat-python-api.c b/src/plugins/python/weechat-python-api.c
index 298db8ff1..654b33cec 100644
--- a/src/plugins/python/weechat-python-api.c
+++ b/src/plugins/python/weechat-python-api.c
@@ -80,6 +80,8 @@
return PyLong_FromLong ((long)__int)
#define API_RETURN_LONG(__long) \
return PyLong_FromLong (__long)
+#define API_RETURN_LONGLONG(__longlong) \
+ return PyLong_FromLongLong (__longlong)
#define API_RETURN_ULONGLONG(__ulonglong) \
return PyLong_FromUnsignedLongLong (__ulonglong)
@@ -5345,6 +5347,25 @@ API_FUNC(hdata_long)
API_RETURN_LONG(value);
}
+API_FUNC(hdata_longlong)
+{
+ char *hdata, *pointer, *name;
+ long long value;
+
+ API_INIT_FUNC(1, "hdata_longlong", API_RETURN_LONGLONG(0));
+ hdata = NULL;
+ pointer = NULL;
+ name = NULL;
+ if (!PyArg_ParseTuple (args, "sss", &hdata, &pointer, &name))
+ API_WRONG_ARGS(API_RETURN_LONGLONG(0));
+
+ value = weechat_hdata_longlong (API_STR2PTR(hdata),
+ API_STR2PTR(pointer),
+ name);
+
+ API_RETURN_LONGLONG(value);
+}
+
API_FUNC(hdata_string)
{
char *hdata, *pointer, *name;
@@ -5816,6 +5837,7 @@ PyMethodDef weechat_python_funcs[] =
API_DEF_FUNC(hdata_char),
API_DEF_FUNC(hdata_integer),
API_DEF_FUNC(hdata_long),
+ API_DEF_FUNC(hdata_longlong),
API_DEF_FUNC(hdata_string),
API_DEF_FUNC(hdata_pointer),
API_DEF_FUNC(hdata_time),
diff --git a/src/plugins/python/weechat.pyi b/src/plugins/python/weechat.pyi
index e3e5c72b4..432927b64 100644
--- a/src/plugins/python/weechat.pyi
+++ b/src/plugins/python/weechat.pyi
@@ -2701,6 +2701,16 @@ def hdata_long(hdata: str, pointer: str, name: str) -> int:
...
+def hdata_longlong(hdata: str, pointer: str, name: str) -> int:
+ """`hdata_longlong in WeeChat plugin API reference <https://weechat.org/doc/weechat/api/#_hdata_longlong>`_
+ ::
+
+ # example
+ weechat.prnt("", "longlongvar = %d" % weechat.hdata_longlong(hdata, pointer, "longlongvar"))
+ """
+ ...
+
+
def hdata_string(hdata: str, pointer: str, name: str) -> str:
"""`hdata_string in WeeChat plugin API reference <https://weechat.org/doc/weechat/api/#_hdata_string>`_
::
diff --git a/src/plugins/relay/weechat/relay-weechat-msg.c b/src/plugins/relay/weechat/relay-weechat-msg.c
index 4dde883a5..a1e373bdb 100644
--- a/src/plugins/relay/weechat/relay-weechat-msg.c
+++ b/src/plugins/relay/weechat/relay-weechat-msg.c
@@ -176,6 +176,23 @@ relay_weechat_msg_add_long (struct t_relay_weechat_msg *msg, long value)
}
/*
+ * Adds a long long integer to a message.
+ */
+
+void
+relay_weechat_msg_add_longlong (struct t_relay_weechat_msg *msg,
+ long long value)
+{
+ char str_longlong[128];
+ unsigned char length;
+
+ snprintf (str_longlong, sizeof (str_longlong), "%lld", value);
+ length = strlen (str_longlong);
+ relay_weechat_msg_add_bytes (msg, &length, 1);
+ relay_weechat_msg_add_bytes (msg, str_longlong, length);
+}
+
+/*
* Adds length + string to a message.
*/
@@ -434,6 +451,7 @@ relay_weechat_msg_add_hdata_path (struct t_relay_weechat_msg *msg,
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_INT);
break;
case WEECHAT_HDATA_LONG:
+ case WEECHAT_HDATA_LONGLONG:
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_LONG);
break;
case WEECHAT_HDATA_STRING:
@@ -480,6 +498,12 @@ relay_weechat_msg_add_hdata_path (struct t_relay_weechat_msg *msg,
pointer,
name));
break;
+ case WEECHAT_HDATA_LONGLONG:
+ relay_weechat_msg_add_longlong (msg,
+ weechat_hdata_longlong (hdata,
+ pointer,
+ name));
+ break;
case WEECHAT_HDATA_STRING:
case WEECHAT_HDATA_SHARED_STRING:
relay_weechat_msg_add_string (msg,
@@ -694,6 +718,7 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
strcat (keys_types, RELAY_WEECHAT_MSG_OBJ_INT);
break;
case WEECHAT_HDATA_LONG:
+ case WEECHAT_HDATA_LONGLONG:
strcat (keys_types, RELAY_WEECHAT_MSG_OBJ_LONG);
break;
case WEECHAT_HDATA_STRING:
diff --git a/src/plugins/relay/weechat/relay-weechat-msg.h b/src/plugins/relay/weechat/relay-weechat-msg.h
index 554007549..2596f625f 100644
--- a/src/plugins/relay/weechat/relay-weechat-msg.h
+++ b/src/plugins/relay/weechat/relay-weechat-msg.h
@@ -62,6 +62,8 @@ extern void relay_weechat_msg_add_int (struct t_relay_weechat_msg *msg,
int value);
extern void relay_weechat_msg_add_long (struct t_relay_weechat_msg *msg,
long value);
+extern void relay_weechat_msg_add_longlong (struct t_relay_weechat_msg *msg,
+ long long value);
extern void relay_weechat_msg_add_string (struct t_relay_weechat_msg *msg,
const char *string);
extern void relay_weechat_msg_add_buffer (struct t_relay_weechat_msg *msg,
diff --git a/src/plugins/ruby/weechat-ruby-api.c b/src/plugins/ruby/weechat-ruby-api.c
index 46bdcf950..d70108878 100644
--- a/src/plugins/ruby/weechat-ruby-api.c
+++ b/src/plugins/ruby/weechat-ruby-api.c
@@ -6592,6 +6592,32 @@ weechat_ruby_api_hdata_long (VALUE class, VALUE hdata, VALUE pointer,
}
static VALUE
+weechat_ruby_api_hdata_longlong (VALUE class, VALUE hdata, VALUE pointer,
+ VALUE name)
+{
+ char *c_hdata, *c_pointer, *c_name;
+ long long value;
+
+ API_INIT_FUNC(1, "hdata_longlong", API_RETURN_LONG(0));
+ if (NIL_P (hdata) || NIL_P (pointer) || NIL_P (name))
+ API_WRONG_ARGS(API_RETURN_LONGLONG(0));
+
+ Check_Type (hdata, T_STRING);
+ Check_Type (pointer, T_STRING);
+ Check_Type (name, T_STRING);
+
+ c_hdata = StringValuePtr (hdata);
+ c_pointer = StringValuePtr (pointer);
+ c_name = StringValuePtr (name);
+
+ value = weechat_hdata_longlong (API_STR2PTR(c_hdata),
+ API_STR2PTR(c_pointer),
+ c_name);
+
+ API_RETURN_LONGLONG(value);
+}
+
+static VALUE
weechat_ruby_api_hdata_string (VALUE class, VALUE hdata, VALUE pointer,
VALUE name)
{
@@ -7147,6 +7173,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
API_DEF_FUNC(hdata_char, 3);
API_DEF_FUNC(hdata_integer, 3);
API_DEF_FUNC(hdata_long, 3);
+ API_DEF_FUNC(hdata_longlong, 3);
API_DEF_FUNC(hdata_string, 3);
API_DEF_FUNC(hdata_pointer, 3);
API_DEF_FUNC(hdata_time, 3);
diff --git a/src/plugins/tcl/weechat-tcl-api.c b/src/plugins/tcl/weechat-tcl-api.c
index 5a040c3f6..f6c26b276 100644
--- a/src/plugins/tcl/weechat-tcl-api.c
+++ b/src/plugins/tcl/weechat-tcl-api.c
@@ -5373,6 +5373,26 @@ API_FUNC(hdata_long)
API_RETURN_LONG(result);
}
+API_FUNC(hdata_longlong)
+{
+ char *hdata, *pointer, *name;
+ long long result;
+
+ API_INIT_FUNC(1, "hdata_longlong", API_RETURN_LONG(0));
+ if (objc < 4)
+ API_WRONG_ARGS(API_RETURN_LONG(0));
+
+ hdata = Tcl_GetString (objv[1]);
+ pointer = Tcl_GetString (objv[2]);
+ name = Tcl_GetString (objv[3]);
+
+ result = weechat_hdata_longlong (API_STR2PTR(hdata),
+ API_STR2PTR(pointer),
+ name);
+
+ API_RETURN_LONG(result);
+}
+
API_FUNC(hdata_string)
{
char *hdata, *pointer, *name;
@@ -5887,6 +5907,7 @@ void weechat_tcl_api_init (Tcl_Interp *interp)
API_DEF_FUNC(hdata_char);
API_DEF_FUNC(hdata_integer);
API_DEF_FUNC(hdata_long);
+ API_DEF_FUNC(hdata_longlong);
API_DEF_FUNC(hdata_string);
API_DEF_FUNC(hdata_pointer);
API_DEF_FUNC(hdata_time);
diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h
index 26733e8c2..fde3a1db4 100644
--- a/src/plugins/weechat-plugin.h
+++ b/src/plugins/weechat-plugin.h
@@ -71,7 +71,7 @@ struct timeval;
* please change the date with current one; for a second change at same
* date, increment the 01, otherwise please keep 01.
*/
-#define WEECHAT_PLUGIN_API_VERSION "20240304-01"
+#define WEECHAT_PLUGIN_API_VERSION "20240307-01"
/* macros for defining plugin infos */
#define WEECHAT_PLUGIN_NAME(__name) \
@@ -137,15 +137,21 @@ struct timeval;
#define WEECHAT_HASHTABLE_TIME "time"
/* types for hdata */
-#define WEECHAT_HDATA_OTHER 0
-#define WEECHAT_HDATA_CHAR 1
-#define WEECHAT_HDATA_INTEGER 2
-#define WEECHAT_HDATA_LONG 3
-#define WEECHAT_HDATA_STRING 4
-#define WEECHAT_HDATA_POINTER 5
-#define WEECHAT_HDATA_TIME 6
-#define WEECHAT_HDATA_HASHTABLE 7
-#define WEECHAT_HDATA_SHARED_STRING 8
+enum t_weechat_hdata
+{
+ WEECHAT_HDATA_OTHER = 0,
+ WEECHAT_HDATA_CHAR,
+ WEECHAT_HDATA_INTEGER,
+ WEECHAT_HDATA_LONG,
+ WEECHAT_HDATA_LONGLONG,
+ WEECHAT_HDATA_STRING,
+ WEECHAT_HDATA_POINTER,
+ WEECHAT_HDATA_TIME,
+ WEECHAT_HDATA_HASHTABLE,
+ WEECHAT_HDATA_SHARED_STRING,
+ /* number of hdata types */
+ WEECHAT_NUM_HDATA_TYPES,
+};
/* flags for hdata lists */
#define WEECHAT_HDATA_LIST_CHECK_POINTERS 1
@@ -1213,6 +1219,8 @@ struct t_weechat_plugin
const char *name);
long (*hdata_long) (struct t_hdata *hdata, void *pointer,
const char *name);
+ long long (*hdata_longlong) (struct t_hdata *hdata, void *pointer,
+ const char *name);
const char *(*hdata_string) (struct t_hdata *hdata, void *pointer,
const char *name);
void *(*hdata_pointer) (struct t_hdata *hdata, void *pointer,
@@ -2305,6 +2313,8 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
(weechat_plugin->hdata_integer)(__hdata, __pointer, __name)
#define weechat_hdata_long(__hdata, __pointer, __name) \
(weechat_plugin->hdata_long)(__hdata, __pointer, __name)
+#define weechat_hdata_longlong(__hdata, __pointer, __name) \
+ (weechat_plugin->hdata_longlong)(__hdata, __pointer, __name)
#define weechat_hdata_string(__hdata, __pointer, __name) \
(weechat_plugin->hdata_string)(__hdata, __pointer, __name)
#define weechat_hdata_pointer(__hdata, __pointer, __name) \
diff --git a/tests/unit/core/test-core-hdata.cpp b/tests/unit/core/test-core-hdata.cpp
index 208e07190..84cba3fab 100644
--- a/tests/unit/core/test-core-hdata.cpp
+++ b/tests/unit/core/test-core-hdata.cpp
@@ -54,6 +54,12 @@ struct t_test_item
long test_array_2_long_fixed_size[2];
long *test_ptr_2_long;
+ /* long long */
+ long long test_longlong;
+ long long test_count_longlong;
+ long long test_array_2_longlong_fixed_size[2];
+ long long *test_ptr_2_longlong;
+
/* string */
char *test_string;
char *test_string2;
@@ -374,6 +380,16 @@ TEST_GROUP(CoreHdataWithList)
item->test_ptr_2_long[0] = 123456L;
item->test_ptr_2_long[1] = 234567L;
+ /* long long */
+ item->test_longlong = 123456789123456L;
+ item->test_count_longlong = 2;
+ item->test_array_2_longlong_fixed_size[0] = 111L;
+ item->test_array_2_longlong_fixed_size[1] = 222L;
+ item->test_ptr_2_longlong = (long long *)malloc (
+ 2 * sizeof (item->test_ptr_2_longlong[0]));
+ item->test_ptr_2_longlong[0] = 123456L;
+ item->test_ptr_2_longlong[1] = 234567L;
+
/* string */
item->test_string = strdup ("item1");
item->test_string2 = strdup ("STRING2");
@@ -522,6 +538,16 @@ TEST_GROUP(CoreHdataWithList)
item->test_ptr_2_long[0] = 789123L;
item->test_ptr_2_long[1] = 891234L;
+ /* long long */
+ item->test_longlong = 987654321987654L;
+ item->test_count_longlong = 2;
+ item->test_array_2_longlong_fixed_size[0] = 333L;
+ item->test_array_2_longlong_fixed_size[1] = 444L;
+ item->test_ptr_2_longlong = (long long *)malloc (
+ 2 * sizeof (item->test_ptr_2_longlong[0]));
+ item->test_ptr_2_longlong[0] = 789123L;
+ item->test_ptr_2_longlong[1] = 891234L;
+
/* string */
item->test_string = strdup ("item2");
item->test_string2 = strdup ("string2");
@@ -657,6 +683,12 @@ TEST_GROUP(CoreHdataWithList)
HDATA_VAR(struct t_test_item, test_array_2_long_fixed_size, LONG, 0, "2", NULL);
HDATA_VAR(struct t_test_item, test_ptr_2_long, LONG, 0, "*,test_count_long", NULL);
+ /* long long */
+ HDATA_VAR(struct t_test_item, test_longlong, LONGLONG, 1, NULL, NULL);
+ HDATA_VAR(struct t_test_item, test_count_longlong, LONGLONG, 0, NULL, NULL);
+ HDATA_VAR(struct t_test_item, test_array_2_longlong_fixed_size, LONGLONG, 0, "2", NULL);
+ HDATA_VAR(struct t_test_item, test_ptr_2_longlong, LONGLONG, 0, "*,test_count_longlong", NULL);
+
/* string */
HDATA_VAR(struct t_test_item, test_string, STRING, 1, NULL, NULL);
HDATA_VAR(struct t_test_item, test_string2, STRING, 0, NULL, NULL);
@@ -740,6 +772,9 @@ TEST_GROUP(CoreHdataWithList)
/* long */
free (item->test_ptr_2_long);
+ /* long long */
+ free (item->test_ptr_2_longlong);
+
/* string */
free (item->test_string);
free (item->test_string2);
@@ -821,6 +856,8 @@ TEST(CoreHdataWithList, GetVarType)
hdata_get_var_type (ptr_hdata, "test_int"));
LONGS_EQUAL(WEECHAT_HDATA_LONG,
hdata_get_var_type (ptr_hdata, "test_long"));
+ LONGS_EQUAL(WEECHAT_HDATA_LONGLONG,
+ hdata_get_var_type (ptr_hdata, "test_longlong"));
LONGS_EQUAL(WEECHAT_HDATA_STRING,
hdata_get_var_type (ptr_hdata, "test_string"));
LONGS_EQUAL(WEECHAT_HDATA_SHARED_STRING,
@@ -853,6 +890,8 @@ TEST(CoreHdataWithList, GetVarTypeString)
hdata_get_var_type_string (ptr_hdata, "test_int"));
STRCMP_EQUAL("long",
hdata_get_var_type_string (ptr_hdata, "test_long"));
+ STRCMP_EQUAL("longlong",
+ hdata_get_var_type_string (ptr_hdata, "test_longlong"));
STRCMP_EQUAL("string",
hdata_get_var_type_string (ptr_hdata, "test_string"));
STRCMP_EQUAL("shared_string",
@@ -899,6 +938,10 @@ TEST(CoreHdataWithList, GetVarArraySize)
LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item1,
"test_ptr_2_long"));
LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item1,
+ "test_array_2_longlong_fixed_size"));
+ LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item1,
+ "test_ptr_2_longlong"));
+ LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item1,
"test_array_2_words_fixed_size"));
LONGS_EQUAL(3, hdata_get_var_array_size (ptr_hdata, ptr_item1,
"test_ptr_words"));
@@ -945,6 +988,10 @@ TEST(CoreHdataWithList, GetVarArraySize)
LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item2,
"test_ptr_2_long"));
LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item2,
+ "test_array_2_longlong_fixed_size"));
+ LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item2,
+ "test_ptr_2_longlong"));
+ LONGS_EQUAL(2, hdata_get_var_array_size (ptr_hdata, ptr_item2,
"test_array_2_words_fixed_size"));
LONGS_EQUAL(4, hdata_get_var_array_size (ptr_hdata, ptr_item2,
"test_ptr_words"));
@@ -1022,6 +1069,12 @@ TEST(CoreHdataWithList, GetVarArraySizeString)
"test_ptr_2_long"));
STRCMP_EQUAL("2",
hdata_get_var_array_size_string (ptr_hdata, ptr_item1,
+ "test_array_2_longlong_fixed_size"));
+ STRCMP_EQUAL("test_count_longlong",
+ hdata_get_var_array_size_string (ptr_hdata, ptr_item1,
+ "test_ptr_2_longlong"));
+ STRCMP_EQUAL("2",
+ hdata_get_var_array_size_string (ptr_hdata, ptr_item1,
"test_array_2_words_fixed_size"));
STRCMP_EQUAL("test_count_words",
hdata_get_var_array_size_string (ptr_hdata, ptr_item1,
@@ -1086,6 +1139,12 @@ TEST(CoreHdataWithList, GetVarArraySizeString)
"test_ptr_2_long"));
STRCMP_EQUAL("2",
hdata_get_var_array_size_string (ptr_hdata, ptr_item2,
+ "test_array_2_longlong_fixed_size"));
+ STRCMP_EQUAL("test_count_longlong",
+ hdata_get_var_array_size_string (ptr_hdata, ptr_item2,
+ "test_ptr_2_longlong"));
+ STRCMP_EQUAL("2",
+ hdata_get_var_array_size_string (ptr_hdata, ptr_item2,
"test_array_2_words_fixed_size"));
STRCMP_EQUAL("test_count_words",
hdata_get_var_array_size_string (ptr_hdata, ptr_item2,
@@ -1441,6 +1500,39 @@ TEST(CoreHdataWithList, Search)
"${test_item.test_long} == ${value}",
NULL, extra_vars, NULL, 1));
+ /* search long long */
+ POINTERS_EQUAL(
+ NULL,
+ hdata_search (ptr_hdata, items,
+ "${test_item.test_longlong} == 999",
+ NULL, NULL, NULL, 1));
+ POINTERS_EQUAL(
+ NULL,
+ hdata_search (ptr_hdata, items,
+ "${test_item.test_longlong} == 987654321987654",
+ NULL, NULL, NULL, 2));
+ POINTERS_EQUAL(
+ ptr_item1,
+ hdata_search (ptr_hdata, items,
+ "${test_item.test_longlong} == 123456789123456",
+ NULL, NULL, NULL, 1));
+ POINTERS_EQUAL(
+ ptr_item2,
+ hdata_search (ptr_hdata, items,
+ "${test_item.test_longlong} == 987654321987654",
+ NULL, NULL, NULL, 1));
+ POINTERS_EQUAL(
+ ptr_item1,
+ hdata_search (ptr_hdata, last_item,
+ "${test_item.test_longlong} == 123456789123456",
+ NULL, NULL, NULL, -1));
+ hashtable_set (extra_vars, "value", "987654321987654");
+ POINTERS_EQUAL(
+ ptr_item2,
+ hdata_search (ptr_hdata, items,
+ "${test_item.test_longlong} == ${value}",
+ NULL, extra_vars, NULL, 1));
+
/* search string */
POINTERS_EQUAL(
NULL,
@@ -1750,6 +1842,48 @@ TEST(CoreHdataWithList, Long)
/*
* Tests functions:
+ * hdata_longlong
+ */
+
+TEST(CoreHdataWithList, LongLong)
+{
+ LONGS_EQUAL(0, hdata_longlong (NULL, NULL, NULL));
+ LONGS_EQUAL(0, hdata_longlong (ptr_hdata, NULL, NULL));
+ LONGS_EQUAL(0, hdata_longlong (NULL, ptr_item1, NULL));
+ LONGS_EQUAL(0, hdata_longlong (NULL, NULL, "test_longlong"));
+ LONGS_EQUAL(0, hdata_longlong (ptr_hdata, ptr_item1, NULL));
+ LONGS_EQUAL(0, hdata_longlong (ptr_hdata, NULL, "test_longlong"));
+ LONGS_EQUAL(0, hdata_longlong (NULL, ptr_item1, "test_longlong"));
+
+ /* variable not found */
+ LONGS_EQUAL(0, hdata_longlong (ptr_hdata, ptr_item1, "zzz"));
+ LONGS_EQUAL(0, hdata_longlong (ptr_hdata, ptr_item1, "1|zzz"));
+
+ /* item 1 */
+ LONGS_EQUAL(123456789123456L, hdata_longlong (ptr_hdata, ptr_item1, "test_longlong"));
+ LONGS_EQUAL(111L, hdata_longlong (ptr_hdata, ptr_item1,
+ "0|test_array_2_longlong_fixed_size"));
+ LONGS_EQUAL(222L, hdata_longlong (ptr_hdata, ptr_item1,
+ "1|test_array_2_longlong_fixed_size"));
+ LONGS_EQUAL(123456L, hdata_longlong (ptr_hdata, ptr_item1,
+ "0|test_ptr_2_longlong"));
+ LONGS_EQUAL(234567L, hdata_longlong (ptr_hdata, ptr_item1,
+ "1|test_ptr_2_longlong"));
+
+ /* item 2 */
+ LONGS_EQUAL(987654321987654L, hdata_longlong (ptr_hdata, ptr_item2, "test_longlong"));
+ LONGS_EQUAL(333L, hdata_longlong (ptr_hdata, ptr_item2,
+ "0|test_array_2_longlong_fixed_size"));
+ LONGS_EQUAL(444L, hdata_longlong (ptr_hdata, ptr_item2,
+ "1|test_array_2_longlong_fixed_size"));
+ LONGS_EQUAL(789123L, hdata_longlong (ptr_hdata, ptr_item2,
+ "0|test_ptr_2_longlong"));
+ LONGS_EQUAL(891234L, hdata_longlong (ptr_hdata, ptr_item2,
+ "1|test_ptr_2_longlong"));
+}
+
+/*
+ * Tests functions:
* hdata_string
*/
@@ -2101,6 +2235,14 @@ TEST(CoreHdataWithList, Compare)
LONGS_EQUAL(1, hdata_compare (ptr_hdata, ptr_item2, ptr_item1,
"test_long", 0));
+ /* compare long long integers: 123456789123456ULL and 987654321987654ULL */
+ LONGS_EQUAL(0, hdata_compare (ptr_hdata, ptr_item1, ptr_item1,
+ "test_longlong", 0));
+ LONGS_EQUAL(-1, hdata_compare (ptr_hdata, ptr_item1, ptr_item2,
+ "test_longlong", 0));
+ LONGS_EQUAL(1, hdata_compare (ptr_hdata, ptr_item2, ptr_item1,
+ "test_longlong", 0));
+
/* compare pointers: 0x123 and 0x456 */
LONGS_EQUAL(0, hdata_compare (ptr_hdata, ptr_item1, ptr_item1,
"test_pointer", 0));
@@ -2291,6 +2433,24 @@ TEST(CoreHdataWithList, Update)
LONGS_EQUAL(1, hdata_update (ptr_hdata, ptr_item1, hashtable));
LONGS_EQUAL(777, ptr_item1->test_long);
+ /* set long long to invalid value */
+ hashtable_remove_all (hashtable);
+ hashtable_set (hashtable, "test_longlong", "abc");
+ LONGS_EQUAL(0, hdata_update (ptr_hdata, ptr_item1, hashtable));
+ LONGS_EQUAL(123456789123456L, ptr_item1->test_longlong);
+
+ /* set long long to -55 */
+ hashtable_remove_all (hashtable);
+ hashtable_set (hashtable, "test_longlong", "-55");
+ LONGS_EQUAL(1, hdata_update (ptr_hdata, ptr_item1, hashtable));
+ LONGS_EQUAL(-55, ptr_item1->test_longlong);
+
+ /* set long long to 777 */
+ hashtable_remove_all (hashtable);
+ hashtable_set (hashtable, "test_longlong", "777");
+ LONGS_EQUAL(1, hdata_update (ptr_hdata, ptr_item1, hashtable));
+ LONGS_EQUAL(777, ptr_item1->test_longlong);
+
/* set pointer to invalid value */
hashtable_remove_all (hashtable);
hashtable_set (hashtable, "test_pointer", "zzz");
@@ -2357,9 +2517,11 @@ TEST(CoreHdataWithList, GetString)
"test_char,test_count_char,test_array_2_char_fixed_size,"
"test_ptr_2_char,test_int,test_count_int,test_array_2_int_fixed_size,"
"test_ptr_3_int,test_ptr_1_int_fixed_size,test_long,test_count_long,"
- "test_array_2_long_fixed_size,test_ptr_2_long,test_string,"
- "test_string2,test_string3,test_string_null,test_shared_string,"
- "test_count_words,test_array_2_words_fixed_size,test_ptr_words,"
+ "test_array_2_long_fixed_size,test_ptr_2_long,test_longlong,"
+ "test_count_longlong,test_array_2_longlong_fixed_size,"
+ "test_ptr_2_longlong,test_string,test_string2,test_string3,"
+ "test_string_null,test_shared_string,test_count_words,"
+ "test_array_2_words_fixed_size,test_ptr_words,"
"test_ptr_words_dyn,test_ptr_words_dyn_shared,test_pointer,"
"test_count_pointer,test_array_2_pointer_fixed_size,"
"test_ptr_3_pointer,test_ptr_0_pointer_dyn,test_ptr_1_pointer_dyn,"
@@ -2373,12 +2535,12 @@ TEST(CoreHdataWithList, GetString)
prop = hdata_get_string (ptr_hdata, "var_values");
items = string_split (prop, ",", NULL, 0, 0, &num_items);
- LONGS_EQUAL(45, num_items);
+ LONGS_EQUAL(49, num_items);
string_free_split (items);
prop = hdata_get_string (ptr_hdata, "var_keys_values");
items = string_split (prop, ",", NULL, 0, 0, &num_items);
- LONGS_EQUAL(45, num_items);
+ LONGS_EQUAL(49, num_items);
string_free_split (items);
STRCMP_EQUAL("prev_item", hdata_get_string (ptr_hdata, "var_prev"));