[PATCH 2/5] hid: Rewrite HidP_MaxDataListLength using enum_value_caps.
Rémi Bernon
rbernon at codeweavers.com
Mon Jun 28 02:21:58 CDT 2021
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
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);
--
2.32.0
More information about the wine-devel
mailing list