]> git.pld-linux.org Git - packages/irssi.git/blame - gtimeval-build-fix.patch
perl 5.38.0 rebuild
[packages/irssi.git] / gtimeval-build-fix.patch
CommitLineData
b9f9d7d6
AM
1From c7728ea5aa2f4e584159b3d12ad815294c44ca6a Mon Sep 17 00:00:00 2001
2From: Ailin Nemui <ailin@z30a.localdomain>
3Date: Tue, 17 Mar 2020 14:32:52 +0100
4Subject: [PATCH] add compatibility code to GTimeVal -> gint64 transition
5Origin: https://github.com/cdidier/irssi-xmpp/pull/53
6Reviewed-By: Simon Chopin <schopin@ubuntu.com>
7Last-Update: 2022-07-29
8
9this is for irssi/irssi#1145
10---
11 src/core/xep/ping.c | 50 +++++++++++++++++++++++++++++++++------------
12 1 file changed, 37 insertions(+), 13 deletions(-)
13
14diff --git a/src/core/xep/ping.c b/src/core/xep/ping.c
15index 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.120379 seconds and 4 git commands to generate.