123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- From 30973c0bc053b2198cafb1899a0843688d5bb541 Mon Sep 17 00:00:00 2001
- From: Deepa Dinamani <deepa.kernel@gmail.com>
- Date: Mon, 15 Jan 2018 17:18:49 -0800
- Subject: [PATCH] evemu: Update struct input_event
- The struct input_event is not y2038 safe.
- Update the struct according to the kernel patch:
- https://lkml.org/lkml/2018/1/6/324
- Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
- Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
- [Retrieved from:
- https://gitlab.freedesktop.org/libevdev/evemu/-/commit/30973c0bc053b2198cafb1899a0843688d5bb541]
- Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- ---
- src/evemu.c | 35 +++++++++++++++++++++++------------
- 1 file changed, 23 insertions(+), 12 deletions(-)
- diff --git a/src/evemu.c b/src/evemu.c
- index a8a949b..c7ff561 100644
- --- a/src/evemu.c
- +++ b/src/evemu.c
- @@ -771,7 +771,7 @@ int evemu_write_event(FILE *fp, const struct input_event *ev)
- {
- int rc;
- rc = fprintf(fp, "E: %lu.%06u %04x %04x %04d ",
- - ev->time.tv_sec, (unsigned)ev->time.tv_usec,
- + ev->input_event_sec, (unsigned)ev->input_event_usec,
- ev->type, ev->code, ev->value);
- rc += write_event_desc(fp, ev);
- return rc;
- @@ -800,13 +800,19 @@ int evemu_record(FILE *fp, int fd, int ms)
- if (ret < 0)
- return ret;
- if (ret == sizeof(ev)) {
- + struct timeval tv;
- long time;
-
- + tv.tv_sec = ev.input_event_sec;
- + tv.tv_usec = ev.input_event_usec;
- +
- if (offset == 0)
- - offset = time_to_long(&ev.time) - 1;
- + offset = time_to_long(&tv) - 1;
-
- - time = time_to_long(&ev.time);
- - ev.time = long_to_time(time - offset);
- + time = time_to_long(&tv);
- + tv = long_to_time(time - offset);
- + ev.input_event_sec = tv.tv_sec;
- + ev.input_event_usec = tv.tv_usec;
- evemu_write_event(fp, &ev);
- fflush(fp);
- }
- @@ -839,8 +845,8 @@ int evemu_read_event(FILE *fp, struct input_event *ev)
- return -1;
- }
-
- - ev->time.tv_sec = sec;
- - ev->time.tv_usec = usec;
- + ev->input_event_sec = sec;
- + ev->input_event_usec = usec;
- ev->type = type;
- ev->code = code;
- ev->value = value;
- @@ -852,8 +858,8 @@ out:
-
- int evemu_create_event(struct input_event *ev, int type, int code, int value)
- {
- - ev->time.tv_sec = 0;
- - ev->time.tv_usec = 0;
- + ev->input_event_sec = 0;
- + ev->input_event_usec = 0;
- ev->type = type;
- ev->code = code;
- ev->value = value;
- @@ -873,6 +879,7 @@ static inline unsigned long us2s(unsigned long us)
- int evemu_read_event_realtime(FILE *fp, struct input_event *ev,
- struct timeval *evtime)
- {
- + struct timeval tv;
- unsigned long usec;
- const unsigned long ERROR_MARGIN = 150; /* µs */
- int ret;
- @@ -882,14 +889,18 @@ int evemu_read_event_realtime(FILE *fp, struct input_event *ev,
- return ret;
-
- if (evtime) {
- - if (evtime->tv_sec == 0 && evtime->tv_usec == 0)
- - *evtime = ev->time;
- - usec = time_to_long(&ev->time) - time_to_long(evtime);
- + if (evtime->tv_sec == 0 && evtime->tv_usec == 0) {
- + evtime->tv_sec = ev->input_event_sec;
- + evtime->tv_usec = ev->input_event_usec;
- + }
- + tv.tv_sec = ev->input_event_sec;
- + tv.tv_usec = ev->input_event_usec;
- + usec = time_to_long(&tv) - time_to_long(evtime);
- if (usec > ERROR_MARGIN * 2) {
- if (usec > s2us(10))
- error(INFO, "Sleeping for %lds.\n", us2s(usec));
- usleep(usec - ERROR_MARGIN);
- - *evtime = ev->time;
- + *evtime = tv;
- }
- }
-
- --
- 2.24.1
|