From 63d4da2d0dc94ac534a90163a94cc0684bca2741 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 27 Jun 2023 09:32:00 +0200 Subject: [PATCH] [winpr,collections] ListDictionary_GetKeys --- channels/rdpdr/client/devman.c | 7 +++---- channels/rdpdr/client/rdpdr_main.c | 5 ++--- channels/serial/client/serial_main.c | 18 +++++++++--------- winpr/include/winpr/collections.h | 2 +- .../utils/collections/ListDictionary.c | 17 +++++++---------- 5 files changed, 22 insertions(+), 27 deletions(-) diff --git a/channels/rdpdr/client/devman.c b/channels/rdpdr/client/devman.c index 7e1a5f0e1..75998dfe5 100644 --- a/channels/rdpdr/client/devman.c +++ b/channels/rdpdr/client/devman.c @@ -144,16 +144,15 @@ DEVICE* devman_get_device_by_id(DEVMAN* devman, UINT32 id) DEVICE* devman_get_device_by_type(DEVMAN* devman, UINT32 type) { DEVICE* device = NULL; - ULONG_PTR* keys; - int count, x; + ULONG_PTR* keys = NULL; if (!devman) return NULL; ListDictionary_Lock(devman->devices); - count = ListDictionary_GetKeys(devman->devices, &keys); + const size_t count = ListDictionary_GetKeys(devman->devices, &keys); - for (x = 0; x < count; x++) + for (size_t x = 0; x < count; x++) { DEVICE* cur = (DEVICE*)ListDictionary_GetItemValue(devman->devices, (void*)keys[x]); diff --git a/channels/rdpdr/client/rdpdr_main.c b/channels/rdpdr/client/rdpdr_main.c index 762820486..e7ac68253 100644 --- a/channels/rdpdr/client/rdpdr_main.c +++ b/channels/rdpdr/client/rdpdr_main.c @@ -136,12 +136,11 @@ static BOOL device_foreach(rdpdrPlugin* rdpdr, BOOL abortOnFail, BOOL (*fkt)(ULONG_PTR key, void* element, void* data), void* data) { BOOL rc = TRUE; - int count, x; ULONG_PTR* keys = NULL; ListDictionary_Lock(rdpdr->devman->devices); - count = ListDictionary_GetKeys(rdpdr->devman->devices, &keys); - for (x = 0; x < count; x++) + const size_t count = ListDictionary_GetKeys(rdpdr->devman->devices, &keys); + for (size_t x = 0; x < count; x++) { void* element = ListDictionary_GetItemValue(rdpdr->devman->devices, (void*)keys[x]); if (!fkt(keys[x], element, data)) diff --git a/channels/serial/client/serial_main.c b/channels/serial/client/serial_main.c index c8a9d9a36..56f55700c 100644 --- a/channels/serial/client/serial_main.c +++ b/channels/serial/client/serial_main.c @@ -531,11 +531,10 @@ static void create_irp_thread(SERIAL_DEVICE* serial, IRP* irp) /* Cleaning up termitating and pending irp * threads. See also: irp_thread_func() */ HANDLE cirpThread; - ULONG_PTR* ids; - int i, nbIds; - nbIds = ListDictionary_GetKeys(serial->IrpThreads, &ids); + ULONG_PTR* ids = NULL; + const size_t nbIds = ListDictionary_GetKeys(serial->IrpThreads, &ids); - for (i = 0; i < nbIds; i++) + for (size_t i = 0; i < nbIds; i++) { /* Checking if ids[i] is terminating or pending */ DWORD waitResult; @@ -664,12 +663,13 @@ error_handle: static void terminate_pending_irp_threads(SERIAL_DEVICE* serial) { - ULONG_PTR* ids; - int i, nbIds; - nbIds = ListDictionary_GetKeys(serial->IrpThreads, &ids); - WLog_Print(serial->log, WLOG_DEBUG, "Terminating %d IRP thread(s)", nbIds); + WINPR_ASSERT(serial); - for (i = 0; i < nbIds; i++) + ULONG_PTR* ids = NULL; + const size_t nbIds = ListDictionary_GetKeys(serial->IrpThreads, &ids); + WLog_Print(serial->log, WLOG_DEBUG, "Terminating %" PRIuz " IRP thread(s)", nbIds); + + for (size_t i = 0; i < nbIds; i++) { HANDLE irpThread; ULONG_PTR id = ids[i]; diff --git a/winpr/include/winpr/collections.h b/winpr/include/winpr/collections.h index b37afc39a..5f515ad8e 100644 --- a/winpr/include/winpr/collections.h +++ b/winpr/include/winpr/collections.h @@ -227,7 +227,7 @@ extern "C" WINPR_API void ListDictionary_Clear(wListDictionary* listDictionary); WINPR_API BOOL ListDictionary_Contains(wListDictionary* listDictionary, const void* key); - WINPR_API int ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKeys); + WINPR_API size_t ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKeys); WINPR_API void* ListDictionary_GetItemValue(wListDictionary* listDictionary, const void* key); WINPR_API BOOL ListDictionary_SetItemValue(wListDictionary* listDictionary, const void* key, diff --git a/winpr/libwinpr/utils/collections/ListDictionary.c b/winpr/libwinpr/utils/collections/ListDictionary.c index 719331e02..dc161d45a 100644 --- a/winpr/libwinpr/utils/collections/ListDictionary.c +++ b/winpr/libwinpr/utils/collections/ListDictionary.c @@ -96,24 +96,21 @@ void ListDictionary_Unlock(wListDictionary* listDictionary) * Gets the list of keys as an array */ -int ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKeys) +size_t ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKeys) { - int index; - int count; ULONG_PTR* pKeys = NULL; - wListDictionaryItem* item; if (!ppKeys || !listDictionary) - return -1; + return 0; if (listDictionary->synchronized) EnterCriticalSection(&listDictionary->lock); - count = 0; + size_t count = 0; if (listDictionary->head) { - item = listDictionary->head; + wListDictionaryItem* item = listDictionary->head; while (item) { @@ -122,7 +119,7 @@ int ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKeys) } } - if (count) + if (count > 0) { pKeys = (ULONG_PTR*)calloc(count, sizeof(ULONG_PTR)); @@ -135,11 +132,11 @@ int ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKeys) } } - index = 0; + size_t index = 0; if (listDictionary->head) { - item = listDictionary->head; + wListDictionaryItem* item = listDictionary->head; while (item) {