Rémi Bernon : hid: Rewrite HidP_MaxDataListLength using enum_value_caps.
Alexandre Julliard
julliard at winehq.org
Mon Jun 28 16:49:35 CDT 2021
Module: wine
Branch: master
Commit: 1c4e7a00a309641ec1c8d6efce751f488b224c67
URL: https://source.winehq.org/git/wine.git/?a=commit;h=1c4e7a00a309641ec1c8d6efce751f488b224c67
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Mon Jun 28 09:21:58 2021 +0200
hid: Rewrite HidP_MaxDataListLength using enum_value_caps.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/hid/hidp.c | 32 ++++++++++++++++----------------
dlls/ntoskrnl.exe/tests/ntoskrnl.c | 1 -
2 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/dlls/hid/hidp.c b/dlls/hid/hidp.c
index 6261c3c2f68..afd69281f0d 100644
--- a/dlls/hid/hidp.c
+++ b/dlls/hid/hidp.c
@@ -679,24 +679,24 @@ NTSTATUS WINAPI HidP_GetUsagesEx( HIDP_REPORT_TYPE report_type, USHORT collectio
return status;
}
-ULONG WINAPI HidP_MaxDataListLength(HIDP_REPORT_TYPE ReportType, PHIDP_PREPARSED_DATA PreparsedData)
+static NTSTATUS count_data( const struct hid_value_caps *caps, void *user )
{
- WINE_HIDP_PREPARSED_DATA *data = (WINE_HIDP_PREPARSED_DATA *)PreparsedData;
- TRACE("(%i, %p)\n", ReportType, PreparsedData);
- if (data->magic != HID_MAGIC)
- return 0;
+ if (caps->is_range || HID_VALUE_CAPS_IS_BUTTON( caps )) *(ULONG *)user += caps->report_count;
+ else *(ULONG *)user += 1;
+ return HIDP_STATUS_SUCCESS;
+}
- switch(ReportType)
- {
- case HidP_Input:
- return data->caps.NumberInputDataIndices;
- case HidP_Output:
- return data->caps.NumberOutputDataIndices;
- case HidP_Feature:
- return data->caps.NumberFeatureDataIndices;
- default:
- return 0;
- }
+ULONG WINAPI HidP_MaxDataListLength( HIDP_REPORT_TYPE report_type, PHIDP_PREPARSED_DATA preparsed_data )
+{
+ WINE_HIDP_PREPARSED_DATA *preparsed = (WINE_HIDP_PREPARSED_DATA *)preparsed_data;
+ struct caps_filter filter = {};
+ USHORT limit = -1;
+ ULONG count = 0;
+
+ TRACE( "report_type %d, preparsed_data %p.\n", report_type, preparsed_data );
+
+ enum_value_caps( preparsed, report_type, 0, &filter, count_data, &count, &limit );
+ return count;
}
NTSTATUS WINAPI HidP_GetData(HIDP_REPORT_TYPE ReportType, HIDP_DATA *DataList, ULONG *DataLength,
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
index 753957a8ac6..101366bf50b 100644
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
@@ -2229,7 +2229,6 @@ static void test_hidp(HANDLE file, int report_id)
value = HidP_MaxDataListLength(HidP_Feature + 1, preparsed_data);
ok(value == 0, "HidP_MaxDataListLength(HidP_Feature + 1) returned %d, expected %d\n", value, 0);
value = HidP_MaxDataListLength(HidP_Input, preparsed_data);
- todo_wine
ok(value == 50, "HidP_MaxDataListLength(HidP_Input) returned %d, expected %d\n", value, 50);
value = HidP_MaxDataListLength(HidP_Output, preparsed_data);
ok(value == 0, "HidP_MaxDataListLength(HidP_Output) returned %d, expected %d\n", value, 0);
More information about the wine-cvs
mailing list