pmaports/unity8/mir/0003-Suppress-the-compiler-diagnostic-on-Alpine-Linux-cau.patch
Luca Weiss 8c2a95dbe2
unity8: initial packaging (!27)
* Mir starts up and is able to display system settings
* x86_64 only for now, because at least ubuntu-app-test did not build
  on aarch64

Based on PureTryOut's work. Getting it to this stage was a huge effort
(as it shows in the package count: 111(!)). See the merge request for
details.

[skip ci]: this won't finish in CI; ollieparanoid made sure that
           everything builds for x86_64.
2019-02-13 21:47:29 +01:00

44 lines
1.8 KiB
Diff

From cc862ef9a703782f7fc8a9a20dbfde882776b9b7 Mon Sep 17 00:00:00 2001
From: Alan Griffiths <alan@octopull.co.uk>
Date: Wed, 9 Jan 2019 10:35:34 +0100
Subject: [PATCH 3/7] Suppress the compiler diagnostic on Alpine Linux caused
by a mismatch between the signed type of the ioctl() request parameter and
the unsigned type returned by EVIOCGPROP. (See #692)
---
src/platforms/evdev/evdev_device_detection.cpp | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/platforms/evdev/evdev_device_detection.cpp b/src/platforms/evdev/evdev_device_detection.cpp
index f771f1f234..cf844a7f83 100644
--- a/src/platforms/evdev/evdev_device_detection.cpp
+++ b/src/platforms/evdev/evdev_device_detection.cpp
@@ -48,6 +48,16 @@ struct DeviceInfo
uint8_t property_bit_mask[(INPUT_PROP_MAX+1)/8];
};
+namespace
+{
+// On Alpine Linux there's a mismatch between the signed type of the ioctl() request parameter and the
+// unsigned type returned by EVIOCGPROP. (See #692)
+// We use a bit of magic to suppress the compiler diagnostic.
+template<typename Param1>
+auto request_param_type(int (*ioctl)(int, Param1, ...)) -> Param1;
+using ioctl_request_t = decltype(request_param_type(&ioctl));
+}
+
DeviceInfo::DeviceInfo(mir::Fd const& fd)
{
auto const get_bitmask = [&](int bit, size_t size, uint8_t* buf) -> void
@@ -62,7 +72,7 @@ DeviceInfo::DeviceInfo(mir::Fd const& fd)
get_bitmask(EV_ABS, sizeof abs_bit_mask, abs_bit_mask);
get_bitmask(EV_SW, sizeof sw_bit_mask, sw_bit_mask);
- if (ioctl(fd, EVIOCGPROP(sizeof property_bit_mask), property_bit_mask) < 1)
+ if (ioctl(fd, static_cast<ioctl_request_t>(EVIOCGPROP(sizeof property_bit_mask)), property_bit_mask) < 1)
BOOST_THROW_EXCEPTION(
std::system_error(std::error_code(errno, std::system_category()), "Failed to query devices properties"));
}
--
2.20.1