Package: irssi-plugin-xmpp
Followup-For: Bug #1015031
User: ubuntu-de...@lists.ubuntu.com
Usertags: origin-ubuntu kinetic ubuntu-patch
X-Debbugs-Cc: scho...@ubuntu.com
Control: tags -1 patch

In Ubuntu, the attached patch was applied to achieve the following:

  * d/p/gtimeval-build-fix.patch: cherry-picked from a PR upstream to fix
    build against newer irssi (Closes: #1015031)

Thanks for considering the patch.
Cheers,

Simon

-- System Information:
Debian Release: bookworm/sid
  APT prefers jammy-updates
  APT policy: (500, 'jammy-updates'), (500, 'jammy-proposed'), (500, 'jammy'), 
(100, 'jammy-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.15.0-43-generic (SMP w/24 CPU threads)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE, 
TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
diff -Nru 
irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/gtimeval-build-fix.patch
 
irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/gtimeval-build-fix.patch
--- 
irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/gtimeval-build-fix.patch
   1970-01-01 01:00:00.000000000 +0100
+++ 
irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/gtimeval-build-fix.patch
   2022-07-29 09:48:28.000000000 +0200
@@ -0,0 +1,123 @@
+From c7728ea5aa2f4e584159b3d12ad815294c44ca6a Mon Sep 17 00:00:00 2001
+From: Ailin Nemui <ailin@z30a.localdomain>
+Date: Tue, 17 Mar 2020 14:32:52 +0100
+Subject: [PATCH] add compatibility code to GTimeVal -> gint64 transition
+Origin: https://github.com/cdidier/irssi-xmpp/pull/53
+Reviewed-By: Simon Chopin <scho...@ubuntu.com>
+Last-Update: 2022-07-29
+
+this is for irssi/irssi#1145
+---
+ src/core/xep/ping.c | 50 +++++++++++++++++++++++++++++++++------------
+ 1 file changed, 37 insertions(+), 13 deletions(-)
+
+diff --git a/src/core/xep/ping.c b/src/core/xep/ping.c
+index d51930a..7b811cb 100644
+--- a/src/core/xep/ping.c
++++ b/src/core/xep/ping.c
+@@ -36,15 +36,40 @@
+ 
+ #define XMLNS_PING "urn:xmpp:ping"
+ 
++#if defined(IRSSI_ABI_VERSION) && IRSSI_ABI_VERSION >= 25
++#define NO_TIMEVAL
++#define TimeType gint64
++#else
++#define TimeType GTimeVal
++#endif
++
+ struct ping_data {
+-      char     *id;
+-      GTimeVal  time;
++      char    *id;
++      TimeType time;
+ };
+ 
+ static int     timeout_tag;
+ static GSList *supported_servers;
+ static DATALIST *pings;
+ 
++#ifdef NO_TIMEVAL
++
++#define set_current_time(var)   (var) = g_get_real_time()
++#define clear_time(var)         (var) = 0
++#define has_time(var)           ((var) != 0)
++#define get_time_sec(var)       ((var) / G_TIME_SPAN_SECOND)
++#define get_time_diff(to, from) (to) - (from)
++
++#else
++
++#define set_current_time(var)   g_get_current_time(&(var))
++#define clear_time(var)         memset(&(var), 0, sizeof((var)))
++#define has_time(var)           ((var).tv_sec != 0)
++#define get_time_sec(var)       ((var).tv_sec)
++#define get_time_diff(to, from) (int) get_timeval_diff(&(to), &(from))
++
++#endif
++
+ static void
+ request_ping(XMPP_SERVER_REC *server, const char *dest)
+ {
+@@ -63,13 +88,13 @@ request_ping(XMPP_SERVER_REC *server, const char *dest)
+               g_free(server->ping_id);
+               server->ping_id =
+                   g_strdup(lm_message_node_get_attribute(lmsg->node, "id"));
+-              g_get_current_time(&server->lag_sent);
++              set_current_time(server->lag_sent);
+               server->lag_last_check = time(NULL);
+       } else {
+               pd = g_new0(struct ping_data, 1);
+               pd->id =
+                   g_strdup(lm_message_node_get_attribute(lmsg->node, "id"));
+-              g_get_current_time(&pd->time);
++              set_current_time(pd->time);
+               datalist_add(pings, server, dest, pd);
+       }
+       signal_emit("xmpp send iq", 2, server, lmsg);
+@@ -98,7 +123,7 @@ sig_recv_iq(XMPP_SERVER_REC *server, LmMessage *lmsg, const 
int type,
+ {
+       DATALIST_REC *rec;
+       LmMessageNode *node;
+-      GTimeVal now;
++      TimeType now;
+       struct ping_data *pd;
+ 
+       if (type == LM_MESSAGE_SUB_TYPE_RESULT) {
+@@ -106,19 +131,18 @@ sig_recv_iq(XMPP_SERVER_REC *server, LmMessage *lmsg, 
const int type,
+               if (server->ping_id != NULL
+                   && (*from == '\0' || strcmp(from, server->domain) == 0)
+                   && strcmp(id, server->ping_id) == 0) {
+-                      g_get_current_time(&now);
+-                      server->lag =
+-                          (int)get_timeval_diff(&now, &server->lag_sent);
+-                      memset(&server->lag_sent, 0, sizeof(server->lag_sent));
++                      set_current_time(now);
++                      server->lag = get_time_diff(now, server->lag_sent);
++                      clear_time(server->lag_sent);
+                       g_free_and_null(server->ping_id);
+                       signal_emit("server lag", 1, server);
+               } else if (lmsg->node->children == NULL
+                   && (rec = datalist_find(pings, server, from)) != NULL) {
+                       pd = rec->data;
+                       if (strcmp(id, pd->id) == 0) {
+-                              g_get_current_time(&now);
++                              set_current_time(now);
+                               signal_emit("xmpp ping", 3, server, from,
+-                                  get_timeval_diff(&now, &pd->time));
++                                  get_time_diff(now, pd->time));
+                       }
+               }
+       } else if (type == LM_MESSAGE_SUB_TYPE_GET) {
+@@ -166,10 +190,10 @@ check_ping_func(void)
+       now = time(NULL);
+       for (tmp = supported_servers; tmp != NULL; tmp = tmp->next) {
+               server = XMPP_SERVER(tmp->data);
+-              if (server->lag_sent.tv_sec != 0) {
++              if (has_time(server->lag_sent)) {
+                       /* waiting for lag reply */
+                       if (max_lag > 1 &&
+-                          (now - server->lag_sent.tv_sec) > max_lag) {
++                          (now - get_time_sec(server->lag_sent)) > max_lag) {
+                               /* too much lag - disconnect */
+                               signal_emit("server lag disconnect", 1,
+                                   server);
diff -Nru irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/series 
irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/series
--- irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/series     
2021-01-22 10:33:44.000000000 +0100
+++ irssi-plugin-xmpp-0.54+git20191101+c13fa5/debian/patches/series     
2022-07-29 09:48:28.000000000 +0200
@@ -32,3 +32,4 @@
 strip_resource_08082009.patch
 singpolyma-fix-warnings.patch
 singpolyma-null-resource-was-causing-crash-here.patch
+gtimeval-build-fix.patch

Reply via email to