[PATCH] dwrite: Use more appropriate allocation helpers.

Nikolay Sivov nsivov at codeweavers.com
Wed Feb 13 01:47:10 CST 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/dwrite/analyzer.c | 20 ++++++++++----------
 dlls/dwrite/bidi.c     |  2 +-
 dlls/dwrite/font.c     | 22 +++++++++++-----------
 dlls/dwrite/layout.c   | 32 ++++++++++++++++----------------
 dlls/dwrite/main.c     |  7 ++++---
 5 files changed, 42 insertions(+), 41 deletions(-)

diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index 0d8305dbef..ca6dca1e4d 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -448,7 +448,7 @@ static HRESULT analyze_linebreaks(const WCHAR *text, UINT32 count, DWRITE_LINE_B
     short *break_class;
     int i, j;
 
-    break_class = heap_alloc(count*sizeof(short));
+    break_class = heap_calloc(count, sizeof(*break_class));
     if (!break_class)
         return E_OUTOFMEMORY;
 
@@ -937,8 +937,8 @@ static HRESULT WINAPI dwritetextanalyzer_AnalyzeBidi(IDWriteTextAnalyzer2 *iface
     if (FAILED(hr))
         return hr;
 
-    levels = heap_alloc(length*sizeof(*levels));
-    explicit = heap_alloc(length*sizeof(*explicit));
+    levels = heap_calloc(length, sizeof(*levels));
+    explicit = heap_calloc(length, sizeof(*explicit));
 
     if (!levels || !explicit) {
         hr = E_OUTOFMEMORY;
@@ -1013,7 +1013,7 @@ static HRESULT WINAPI dwritetextanalyzer_AnalyzeLineBreakpoints(IDWriteTextAnaly
     if (len < length) {
         UINT32 read;
 
-        buff = heap_alloc(length*sizeof(WCHAR));
+        buff = heap_calloc(length, sizeof(*buff));
         if (!buff)
             return E_OUTOFMEMORY;
         memcpy(buff, text, len*sizeof(WCHAR));
@@ -1032,7 +1032,7 @@ static HRESULT WINAPI dwritetextanalyzer_AnalyzeLineBreakpoints(IDWriteTextAnaly
         text = buff;
     }
 
-    breakpoints = heap_alloc(length*sizeof(*breakpoints));
+    breakpoints = heap_calloc(length, sizeof(*breakpoints));
     if (!breakpoints) {
         hr = E_OUTOFMEMORY;
         goto done;
@@ -1176,7 +1176,7 @@ static HRESULT WINAPI dwritetextanalyzer_GetGlyphs(IDWriteTextAnalyzer2 *iface,
     if (max_glyph_count < length)
         return E_NOT_SUFFICIENT_BUFFER;
 
-    string = heap_alloc(sizeof(WCHAR)*length);
+    string = heap_calloc(length, sizeof(*string));
     if (!string)
         return E_OUTOFMEMORY;
 
@@ -1432,7 +1432,7 @@ static HRESULT apply_cluster_spacing(float leading_spacing, float trailing_spaci
             break;
     }
 
-    deltas = heap_alloc((end - start + 1) * sizeof(*deltas));
+    deltas = heap_calloc(end - start + 1, sizeof(*deltas));
     if (!deltas)
         return E_OUTOFMEMORY;
 
@@ -1677,7 +1677,7 @@ static HRESULT WINAPI dwritetextanalyzer1_GetTextComplexity(IDWriteTextAnalyzer2
 
     /* fetch indices */
     if (*is_simple && indices) {
-        UINT32 *codepoints = heap_alloc(*len_read*sizeof(UINT32));
+        UINT32 *codepoints = heap_calloc(*len_read, sizeof(*codepoints));
         if (!codepoints)
             return E_OUTOFMEMORY;
 
@@ -2305,7 +2305,7 @@ static HRESULT WINAPI fontfallbackbuilder_AddMapping(IDWriteFontFallbackBuilder
         struct fallback_mapping *mappings;
 
         if (fallbackbuilder->mappings_capacity == 0) {
-            if ((mappings = heap_alloc(sizeof(*fallbackbuilder->mappings) * 16)))
+            if ((mappings = heap_calloc(16, sizeof(*mappings))))
                 fallbackbuilder->mappings_capacity = 16;
         }
         else {
@@ -2321,7 +2321,7 @@ static HRESULT WINAPI fontfallbackbuilder_AddMapping(IDWriteFontFallbackBuilder
 
     mapping = &fallbackbuilder->mappings[fallbackbuilder->mappings_count++];
 
-    mapping->ranges = heap_alloc(sizeof(*mapping->ranges) * ranges_count);
+    mapping->ranges = heap_calloc(ranges_count, sizeof(*mapping->ranges));
     memcpy(mapping->ranges, ranges, sizeof(*mapping->ranges) * ranges_count);
     mapping->ranges_count = ranges_count;
     mapping->families = heap_alloc_zero(sizeof(*mapping->families) * families_count);
diff --git a/dlls/dwrite/bidi.c b/dlls/dwrite/bidi.c
index d4ee2ca0f7..1369316d22 100644
--- a/dlls/dwrite/bidi.c
+++ b/dlls/dwrite/bidi.c
@@ -964,7 +964,7 @@ static HRESULT bidi_compute_isolating_runs_set(UINT8 baselevel, UINT8 *classes,
     HRESULT hr = S_OK;
     Run *runs;
 
-    runs = heap_alloc(count * sizeof(Run));
+    runs = heap_calloc(count, sizeof(*runs));
     if (!runs)
         return E_OUTOFMEMORY;
 
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c
index f50133d18c..948c1dfa05 100644
--- a/dlls/dwrite/font.c
+++ b/dlls/dwrite/font.c
@@ -2227,7 +2227,7 @@ static HRESULT WINAPI dwritefontfamily_GetMatchingFonts(IDWriteFontFamily1 *ifac
         return E_OUTOFMEMORY;
 
     /* Allocate as many as family has, not all of them will be necessary used. */
-    fonts->fonts = heap_alloc(sizeof(*fonts->fonts) * This->data->font_count);
+    fonts->fonts = heap_calloc(This->data->font_count, sizeof(*fonts->fonts));
     if (!fonts->fonts) {
         heap_free(fonts);
         return E_OUTOFMEMORY;
@@ -2718,7 +2718,7 @@ static HRESULT init_font_collection(struct dwrite_fontcollection *collection, BO
     collection->ref = 1;
     collection->family_count = 0;
     collection->family_alloc = is_system ? 30 : 5;
-    collection->family_data = heap_alloc(sizeof(*collection->family_data) * collection->family_alloc);
+    collection->family_data = heap_calloc(collection->family_alloc, sizeof(*collection->family_data));
     if (!collection->family_data)
         return E_OUTOFMEMORY;
 
@@ -3567,7 +3567,7 @@ static HRESULT init_fontfamily_data(IDWriteLocalizedStrings *familyname, struct
     data->has_oblique_face = 0;
     data->has_italic_face = 0;
 
-    data->fonts = heap_alloc(sizeof(*data->fonts)*data->font_alloc);
+    data->fonts = heap_calloc(data->font_alloc, sizeof(*data->fonts));
     if (!data->fonts) {
         heap_free(data);
         return E_OUTOFMEMORY;
@@ -5475,8 +5475,8 @@ HRESULT create_glyphrunanalysis(const struct glyphrunanalysis_desc *desc, IDWrit
     SetRectEmpty(&analysis->bounds);
     analysis->run = *desc->run;
     IDWriteFontFace_AddRef(analysis->run.fontFace);
-    analysis->glyphs = heap_alloc(desc->run->glyphCount * sizeof(*analysis->glyphs));
-    analysis->origins = heap_alloc(desc->run->glyphCount * sizeof(*analysis->origins));
+    analysis->glyphs = heap_calloc(desc->run->glyphCount, sizeof(*analysis->glyphs));
+    analysis->origins = heap_calloc(desc->run->glyphCount, sizeof(*analysis->origins));
 
     if (!analysis->glyphs || !analysis->origins) {
         heap_free(analysis->glyphs);
@@ -5814,12 +5814,12 @@ HRESULT create_colorglyphenum(float originX, float originY, const DWRITE_GLYPH_R
         return DWRITE_E_NOCOLOR;
     }
 
-    colorglyphenum->advances = heap_alloc(run->glyphCount * sizeof(FLOAT));
-    colorglyphenum->color_advances = heap_alloc(run->glyphCount * sizeof(FLOAT));
-    colorglyphenum->glyphindices = heap_alloc(run->glyphCount * sizeof(UINT16));
+    colorglyphenum->advances = heap_calloc(run->glyphCount, sizeof(*colorglyphenum->advances));
+    colorglyphenum->color_advances = heap_calloc(run->glyphCount, sizeof(*colorglyphenum->color_advances));
+    colorglyphenum->glyphindices = heap_calloc(run->glyphCount, sizeof(*colorglyphenum->glyphindices));
     if (run->glyphOffsets) {
-        colorglyphenum->offsets = heap_alloc(run->glyphCount * sizeof(*colorglyphenum->offsets));
-        colorglyphenum->color_offsets = heap_alloc(run->glyphCount * sizeof(*colorglyphenum->color_offsets));
+        colorglyphenum->offsets = heap_calloc(run->glyphCount, sizeof(*colorglyphenum->offsets));
+        colorglyphenum->color_offsets = heap_calloc(run->glyphCount, sizeof(*colorglyphenum->color_offsets));
         memcpy(colorglyphenum->offsets, run->glyphOffsets, run->glyphCount * sizeof(*run->glyphOffsets));
     }
 
@@ -6311,7 +6311,7 @@ static HRESULT WINAPI inmemoryfontfileloader_CreateInMemoryFontFileReference(IDW
         }
         else {
             loader->capacity = 16;
-            loader->streams = heap_alloc(loader->capacity * sizeof(*loader->streams));
+            loader->streams = heap_calloc(loader->capacity, sizeof(*loader->streams));
         }
     }
 
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
index f27fe9fbec..de79fd4c7f 100644
--- a/dlls/dwrite/layout.c
+++ b/dlls/dwrite/layout.c
@@ -594,7 +594,7 @@ static HRESULT layout_update_breakpoints_range(struct dwrite_textlayout *layout,
         after = before = DWRITE_BREAK_CONDITION_NEUTRAL;
 
     if (!layout->actual_breakpoints) {
-        layout->actual_breakpoints = heap_alloc(sizeof(DWRITE_LINE_BREAKPOINT)*layout->len);
+        layout->actual_breakpoints = heap_calloc(layout->len, sizeof(*layout->actual_breakpoints));
         if (!layout->actual_breakpoints)
             return E_OUTOFMEMORY;
         memcpy(layout->actual_breakpoints, layout->nominal_breakpoints, sizeof(DWRITE_LINE_BREAKPOINT)*layout->len);
@@ -933,15 +933,15 @@ static HRESULT layout_shape_run(struct dwrite_textlayout *layout, struct regular
 
     range = get_layout_range_by_pos(layout, run->descr.textPosition);
     run->descr.localeName = range->locale;
-    run->clustermap = heap_alloc(run->descr.stringLength * sizeof(*run->clustermap));
+    run->clustermap = heap_calloc(run->descr.stringLength, sizeof(*run->clustermap));
 
     max_count = 3 * run->descr.stringLength / 2 + 16;
-    run->glyphs = heap_alloc(max_count * sizeof(*run->glyphs));
+    run->glyphs = heap_calloc(max_count, sizeof(*run->glyphs));
     if (!run->clustermap || !run->glyphs)
         return E_OUTOFMEMORY;
 
-    text_props = heap_alloc(run->descr.stringLength * sizeof(*text_props));
-    glyph_props = heap_alloc(max_count * sizeof(*glyph_props));
+    text_props = heap_calloc(run->descr.stringLength, sizeof(*text_props));
+    glyph_props = heap_calloc(max_count, sizeof(*glyph_props));
     if (!text_props || !glyph_props) {
         heap_free(text_props);
         heap_free(glyph_props);
@@ -960,8 +960,8 @@ static HRESULT layout_shape_run(struct dwrite_textlayout *layout, struct regular
 
             max_count = run->glyphcount;
 
-            run->glyphs = heap_alloc(max_count * sizeof(*run->glyphs));
-            glyph_props = heap_alloc(max_count * sizeof(*glyph_props));
+            run->glyphs = heap_calloc(max_count, sizeof(*run->glyphs));
+            glyph_props = heap_calloc(max_count, sizeof(*glyph_props));
             if (!run->glyphs || !glyph_props) {
                 hr = E_OUTOFMEMORY;
                 break;
@@ -983,8 +983,8 @@ static HRESULT layout_shape_run(struct dwrite_textlayout *layout, struct regular
     run->run.glyphIndices = run->glyphs;
     run->descr.clusterMap = run->clustermap;
 
-    run->advances = heap_alloc(run->glyphcount * sizeof(*run->advances));
-    run->offsets = heap_alloc(run->glyphcount * sizeof(*run->offsets));
+    run->advances = heap_calloc(run->glyphcount, sizeof(*run->advances));
+    run->offsets = heap_calloc(run->glyphcount, sizeof(*run->offsets));
     if (!run->advances || !run->offsets)
         return E_OUTOFMEMORY;
 
@@ -1034,8 +1034,8 @@ static HRESULT layout_compute_runs(struct dwrite_textlayout *layout)
 
     /* Cluster data arrays are allocated once, assuming one text position per cluster. */
     if (!layout->clustermetrics && layout->len) {
-        layout->clustermetrics = heap_alloc(layout->len*sizeof(*layout->clustermetrics));
-        layout->clusters = heap_alloc(layout->len*sizeof(*layout->clusters));
+        layout->clustermetrics = heap_calloc(layout->len, sizeof(*layout->clustermetrics));
+        layout->clusters = heap_calloc(layout->len, sizeof(*layout->clusters));
         if (!layout->clustermetrics || !layout->clusters) {
             heap_free(layout->clustermetrics);
             heap_free(layout->clusters);
@@ -1122,7 +1122,7 @@ static HRESULT layout_compute(struct dwrite_textlayout *layout)
     if (!layout->nominal_breakpoints) {
         IDWriteTextAnalyzer *analyzer;
 
-        layout->nominal_breakpoints = heap_alloc(layout->len * sizeof(*layout->nominal_breakpoints));
+        layout->nominal_breakpoints = heap_calloc(layout->len, sizeof(*layout->nominal_breakpoints));
         if (!layout->nominal_breakpoints)
             return E_OUTOFMEMORY;
 
@@ -1291,7 +1291,7 @@ static HRESULT layout_add_effective_run(struct dwrite_textlayout *layout, const
     length = layout->clusters[last_cluster].position - layout->clusters[first_cluster].position +
         layout->clustermetrics[last_cluster].length;
 
-    run->clustermap = heap_alloc(sizeof(UINT16)*length);
+    run->clustermap = heap_calloc(length, sizeof(*run->clustermap));
     if (!run->clustermap) {
         heap_free(run);
         return E_OUTOFMEMORY;
@@ -1386,8 +1386,8 @@ static HRESULT layout_set_line_metrics(struct dwrite_textlayout *layout, DWRITE_
 
     if (!layout->line_alloc) {
         layout->line_alloc = 5;
-        layout->linemetrics = heap_alloc(layout->line_alloc * sizeof(*layout->linemetrics));
-        layout->lines = heap_alloc(layout->line_alloc * sizeof(*layout->lines));
+        layout->linemetrics = heap_calloc(layout->line_alloc, sizeof(*layout->linemetrics));
+        layout->lines = heap_calloc(layout->line_alloc, sizeof(*layout->lines));
         if (!layout->linemetrics || !layout->lines) {
             heap_free(layout->linemetrics);
             heap_free(layout->lines);
@@ -5787,7 +5787,7 @@ HRESULT create_typography(IDWriteTypography **ret)
     typography->allocated = 2;
     typography->count = 0;
 
-    typography->features = heap_alloc(typography->allocated*sizeof(DWRITE_FONT_FEATURE));
+    typography->features = heap_calloc(typography->allocated, sizeof(*typography->features));
     if (!typography->features) {
         heap_free(typography);
         return E_OUTOFMEMORY;
diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c
index 522bac84fe..1816fbc8f1 100644
--- a/dlls/dwrite/main.c
+++ b/dlls/dwrite/main.c
@@ -483,13 +483,14 @@ HRESULT clone_localizedstring(IDWriteLocalizedStrings *iface, IDWriteLocalizedSt
         return S_FALSE;
 
     strings = impl_from_IDWriteLocalizedStrings(iface);
-    strings_clone = heap_alloc(sizeof(struct localizedstrings));
-    if (!strings_clone) return E_OUTOFMEMORY;
+    strings_clone = heap_alloc(sizeof(*strings_clone));
+    if (!strings_clone)
+        return E_OUTOFMEMORY;
 
     strings_clone->IDWriteLocalizedStrings_iface.lpVtbl = &localizedstringsvtbl;
     strings_clone->ref = 1;
     strings_clone->count = strings->count;
-    strings_clone->data = heap_alloc(sizeof(struct localizedpair) * strings_clone->count);
+    strings_clone->data = heap_calloc(strings_clone->count, sizeof(*strings_clone->data));
     if (!strings_clone->data) {
         heap_free(strings_clone);
         return E_OUTOFMEMORY;
-- 
2.20.1




More information about the wine-devel mailing list