[PATCH v4 3/5] winebus.sys: Implement get_string for linux event devices

Aric Stewart <[email protected]> Tue, 7 Nov 2017 08:18:08 -0600
Newsgroups gmane.comp.emulators.wine.patches
Message-ID <[email protected]>
Signed-off-by: Aric Stewart <[email protected]>
---
 dlls/winebus.sys/bus_udev.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)
v4-0003-winebus.sys-Implement-get_string-for-linux-event-de.txt (text/x-patch, 1.2 KB)
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index 0f5a3bfed9..ab03122908 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -862,7 +862,30 @@ static NTSTATUS lnxev_get_reportdescriptor(DEVICE_OBJECT *device, BYTE *buffer,
 
 static NTSTATUS lnxev_get_string(DEVICE_OBJECT *device, DWORD index, WCHAR *buffer, DWORD length)
 {
-    return STATUS_NOT_IMPLEMENTED;
+    struct wine_input_private *ext = input_impl_from_DEVICE_OBJECT(device);
+    char str[255] = {0};
+
+    switch (index)
+    {
+        case HID_STRING_ID_IPRODUCT:
+            ioctl(ext->base.device_fd, EVIOCGNAME(254), str);
+            break;
+        case HID_STRING_ID_IMANUFACTURER:
+            strcpy(str,"evdev");
+            break;
+        case HID_STRING_ID_ISERIALNUMBER:
+            ioctl(ext->base.device_fd, EVIOCGUNIQ(254), str);
+            break;
+        default:
+            ERR("Unhandled string index %i\n", index);
+    }
+
+    if (str[0])
+        MultiByteToWideChar(CP_ACP, 0, str, -1, buffer, length);
+    else
+        buffer[0] = 0;
+
+    return STATUS_SUCCESS;
 }
 
 static NTSTATUS lnxev_begin_report_processing(DEVICE_OBJECT *device)