From: "Rémi Bernon" Subject: [PATCH 2/5] winebus.sys: Avoid process heap allocations on the unix side. Message-Id: <20210917065035.3294478-2-rbernon@codeweavers.com> Date: Fri, 17 Sep 2021 08:50:32 +0200 In-Reply-To: <20210917065035.3294478-1-rbernon@codeweavers.com> References: <20210917065035.3294478-1-rbernon@codeweavers.com> Signed-off-by: Rémi Bernon --- dlls/winebus.sys/bus_iohid.c | 2 +- dlls/winebus.sys/bus_sdl.c | 10 ++++------ dlls/winebus.sys/bus_udev.c | 14 ++++++-------- dlls/winebus.sys/hid.c | 8 ++++---- dlls/winebus.sys/unixlib.c | 16 +++++++++------- 5 files changed, 24 insertions(+), 26 deletions(-) diff --git a/dlls/winebus.sys/bus_iohid.c b/dlls/winebus.sys/bus_iohid.c index 0e36eac880c..70a7cd0b005 100644 --- a/dlls/winebus.sys/bus_iohid.c +++ b/dlls/winebus.sys/bus_iohid.c @@ -172,7 +172,7 @@ static NTSTATUS iohid_device_start(struct unix_device *iface) num = IOHIDDeviceGetProperty(private->device, CFSTR(kIOHIDMaxInputReportSizeKey)); length = CFNumberToDWORD(num); - private->buffer = RtlAllocateHeap(GetProcessHeap(), 0, length); + private->buffer = malloc(length); IOHIDDeviceRegisterInputReportCallback(private->device, private->buffer, length, handle_IOHIDDeviceIOHIDReportCallback, iface); return STATUS_SUCCESS; diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c index 79dff5007c0..956340faf02 100644 --- a/dlls/winebus.sys/bus_sdl.c +++ b/dlls/winebus.sys/bus_sdl.c @@ -374,8 +374,7 @@ static NTSTATUS build_report_descriptor(struct platform_private *ext) return STATUS_NO_MEMORY; ext->buffer_length = report_size; - if (!(ext->report_buffer = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, report_size))) - goto failed; + if (!(ext->report_buffer = calloc(1, report_size))) goto failed; /* Initialize axis in the report */ for (i = 0; i < axis_count; i++) @@ -386,7 +385,7 @@ static NTSTATUS build_report_descriptor(struct platform_private *ext) return STATUS_SUCCESS; failed: - RtlFreeHeap(GetProcessHeap(), 0, ext->report_buffer); + free(ext->report_buffer); hid_descriptor_free(&ext->desc); return STATUS_NO_MEMORY; } @@ -475,8 +474,7 @@ static NTSTATUS build_mapped_report_descriptor(struct platform_private *ext) if (!hid_descriptor_end(&ext->desc)) return STATUS_NO_MEMORY; - if (!(ext->report_buffer = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, ext->buffer_length))) - goto failed; + if (!(ext->report_buffer = calloc(1, ext->buffer_length))) goto failed; /* Initialize axis in the report */ for (i = SDL_CONTROLLER_AXIS_LEFTX; i < SDL_CONTROLLER_AXIS_MAX; i++) @@ -491,7 +489,7 @@ static NTSTATUS build_mapped_report_descriptor(struct platform_private *ext) return STATUS_SUCCESS; failed: - RtlFreeHeap(GetProcessHeap(), 0, ext->report_buffer); + free(ext->report_buffer); hid_descriptor_free(&ext->desc); return STATUS_NO_MEMORY; } diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c index c859d5df546..928548b8893 100644 --- a/dlls/winebus.sys/bus_udev.c +++ b/dlls/winebus.sys/bus_udev.c @@ -548,10 +548,8 @@ static NTSTATUS build_report_descriptor(struct wine_input_private *ext, struct u TRACE("Report will be %i bytes\n", report_size); ext->buffer_length = report_size; - if (!(ext->current_report_buffer = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, report_size))) - goto failed; - if (!(ext->last_report_buffer = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, report_size))) - goto failed; + if (!(ext->current_report_buffer = calloc(1, report_size))) goto failed; + if (!(ext->last_report_buffer = calloc(1, report_size))) goto failed; ext->report_state = FIRST; /* Initialize axis in the report */ @@ -562,8 +560,8 @@ static NTSTATUS build_report_descriptor(struct wine_input_private *ext, struct u return STATUS_SUCCESS; failed: - RtlFreeHeap(GetProcessHeap(), 0, ext->current_report_buffer); - RtlFreeHeap(GetProcessHeap(), 0, ext->last_report_buffer); + free(ext->current_report_buffer); + free(ext->last_report_buffer); hid_descriptor_free(&ext->desc); return STATUS_NO_MEMORY; } @@ -811,8 +809,8 @@ static void lnxev_device_destroy(struct unix_device *iface) { struct wine_input_private *ext = input_impl_from_unix_device(iface); - RtlFreeHeap(GetProcessHeap(), 0, ext->current_report_buffer); - RtlFreeHeap(GetProcessHeap(), 0, ext->last_report_buffer); + free(ext->current_report_buffer); + free(ext->last_report_buffer); hid_descriptor_free(&ext->desc); udev_device_unref(ext->base.udev_device); diff --git a/dlls/winebus.sys/hid.c b/dlls/winebus.sys/hid.c index 959cbf7c428..0ad5efa2775 100644 --- a/dlls/winebus.sys/hid.c +++ b/dlls/winebus.sys/hid.c @@ -23,6 +23,7 @@ #endif #include +#include #include "ntstatus.h" #define WIN32_NO_STATUS @@ -40,13 +41,12 @@ static BOOL hid_descriptor_append(struct hid_descriptor *desc, const BYTE *buffe if (desc->size + size > desc->max_size) { desc->max_size = max(desc->max_size * 3 / 2, desc->size + size); - if (!desc->data) desc->data = RtlAllocateHeap(GetProcessHeap(), 0, desc->max_size); - else desc->data = RtlReAllocateHeap(GetProcessHeap(), 0, tmp, desc->max_size); + desc->data = realloc(tmp, desc->max_size); } if (!desc->data) { - RtlFreeHeap(GetProcessHeap(), 0, tmp); + free(tmp); return FALSE; } @@ -93,7 +93,7 @@ BOOL hid_descriptor_end(struct hid_descriptor *desc) void hid_descriptor_free(struct hid_descriptor *desc) { - RtlFreeHeap(GetProcessHeap(), 0, desc->data); + free(desc->data); } BOOL hid_descriptor_add_buttons(struct hid_descriptor *desc, USAGE usage_page, diff --git a/dlls/winebus.sys/unixlib.c b/dlls/winebus.sys/unixlib.c index f21b5a25b04..f33b7cacfe3 100644 --- a/dlls/winebus.sys/unixlib.c +++ b/dlls/winebus.sys/unixlib.c @@ -23,6 +23,8 @@ #include "config.h" #include +#include + #include "ntstatus.h" #define WIN32_NO_STATUS #include "windef.h" @@ -257,7 +259,7 @@ void *unix_device_create(const struct unix_device_vtbl *vtbl, SIZE_T size) { struct unix_device *iface; - if (!(iface = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, size))) return NULL; + if (!(iface = calloc(1, size))) return NULL; iface->vtbl = vtbl; iface->ref = 1; @@ -269,7 +271,7 @@ static void unix_device_decref(struct unix_device *iface) if (!InterlockedDecrement(&iface->ref)) { iface->vtbl->destroy(iface); - RtlFreeHeap(GetProcessHeap(), 0, iface); + free(iface); } } @@ -357,14 +359,14 @@ void bus_event_queue_destroy(struct list *queue) LIST_FOR_EACH_ENTRY_SAFE(event, next, queue, struct bus_event, entry) { bus_event_cleanup(event); - RtlFreeHeap(GetProcessHeap(), 0, event); + free(event); } } BOOL bus_event_queue_device_removed(struct list *queue, struct unix_device *device) { ULONG size = sizeof(struct bus_event); - struct bus_event *event = RtlAllocateHeap(GetProcessHeap(), 0, size); + struct bus_event *event = malloc(size); if (!event) return FALSE; if (unix_device_incref(device) == 1) return FALSE; /* being destroyed */ @@ -379,7 +381,7 @@ BOOL bus_event_queue_device_removed(struct list *queue, struct unix_device *devi BOOL bus_event_queue_device_created(struct list *queue, struct unix_device *device, struct device_desc *desc) { ULONG size = sizeof(struct bus_event); - struct bus_event *event = RtlAllocateHeap(GetProcessHeap(), 0, size); + struct bus_event *event = malloc(size); if (!event) return FALSE; if (unix_device_incref(device) == 1) return FALSE; /* being destroyed */ @@ -395,7 +397,7 @@ BOOL bus_event_queue_device_created(struct list *queue, struct unix_device *devi BOOL bus_event_queue_input_report(struct list *queue, struct unix_device *device, BYTE *report, USHORT length) { ULONG size = offsetof(struct bus_event, input_report.buffer[length]); - struct bus_event *event = RtlAllocateHeap(GetProcessHeap(), 0, size); + struct bus_event *event = malloc(size); if (!event) return FALSE; if (unix_device_incref(device) == 1) return FALSE; /* being destroyed */ @@ -424,7 +426,7 @@ BOOL bus_event_queue_pop(struct list *queue, struct bus_event *event) else size = offsetof(struct bus_event, input_report.buffer[event->input_report.length]); memcpy(event, tmp, size); - RtlFreeHeap(GetProcessHeap(), 0, tmp); + free(tmp); return TRUE; } -- 2.33.0