wer: Use FIELD_OFFSET to calculate the size of a struct with variable length array

Michael Stefaniuc mstefani at redhat.de
Wed Jun 13 03:39:52 CDT 2012


The old code was allocating more memory than needed.

---
 dlls/wer/main.c |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/dlls/wer/main.c b/dlls/wer/main.c
index ae9ab26..78943eb 100644
--- a/dlls/wer/main.c
+++ b/dlls/wer/main.c
@@ -261,7 +261,6 @@ HRESULT WINAPI WerReportCloseHandle(HREPORT hreport)
 HRESULT WINAPI WerReportCreate(PCWSTR eventtype, WER_REPORT_TYPE reporttype, PWER_REPORT_INFORMATION reportinfo, HREPORT *phandle)
 {
     report_t *report;
-    DWORD len;
 
     TRACE("(%s, %d, %p, %p)\n", debugstr_w(eventtype), reporttype, reportinfo, phandle);
     if (reportinfo) {
@@ -274,9 +273,7 @@ HRESULT WINAPI WerReportCreate(PCWSTR eventtype, WER_REPORT_TYPE reporttype, PWE
         return E_INVALIDARG;
     }
 
-    len = lstrlenW(eventtype) + 1;
-
-    report = heap_alloc_zero(len * sizeof(WCHAR) + sizeof(report_t));
+    report = heap_alloc_zero(FIELD_OFFSET(report_t, eventtype[lstrlenW(eventtype) + 1]));
     if (!report)
         return __HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY);
 
-- 
1.7.7.6



More information about the wine-patches mailing list