]> git.pld-linux.org Git - packages/irssi.git/blob - gtimeval-build-fix.patch
perl 5.38.0 rebuild
[packages/irssi.git] / gtimeval-build-fix.patch
1 From c7728ea5aa2f4e584159b3d12ad815294c44ca6a Mon Sep 17 00:00:00 2001
2 From: Ailin Nemui <ailin@z30a.localdomain>
3 Date: Tue, 17 Mar 2020 14:32:52 +0100
4 Subject: [PATCH] add compatibility code to GTimeVal -> gint64 transition
5 Origin: https://github.com/cdidier/irssi-xmpp/pull/53
6 Reviewed-By: Simon Chopin <schopin@ubuntu.com>
7 Last-Update: 2022-07-29
8
9 this is for irssi/irssi#1145
10 ---
11  src/core/xep/ping.c | 50 +++++++++++++++++++++++++++++++++------------
12  1 file changed, 37 insertions(+), 13 deletions(-)
13
14 diff --git a/src/core/xep/ping.c b/src/core/xep/ping.c
15 index d51930a..7b811cb 100644
16 --- a/src/core/xep/ping.c
17 +++ b/src/core/xep/ping.c
18 @@ -36,15 +36,40 @@
19  
20  #define XMLNS_PING "urn:xmpp:ping"
21  
22 +#if defined(IRSSI_ABI_VERSION) && IRSSI_ABI_VERSION >= 25
23 +#define NO_TIMEVAL
24 +#define TimeType gint64
25 +#else
26 +#define TimeType GTimeVal
27 +#endif
28 +
29  struct ping_data {
30 -       char     *id;
31 -       GTimeVal  time;
32 +       char    *id;
33 +       TimeType time;
34  };
35  
36  static int      timeout_tag;
37  static GSList  *supported_servers;
38  static DATALIST *pings;
39  
40 +#ifdef NO_TIMEVAL
41 +
42 +#define set_current_time(var)   (var) = g_get_real_time()
43 +#define clear_time(var)         (var) = 0
44 +#define has_time(var)           ((var) != 0)
45 +#define get_time_sec(var)       ((var) / G_TIME_SPAN_SECOND)
46 +#define get_time_diff(to, from) (to) - (from)
47 +
48 +#else
49 +
50 +#define set_current_time(var)   g_get_current_time(&(var))
51 +#define clear_time(var)         memset(&(var), 0, sizeof((var)))
52 +#define has_time(var)           ((var).tv_sec != 0)
53 +#define get_time_sec(var)       ((var).tv_sec)
54 +#define get_time_diff(to, from) (int) get_timeval_diff(&(to), &(from))
55 +
56 +#endif
57 +
58  static void
59  request_ping(XMPP_SERVER_REC *server, const char *dest)
60  {
61 @@ -63,13 +88,13 @@ request_ping(XMPP_SERVER_REC *server, const char *dest)
62                 g_free(server->ping_id);
63                 server->ping_id =
64                     g_strdup(lm_message_node_get_attribute(lmsg->node, "id"));
65 -               g_get_current_time(&server->lag_sent);
66 +               set_current_time(server->lag_sent);
67                 server->lag_last_check = time(NULL);
68         } else {
69                 pd = g_new0(struct ping_data, 1);
70                 pd->id =
71                     g_strdup(lm_message_node_get_attribute(lmsg->node, "id"));
72 -               g_get_current_time(&pd->time);
73 +               set_current_time(pd->time);
74                 datalist_add(pings, server, dest, pd);
75         }
76         signal_emit("xmpp send iq", 2, server, lmsg);
77 @@ -98,7 +123,7 @@ sig_recv_iq(XMPP_SERVER_REC *server, LmMessage *lmsg, const int type,
78  {
79         DATALIST_REC *rec;
80         LmMessageNode *node;
81 -       GTimeVal now;
82 +       TimeType now;
83         struct ping_data *pd;
84  
85         if (type == LM_MESSAGE_SUB_TYPE_RESULT) {
86 @@ -106,19 +131,18 @@ sig_recv_iq(XMPP_SERVER_REC *server, LmMessage *lmsg, const int type,
87                 if (server->ping_id != NULL
88                     && (*from == '\0' || strcmp(from, server->domain) == 0)
89                     && strcmp(id, server->ping_id) == 0) {
90 -                       g_get_current_time(&now);
91 -                       server->lag =
92 -                           (int)get_timeval_diff(&now, &server->lag_sent);
93 -                       memset(&server->lag_sent, 0, sizeof(server->lag_sent));
94 +                       set_current_time(now);
95 +                       server->lag = get_time_diff(now, server->lag_sent);
96 +                       clear_time(server->lag_sent);
97                         g_free_and_null(server->ping_id);
98                         signal_emit("server lag", 1, server);
99                 } else if (lmsg->node->children == NULL
100                     && (rec = datalist_find(pings, server, from)) != NULL) {
101                         pd = rec->data;
102                         if (strcmp(id, pd->id) == 0) {
103 -                               g_get_current_time(&now);
104 +                               set_current_time(now);
105                                 signal_emit("xmpp ping", 3, server, from,
106 -                                   get_timeval_diff(&now, &pd->time));
107 +                                   get_time_diff(now, pd->time));
108                         }
109                 }
110         } else if (type == LM_MESSAGE_SUB_TYPE_GET) {
111 @@ -166,10 +190,10 @@ check_ping_func(void)
112         now = time(NULL);
113         for (tmp = supported_servers; tmp != NULL; tmp = tmp->next) {
114                 server = XMPP_SERVER(tmp->data);
115 -               if (server->lag_sent.tv_sec != 0) {
116 +               if (has_time(server->lag_sent)) {
117                         /* waiting for lag reply */
118                         if (max_lag > 1 &&
119 -                           (now - server->lag_sent.tv_sec) > max_lag) {
120 +                           (now - get_time_sec(server->lag_sent)) > max_lag) {
121                                 /* too much lag - disconnect */
122                                 signal_emit("server lag disconnect", 1,
123                                     server);
This page took 0.08519 seconds and 3 git commands to generate.