hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
From daecf59cc8b294265666482a4766aaa3148c308b Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 30 Nov 2019 11:43:32 -0800
Subject: [PATCH] Fix build on 32bit arches with 64bit time_t
 
time element is deprecated on new input_event structure in kernel's
input.h [1]
 
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=152194fe9c3f
 
[Retrieved from:
https://github.com/LibVNC/x11vnc/commit/daecf59cc8b294265666482a4766aaa3148c308b]
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 src/uinput.c | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)
 
diff --git a/src/uinput.c b/src/uinput.c
index 28fbad3..d71bcde 100644
--- a/src/uinput.c
+++ b/src/uinput.c
@@ -54,6 +54,11 @@ so, delete this exception statement from your version.
 #include <linux/input.h>
 #include <linux/uinput.h>
 
+#ifndef input_event_sec
+#define input_event_sec time.tv_sec
+#define input_event_usec time.tv_usec
+#endif
+
 #if !defined(EV_SYN) || !defined(SYN_REPORT)
 #undef UINPUT_OK
 #endif
@@ -710,6 +715,7 @@ void parse_uinput_str(char *in) {
 static void ptr_move(int dx, int dy) {
 #ifdef UINPUT_OK
     struct input_event ev;
+    struct timeval tval;
     int d = direct_rel_fd < 0 ? fd : direct_rel_fd;
 
     if (injectable && strchr(injectable, 'M') == NULL) {
@@ -720,7 +726,9 @@ static void ptr_move(int dx, int dy) {
 
     if (db) fprintf(stderr, "ptr_move(%d, %d) fd=%d\n", dx, dy, d);
 
-    gettimeofday(&ev.time, NULL);
+    gettimeofday(&tval, NULL);
+    ev.input_event_sec = tval.tv_sec;
+    ev.input_event_usec = tval.tv_usec;
     ev.type = EV_REL;
     ev.code = REL_Y;
     ev.value = dy;
@@ -755,6 +763,7 @@ static void apply_tslib(int *x, int *y) {
 static void ptr_abs(int x, int y, int p) {
 #ifdef UINPUT_OK
     struct input_event ev;
+    struct timeval tval;
     int x0, y0;
     int d = direct_abs_fd < 0 ? fd : direct_abs_fd;
 
@@ -773,7 +782,9 @@ static void ptr_abs(int x, int y, int p) {
 
     if (db) fprintf(stderr, "ptr_abs(%d, %d => %d %d, p=%d) fd=%d\n", x0, y0, x, y, p, d);
 
-    gettimeofday(&ev.time, NULL);
+    gettimeofday(&tval, NULL);
+    ev.input_event_sec = tval.tv_sec;
+    ev.input_event_usec = tval.tv_usec;
     ev.type = EV_ABS;
     ev.code = ABS_Y;
     ev.value = y;
@@ -950,6 +961,7 @@ if (0) {usleep(100*1000) ;}
 static void button_click(int down, int btn) {
 #ifdef UINPUT_OK
     struct input_event ev;
+    struct timeval tval;
     int d = direct_btn_fd < 0 ? fd : direct_btn_fd;
 
     if (injectable && strchr(injectable, 'B') == NULL) {
@@ -959,7 +971,9 @@ static void button_click(int down, int btn) {
     if (db) fprintf(stderr, "button_click: btn %d %s fd=%d\n", btn, down ? "down" : "up", d);
 
     memset(&ev, 0, sizeof(ev));
-    gettimeofday(&ev.time, NULL);
+    gettimeofday(&tval, NULL);
+    ev.input_event_sec = tval.tv_sec;
+    ev.input_event_usec = tval.tv_usec;
     ev.type = EV_KEY;
     ev.value = down;
 
@@ -1230,6 +1244,7 @@ void uinput_pointer_command(int mask, int x, int y, rfbClientPtr client) {
 void uinput_key_command(int down, int keysym, rfbClientPtr client) {
 #ifdef UINPUT_OK
     struct input_event ev;
+    struct timeval tval;
     int scancode;
     allowed_input_t input;
     int d = direct_key_fd < 0 ? fd : direct_key_fd;
@@ -1253,7 +1268,9 @@ void uinput_key_command(int down, int keysym, rfbClientPtr client) {
     if (db) fprintf(stderr, "uinput_key_command: %d -> %d %s fd=%d\n", keysym, scancode, down ? "down" : "up", d);
 
     memset(&ev, 0, sizeof(ev));
-    gettimeofday(&ev.time, NULL);
+    gettimeofday(&tval, NULL);
+    ev.input_event_sec = tval.tv_sec;
+    ev.input_event_usec = tval.tv_usec;
     ev.type = EV_KEY;
     ev.code = (unsigned char) scancode;
     ev.value = down;