From c200c1704501e5a74f72dedc3b3b76567d679e0d Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 25 Nov 2019 08:27:39 -0800 Subject: [PATCH] input: Make use of timeval portable for 64bit time_t This patch avoids using time field of input_event structure which is not available on 32bit arches supporting 64bit time_t structs, Patch makes it compatible with new and keeps old input.h implementation functional as well. See https://sourceware.org/glibc/wiki/Y2038ProofnessDesign Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtbase/+/282610] Change-Id: Ie4d66a5e7d83065f1a904a542c711431e1d20845 --- diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp index 3555763..e7dc57c 100644 --- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp +++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp @@ -58,6 +58,11 @@ #include #endif +#ifndef input_event_sec +#define input_event_sec time.tv_sec +#define input_event_usec time.tv_usec +#endif + QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY(qLcEvdevKey, "qt.qpa.input") @@ -149,7 +154,10 @@ void QEvdevKeyboardHandler::switchLed(in qCDebug(qLcEvdevKey) << "switchLed" << led << state; struct ::input_event led_ie; - ::gettimeofday(&led_ie.time, 0); + struct timeval tval; + ::gettimeofday(&tval, 0); + led_ie.input_event_sec = tval.tv_sec; + led_ie.input_event_usec = tval.tv_usec; led_ie.type = EV_LED; led_ie.code = led; led_ie.value = state; diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp index 78728ef..1d65f9b 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp @@ -55,6 +55,11 @@ #include #endif +#ifndef input_event_sec +#define input_event_sec time.tv_sec +#define input_event_usec time.tv_usec +#endif + #include #if QT_CONFIG(mtdev) @@ -568,7 +573,7 @@ void QEvdevTouchScreenData::processInput // update timestamps m_lastTimeStamp = m_timeStamp; - m_timeStamp = data->time.tv_sec + data->time.tv_usec / 1000000.0; + m_timeStamp = data->input_event_sec + data->input_event_usec / 1000000.0; m_lastTouchPoints = m_touchPoints; m_touchPoints.clear();