Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/dwrite/dwrite_private.h | 10 +++++----- dlls/dwrite/font.c | 27 --------------------------- dlls/dwrite/freetype.c | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h index 8536e3c6a36..2408251717b 100644 --- a/dlls/dwrite/dwrite_private.h +++ b/dlls/dwrite/dwrite_private.h @@ -97,7 +97,11 @@ static inline BOOL dwrite_array_reserve(void **elements, size_t *capacity, size_ if (new_capacity < count) new_capacity = max_capacity;
- if (!(new_elements = heap_realloc(*elements, new_capacity * size))) + if (!*elements) + new_elements = RtlAllocateHeap(GetProcessHeap(), 0, new_capacity * size); + else + new_elements = RtlReAllocateHeap(GetProcessHeap(), 0, *elements, new_capacity * size); + if (!new_elements) return FALSE;
*elements = new_elements; @@ -481,10 +485,6 @@ struct dwrite_outline } points; };
-extern int dwrite_outline_push_tag(struct dwrite_outline *outline, unsigned char tag) DECLSPEC_HIDDEN; -extern int dwrite_outline_push_points(struct dwrite_outline *outline, const D2D1_POINT_2F *points, - unsigned int count) DECLSPEC_HIDDEN; - /* Glyph shaping */ enum SCRIPT_JUSTIFY { diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 57c64e4622d..2fd6ad90f1f 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -832,33 +832,6 @@ static void WINAPI dwritefontface_ReleaseFontTable(IDWriteFontFace5 *iface, void IDWriteFontFileStream_ReleaseFileFragment(fontface->stream, table_context); }
-int dwrite_outline_push_tag(struct dwrite_outline *outline, unsigned char tag) -{ - if (!dwrite_array_reserve((void **)&outline->tags.values, &outline->tags.size, outline->tags.count + 1, - sizeof(*outline->tags.values))) - { - return 1; - } - - outline->tags.values[outline->tags.count++] = tag; - - return 0; -} - -int dwrite_outline_push_points(struct dwrite_outline *outline, const D2D1_POINT_2F *points, unsigned int count) -{ - if (!dwrite_array_reserve((void **)&outline->points.values, &outline->points.size, outline->points.count + count, - sizeof(*outline->points.values))) - { - return 1; - } - - memcpy(&outline->points.values[outline->points.count], points, sizeof(*points) * count); - outline->points.count += count; - - return 0; -} - static void apply_outline_point_offset(const D2D1_POINT_2F *src, const D2D1_POINT_2F *offset, D2D1_POINT_2F *dst) { diff --git a/dlls/dwrite/freetype.c b/dlls/dwrite/freetype.c index efa0f24d96c..128388c9c86 100644 --- a/dlls/dwrite/freetype.c +++ b/dlls/dwrite/freetype.c @@ -267,6 +267,33 @@ static inline void ft_vector_to_d2d_point(const FT_Vector *v, D2D1_POINT_2F *p) p->y = v->y / 64.0f; }
+static int dwrite_outline_push_tag(struct dwrite_outline *outline, unsigned char tag) +{ + if (!dwrite_array_reserve((void **)&outline->tags.values, &outline->tags.size, outline->tags.count + 1, + sizeof(*outline->tags.values))) + { + return 1; + } + + outline->tags.values[outline->tags.count++] = tag; + + return 0; +} + +static int dwrite_outline_push_points(struct dwrite_outline *outline, const D2D1_POINT_2F *points, unsigned int count) +{ + if (!dwrite_array_reserve((void **)&outline->points.values, &outline->points.size, outline->points.count + count, + sizeof(*outline->points.values))) + { + return 1; + } + + memcpy(&outline->points.values[outline->points.count], points, sizeof(*points) * count); + outline->points.count += count; + + return 0; +} + static int decompose_beginfigure(struct decompose_context *ctxt) { D2D1_POINT_2F point;
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/dwrite/font.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 2fd6ad90f1f..68d3b1256ea 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -3910,16 +3910,17 @@ static BOOL font_apply_differentiation_rules(struct dwrite_font_data *font, WCHA weight = font_extract_weight(&tokens, font->weight, &weight_name);
/* resolve weight */ - if (weight != font->weight) { + if (weight != font->weight) + { if (!(weight < DWRITE_FONT_WEIGHT_NORMAL && font->weight < DWRITE_FONT_WEIGHT_NORMAL) && !(weight > DWRITE_FONT_WEIGHT_MEDIUM && font->weight > DWRITE_FONT_WEIGHT_MEDIUM) && !((weight == DWRITE_FONT_WEIGHT_NORMAL && font->weight == DWRITE_FONT_WEIGHT_MEDIUM) || (weight == DWRITE_FONT_WEIGHT_MEDIUM && font->weight == DWRITE_FONT_WEIGHT_NORMAL)) && - !(abs(weight - font->weight) <= 150 && + !(abs((int)weight - (int)font->weight) <= 150 && font->weight != DWRITE_FONT_WEIGHT_NORMAL && font->weight != DWRITE_FONT_WEIGHT_MEDIUM && - font->weight != DWRITE_FONT_WEIGHT_BOLD)) { - + font->weight != DWRITE_FONT_WEIGHT_BOLD)) + { font->weight = weight; } }
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/dwrite/layout.c | 49 ++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 20 deletions(-)
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index 06ebcb8057c..eb6280d7fc1 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -3925,33 +3925,45 @@ static void layout_get_erun_bbox(struct dwrite_textlayout *layout, struct layout { const struct regular_layout_run *regular = &run->run->u.regular; UINT32 start_glyph = regular->clustermap[run->start]; - const DWRITE_GLYPH_RUN *glyph_run = ®ular->run; - D2D1_POINT_2F origin = { 0 }; - float rtl_factor; - UINT32 i; + D2D1_POINT_2F baseline_origin = { 0 }, *origins; + DWRITE_GLYPH_RUN glyph_run; + unsigned int i; + HRESULT hr;
if (run->bbox.top == run->bbox.bottom) { struct dwrite_glyphbitmap glyph_bitmap; RECT *bbox;
+ glyph_run = regular->run; + glyph_run.glyphCount = run->glyphcount; + glyph_run.glyphIndices = ®ular->run.glyphIndices[start_glyph]; + glyph_run.glyphAdvances = ®ular->run.glyphAdvances[start_glyph]; + glyph_run.glyphOffsets = ®ular->run.glyphOffsets[start_glyph]; + memset(&glyph_bitmap, 0, sizeof(glyph_bitmap)); - glyph_bitmap.key = glyph_run->fontFace; - glyph_bitmap.simulations = IDWriteFontFace_GetSimulations(glyph_run->fontFace); - glyph_bitmap.emsize = glyph_run->fontEmSize; + glyph_bitmap.key = glyph_run.fontFace; + glyph_bitmap.simulations = IDWriteFontFace_GetSimulations(glyph_run.fontFace); + glyph_bitmap.emsize = glyph_run.fontEmSize; glyph_bitmap.nohint = layout->measuringmode == DWRITE_MEASURING_MODE_NATURAL;
bbox = &glyph_bitmap.bbox;
- rtl_factor = glyph_run->bidiLevel & 1 ? -1.0f : 1.0f; - for (i = 0; i < run->glyphcount; i++) { - D2D1_RECT_F glyph_bbox; + if (!(origins = heap_calloc(glyph_run.glyphCount, sizeof(*origins)))) + return;
- /* FIXME: take care of vertical/rtl */ - if (glyph_run->bidiLevel & 1) - origin.x -= glyph_run->glyphAdvances[i + start_glyph]; + if (FAILED(hr = compute_glyph_origins(&glyph_run, layout->measuringmode, baseline_origin, &layout->transform, origins))) + { + WARN("Failed to compute glyph origins, hr %#x.\n", hr); + heap_free(origins); + return; + }
- glyph_bitmap.glyph = glyph_run->glyphIndices[i + start_glyph]; + for (i = 0; i < glyph_run.glyphCount; ++i) + { + D2D1_RECT_F glyph_bbox; + + glyph_bitmap.glyph = glyph_run.glyphIndices[i]; dwrite_fontface_get_glyph_bbox(&glyph_bitmap);
glyph_bbox.left = bbox->left; @@ -3959,14 +3971,11 @@ static void layout_get_erun_bbox(struct dwrite_textlayout *layout, struct layout glyph_bbox.right = bbox->right; glyph_bbox.bottom = bbox->bottom;
- d2d_rect_offset(&glyph_bbox, origin.x + rtl_factor * glyph_run->glyphOffsets[i + start_glyph].advanceOffset, - origin.y - glyph_run->glyphOffsets[i + start_glyph].ascenderOffset); - + d2d_rect_offset(&glyph_bbox, origins[i].x, origins[i].y); d2d_rect_union(&run->bbox, &glyph_bbox); + }
- if (!(glyph_run->bidiLevel & 1)) - origin.x += glyph_run->glyphAdvances[i + start_glyph]; - } + heap_free(origins); }
*bbox = run->bbox;
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/dwrite/Makefile.in | 2 + dlls/dwrite/analyzer.c | 9 ++- dlls/dwrite/bidi.c | 2 +- dlls/dwrite/dwrite_private.h | 5 +- dlls/dwrite/font.c | 140 +++++++++++++++++++---------------- dlls/dwrite/freetype.c | 6 +- dlls/dwrite/layout.c | 51 +++++++------ dlls/dwrite/main.c | 40 +++++----- dlls/dwrite/opentype.c | 45 +++++------ dlls/dwrite/shape.c | 4 +- 10 files changed, 162 insertions(+), 142 deletions(-)
diff --git a/dlls/dwrite/Makefile.in b/dlls/dwrite/Makefile.in index 8b612989386..12af1c6736e 100644 --- a/dlls/dwrite/Makefile.in +++ b/dlls/dwrite/Makefile.in @@ -3,6 +3,8 @@ IMPORTLIB = dwrite IMPORTS = user32 gdi32 advapi32 EXTRAINCL = $(FREETYPE_CFLAGS)
+EXTRADLLFLAGS = -mno-cygwin + C_SRCS = \ analyzer.c \ bidi.c \ diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c index ecbe1a389fa..e58ec835acc 100644 --- a/dlls/dwrite/analyzer.c +++ b/dlls/dwrite/analyzer.c @@ -467,7 +467,7 @@ static HRESULT analyze_linebreaks(const WCHAR *text, UINT32 count, DWRITE_LINE_B
breakpoints[i].breakConditionBefore = DWRITE_BREAK_CONDITION_NEUTRAL; breakpoints[i].breakConditionAfter = DWRITE_BREAK_CONDITION_NEUTRAL; - breakpoints[i].isWhitespace = !!isspaceW(text[i]); + breakpoints[i].isWhitespace = !!iswspace(text[i]); breakpoints[i].isSoftHyphen = text[i] == 0x00ad /* Unicode Soft Hyphen */; breakpoints[i].padding = 0;
@@ -1107,8 +1107,9 @@ static void get_number_substitutes(IDWriteNumberSubstitution *substitution, BOOL static const WCHAR arabicW[] = {0x640,0x641,0x642,0x643,0x644,0x645,0x646,0x647,0x648,0x649,0};
/* For some Arabic locales Latin digits are returned for SNATIVEDIGITS */ - if (!strcmpW(arW, isolang)) { - strcpyW(digits, arabicW); + if (!wcscmp(arW, isolang)) + { + wcscpy(digits, arabicW); break; } } @@ -1978,7 +1979,7 @@ static ULONG WINAPI fontfallback_Release(IDWriteFontFallback1 *iface) return IDWriteFactory7_Release(fallback->factory); }
-static int compare_mapping_range(const void *a, const void *b) +static int __cdecl compare_mapping_range(const void *a, const void *b) { UINT32 ch = *(UINT32 *)a; DWRITE_UNICODE_RANGE *range = (DWRITE_UNICODE_RANGE *)b; diff --git a/dlls/dwrite/bidi.c b/dlls/dwrite/bidi.c index e2f3385519d..0cfca0fd95b 100644 --- a/dlls/dwrite/bidi.c +++ b/dlls/dwrite/bidi.c @@ -619,7 +619,7 @@ typedef struct tagBracketPair int end; } BracketPair;
-static int bracketpair_compr(const void *a, const void* b) +static int __cdecl bracketpair_compr(const void *a, const void* b) { return ((BracketPair*)a)->start - ((BracketPair*)b)->start; } diff --git a/dlls/dwrite/dwrite_private.h b/dlls/dwrite/dwrite_private.h index 2408251717b..7cca4c5c4f9 100644 --- a/dlls/dwrite/dwrite_private.h +++ b/dlls/dwrite/dwrite_private.h @@ -18,11 +18,11 @@
#include "dwrite_3.h" #include "d2d1.h" +#include "winternl.h"
#include "wine/debug.h" #include "wine/heap.h" #include "wine/list.h" -#include "wine/unicode.h"
#define MS_GSUB_TAG DWRITE_MAKE_OPENTYPE_TAG('G','S','U','B') #define MS_GPOS_TAG DWRITE_MAKE_OPENTYPE_TAG('G','P','O','S') @@ -41,7 +41,7 @@ static inline LPWSTR heap_strdupW(const WCHAR *str) if(str) { DWORD size;
- size = (strlenW(str)+1)*sizeof(WCHAR); + size = (lstrlenW(str) + 1)*sizeof(WCHAR); ret = heap_alloc(size); if(ret) memcpy(ret, str, size); @@ -743,7 +743,6 @@ struct font_backend_funcs UINT16 glyph, DWRITE_GLYPH_METRICS *metrics); };
-extern NTSTATUS CDECL init_font_lib(HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out) DECLSPEC_HIDDEN; extern void init_font_backend(void) DECLSPEC_HIDDEN; extern void release_font_backend(void) DECLSPEC_HIDDEN;
diff --git a/dlls/dwrite/font.c b/dlls/dwrite/font.c index 68d3b1256ea..993b4c05ffc 100644 --- a/dlls/dwrite/font.c +++ b/dlls/dwrite/font.c @@ -3053,10 +3053,11 @@ static UINT32 collection_find_family(struct dwrite_fontcollection *collection, c UINT32 j, count = IDWriteLocalizedStrings_GetCount(family_name); HRESULT hr;
- for (j = 0; j < count; j++) { + for (j = 0; j < count; j++) + { WCHAR buffer[255]; hr = IDWriteLocalizedStrings_GetString(family_name, j, buffer, ARRAY_SIZE(buffer)); - if (SUCCEEDED(hr) && !strcmpiW(buffer, name)) + if (SUCCEEDED(hr) && !_wcsicmp(buffer, name)) return i; } } @@ -3330,14 +3331,14 @@ static int trim_spaces(WCHAR *in, WCHAR *ret) { int len;
- while (isspaceW(*in)) + while (iswspace(*in)) in++;
ret[0] = 0; - if (!(len = strlenW(in))) + if (!(len = wcslen(in))) return 0;
- while (isspaceW(in[len-1])) + while (iswspace(in[len-1])) len--;
memcpy(ret, in, len*sizeof(WCHAR)); @@ -3369,9 +3370,10 @@ static BOOL match_pattern_list(struct list *tokens, const struct name_pattern *p struct name_token *token; int i = 0;
- while ((pattern = &patterns[i++])->part1) { - int len_part1 = strlenW(pattern->part1); - int len_part2 = pattern->part2 ? strlenW(pattern->part2) : 0; + while ((pattern = &patterns[i++])->part1) + { + int len_part1 = wcslen(pattern->part1); + int len_part2 = pattern->part2 ? wcslen(pattern->part2) : 0;
LIST_FOR_EACH_ENTRY(token, tokens, struct name_token, entry) { if (len_part2 == 0) { @@ -3379,7 +3381,8 @@ static BOOL match_pattern_list(struct list *tokens, const struct name_pattern *p if (token->len != len_part1) continue;
- if (!strncmpiW(token->ptr, pattern->part1, len_part1)) { + if (!_wcsnicmp(token->ptr, pattern->part1, len_part1)) + { if (match) *match = *token; list_remove(&token->entry); heap_free(token); @@ -3395,11 +3398,12 @@ static BOOL match_pattern_list(struct list *tokens, const struct name_pattern *p continue;
/* it's possible to have combined string as a token, like ExtraCondensed */ - if (token->len == len_part1 + len_part2) { - if (strncmpiW(token->ptr, pattern->part1, len_part1)) + if (token->len == len_part1 + len_part2) + { + if (_wcsnicmp(token->ptr, pattern->part1, len_part1)) continue;
- if (strncmpiW(&token->ptr[len_part1], pattern->part2, len_part2)) + if (_wcsnicmp(&token->ptr[len_part1], pattern->part2, len_part2)) continue;
/* combined string match */ @@ -3419,10 +3423,10 @@ static BOOL match_pattern_list(struct list *tokens, const struct name_pattern *p if (next_token->len != len_part1) continue;
- if (strncmpiW(token->ptr, pattern->part2, len_part2)) + if (_wcsnicmp(token->ptr, pattern->part2, len_part2)) continue;
- if (strncmpiW(next_token->ptr, pattern->part1, len_part1)) + if (_wcsnicmp(next_token->ptr, pattern->part1, len_part1)) continue;
/* both parts matched, remove tokens */ @@ -3716,12 +3720,13 @@ static DWRITE_FONT_WEIGHT font_extract_weight(struct list *tokens, DWRITE_FONT_W return weight; }
-struct knownweight_entry { +struct knownweight_entry +{ const WCHAR *nameW; DWRITE_FONT_WEIGHT weight; };
-static int compare_knownweights(const void *a, const void* b) +static int __cdecl compare_knownweights(const void *a, const void* b) { DWRITE_FONT_WEIGHT target = *(DWRITE_FONT_WEIGHT*)a; const struct knownweight_entry *entry = (struct knownweight_entry*)b; @@ -3768,7 +3773,7 @@ static BOOL is_known_weight_value(DWRITE_FONT_WEIGHT weight, WCHAR *nameW) return FALSE; }
- strcpyW(nameW, ptr->nameW); + wcscpy(nameW, ptr->nameW); return TRUE; }
@@ -3800,21 +3805,24 @@ static const WCHAR *facename_remove_regular_term(WCHAR *facenameW, INT len) int i = 0;
if (len == -1) - len = strlenW(facenameW); + len = wcslen(facenameW);
/* remove rightmost regular variant from face name */ - while (!regular_ptr && (ptr = regular_patterns[i++])) { - int pattern_len = strlenW(ptr); + while (!regular_ptr && (ptr = regular_patterns[i++])) + { + int pattern_len = wcslen(ptr); WCHAR *src;
if (pattern_len > len) continue;
src = facenameW + len - pattern_len; - while (src >= facenameW) { - if (!strncmpiW(src, ptr, pattern_len)) { + while (src >= facenameW) + { + if (!_wcsnicmp(src, ptr, pattern_len)) + { memmove(src, src + pattern_len, (len - pattern_len - (src - facenameW) + 1)*sizeof(WCHAR)); - len = strlenW(facenameW); + len = wcslen(facenameW); regular_ptr = ptr; break; } @@ -3892,9 +3900,10 @@ static BOOL font_apply_differentiation_rules(struct dwrite_font_data *font, WCHA regular_ptr = facename_remove_regular_term(facenameW, len);
/* append face name to family name, FIXME check if face name is a substring of family name */ - if (*facenameW) { - strcatW(familynameW, spaceW); - strcatW(familynameW, facenameW); + if (*facenameW) + { + wcscat(familynameW, spaceW); + wcscat(familynameW, facenameW); }
/* tokenize with " .-_" */ @@ -3942,11 +3951,11 @@ static BOOL font_apply_differentiation_rules(struct dwrite_font_data *font, WCHA /* get final combined string from what's left in token list, list is released */ fontname_tokens_to_str(&tokens, finalW);
- if (!strcmpW(familyW, finalW)) + if (!wcscmp(familyW, finalW)) return FALSE;
/* construct face name */ - strcpyW(familyW, finalW); + wcscpy(familyW, finalW);
/* resolved weight name */ if (weight_name.ptr) @@ -3958,9 +3967,10 @@ static BOOL font_apply_differentiation_rules(struct dwrite_font_data *font, WCHA else if (is_known_weight_value(font->weight, weightW)) { } /* use Wnnn format as a fallback in case weight is not one of known values */ - else { + else + { static const WCHAR fmtW[] = {'W','%','d',0}; - sprintfW(weightW, fmtW, font->weight); + swprintf(weightW, ARRAY_SIZE(weightW), fmtW, font->weight); }
/* resolved stretch name */ @@ -3990,7 +4000,7 @@ static BOOL font_apply_differentiation_rules(struct dwrite_font_data *font, WCHA extraexpandedW, ultraexpandedW }; - strcpyW(stretchW, stretchnamesW[font->stretch]); + wcscpy(stretchW, stretchnamesW[font->stretch]); }
/* resolved style name */ @@ -4001,27 +4011,30 @@ static BOOL font_apply_differentiation_rules(struct dwrite_font_data *font, WCHA /* use predefined names */ else { if (font->style == DWRITE_FONT_STYLE_ITALIC) - strcpyW(styleW, italicW); + wcscpy(styleW, italicW); else - strcpyW(styleW, obliqueW); + wcscpy(styleW, obliqueW); }
/* use Regular match if it was found initially */ if (!*weightW && !*stretchW && !*styleW) - strcpyW(faceW, regular_ptr ? regular_ptr : regularW); - else { + wcscpy(faceW, regular_ptr ? regular_ptr : regularW); + else + { faceW[0] = 0; - if (*stretchW) - strcpyW(faceW, stretchW); - if (*weightW) { - if (*faceW) - strcatW(faceW, spaceW); - strcatW(faceW, weightW); + + if (*stretchW) wcscpy(faceW, stretchW); + + if (*weightW) + { + if (*faceW) wcscat(faceW, spaceW); + wcscat(faceW, weightW); } - if (*styleW) { - if (*faceW) - strcatW(faceW, spaceW); - strcatW(faceW, styleW); + + if (*styleW) + { + if (*faceW) wcscat(faceW, spaceW); + wcscat(faceW, styleW); } }
@@ -4216,9 +4229,8 @@ static void fontfamily_add_bold_simulated_face(struct dwrite_fontfamily_data *fa fontname_tokens_to_str(&tokens, facenameW);
/* Bold suffix for new name */ - if (*facenameW) - strcatW(facenameW, spaceW); - strcatW(facenameW, boldW); + if (*facenameW) wcscat(facenameW, spaceW); + wcscat(facenameW, boldW);
if (init_font_data_from_font(family->fonts[heaviest], DWRITE_FONT_SIMULATIONS_BOLD, facenameW, &boldface) == S_OK) { boldface->bold_sim_tested = 1; @@ -4283,9 +4295,8 @@ static void fontfamily_add_oblique_simulated_face(struct dwrite_fontfamily_data fontstrings_get_en_string(family->fonts[regular]->names, facenameW, ARRAY_SIZE(facenameW)); facename_remove_regular_term(facenameW, -1);
- if (*facenameW) - strcatW(facenameW, spaceW); - strcatW(facenameW, obliqueW); + if (*facenameW) wcscat(facenameW, spaceW); + wcscat(facenameW, obliqueW);
if (init_font_data_from_font(family->fonts[regular], DWRITE_FONT_SIMULATIONS_OBLIQUE, facenameW, &obliqueface) == S_OK) { obliqueface->oblique_sim_tested = 1; @@ -4362,7 +4373,7 @@ static void fontcollection_add_replacements(struct dwrite_fontcollection *collec while (*replacement) { if (fontcollection_add_replacement(collection, name, replacement)) break; - replacement += strlenW(replacement) + 1; + replacement += wcslen(replacement) + 1; } } else if (type == REG_SZ) @@ -4599,13 +4610,14 @@ static HRESULT create_local_file_reference(IDWriteFactory7 *factory, const WCHAR HRESULT hr;
/* Fonts installed in 'Fonts' system dir don't get full path in registry font files cache */ - if (!strchrW(filename, '\')) { + if (!wcschr(filename, '\')) + { static const WCHAR fontsW[] = {'\','f','o','n','t','s','\',0}; WCHAR fullpathW[MAX_PATH];
GetWindowsDirectoryW(fullpathW, ARRAY_SIZE(fullpathW)); - strcatW(fullpathW, fontsW); - strcatW(fullpathW, filename); + wcscat(fullpathW, fontsW); + wcscat(fullpathW, filename);
hr = IDWriteFactory7_CreateFontFileReference(factory, fullpathW, NULL, file); } @@ -4790,7 +4802,7 @@ static HRESULT eudc_collection_add_family(IDWriteFactory7 *factory, struct dwrit /* Family names are added for non-specific locale, represented with empty string. Default family appears with empty family name. */ create_localizedstrings(&names); - if (!strcmpiW(keynameW, defaultfontW)) + if (!_wcsicmp(keynameW, defaultfontW)) add_localizedstring(names, emptyW, emptyW); else add_localizedstring(names, emptyW, keynameW); @@ -4867,7 +4879,7 @@ HRESULT get_eudc_fontcollection(IDWriteFactory7 *factory, IDWriteFontCollection3 IDWriteFactory7_AddRef(factory);
/* return empty collection if EUDC fonts are not configured */ - sprintfW(eudckeypathW, eudckeyfmtW, GetACP()); + swprintf(eudckeypathW, ARRAY_SIZE(eudckeypathW), eudckeyfmtW, GetACP()); if (RegOpenKeyExW(HKEY_CURRENT_USER, eudckeypathW, 0, GENERIC_READ, &eudckey)) return S_OK;
@@ -5522,7 +5534,7 @@ static HRESULT WINAPI localfontfileloader_GetFilePathLengthFromKey(IDWriteLocalF
TRACE("%p, %p, %u, %p.\n", iface, key, key_size, length);
- *length = strlenW(refkey->name); + *length = wcslen(refkey->name); return S_OK; }
@@ -5533,10 +5545,10 @@ static HRESULT WINAPI localfontfileloader_GetFilePathFromKey(IDWriteLocalFontFil
TRACE("%p, %p, %u, %p, %u.\n", iface, key, key_size, path, length);
- if (length < strlenW(refkey->name)) + if (length < wcslen(refkey->name)) return E_INVALIDARG;
- strcpyW(path, refkey->name); + wcscpy(path, refkey->name); return S_OK; }
@@ -5583,7 +5595,7 @@ HRESULT get_local_refkey(const WCHAR *path, const FILETIME *writetime, void **ke if (!path) return E_INVALIDARG;
- *size = FIELD_OFFSET(struct local_refkey, name) + (strlenW(path)+1)*sizeof(WCHAR); + *size = FIELD_OFFSET(struct local_refkey, name) + (wcslen(path)+1)*sizeof(WCHAR); *key = NULL;
refkey = heap_alloc(*size); @@ -5600,7 +5612,7 @@ HRESULT get_local_refkey(const WCHAR *path, const FILETIME *writetime, void **ke else memset(&refkey->writetime, 0, sizeof(refkey->writetime)); } - strcpyW(refkey->name, path); + wcscpy(refkey->name, path);
*key = refkey;
@@ -8014,10 +8026,10 @@ struct font_callback_funcs callback_funcs =
void init_font_backend(void) { - init_font_lib(dwrite_module, DLL_PROCESS_ATTACH, &callback_funcs, &font_funcs); + __wine_init_unix_lib(dwrite_module, DLL_PROCESS_ATTACH, &callback_funcs, &font_funcs); }
void release_font_backend(void) { - init_font_lib(dwrite_module, DLL_PROCESS_DETACH, &callback_funcs, NULL); + __wine_init_unix_lib(dwrite_module, DLL_PROCESS_DETACH, &callback_funcs, NULL); } diff --git a/dlls/dwrite/freetype.c b/dlls/dwrite/freetype.c index 128388c9c86..ca29b0d97bd 100644 --- a/dlls/dwrite/freetype.c +++ b/dlls/dwrite/freetype.c @@ -18,7 +18,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#define COBJMACROS +#if 0 +#pragma makedep unix +#endif
#include "config.h" #include "wine/port.h" @@ -860,7 +862,7 @@ static NTSTATUS release_freetype_lib(void)
#endif /* HAVE_FREETYPE */
-NTSTATUS CDECL init_font_lib(HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out) +NTSTATUS CDECL __wine_init_unix_lib(HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out) { if (reason == DLL_PROCESS_ATTACH) return init_freetype_lib(module, reason, ptr_in, ptr_out); diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c index eb6280d7fc1..4c26afeb59d 100644 --- a/dlls/dwrite/layout.c +++ b/dlls/dwrite/layout.c @@ -1974,7 +1974,7 @@ static void init_u_splitting_params_from_erun(struct layout_effective_run *erun, static BOOL is_same_u_splitting(struct layout_underline_splitting_params *left, struct layout_underline_splitting_params *right) { - return left->effect == right->effect && !strcmpiW(left->locale, right->locale); + return left->effect == right->effect && !_wcsicmp(left->locale, right->locale); }
static HRESULT layout_add_underline(struct dwrite_textlayout *layout, struct layout_effective_run *first, @@ -2432,9 +2432,9 @@ static BOOL is_same_layout_attrvalue(struct layout_range_header const *h, enum l case LAYOUT_RANGE_ATTR_FONTCOLL: return range->collection == value->u.collection; case LAYOUT_RANGE_ATTR_LOCALE: - return strcmpiW(range->locale, value->u.locale) == 0; + return !_wcsicmp(range->locale, value->u.locale); case LAYOUT_RANGE_ATTR_FONTFAMILY: - return strcmpW(range->fontfamily, value->u.fontfamily) == 0; + return !wcscmp(range->fontfamily, value->u.fontfamily); case LAYOUT_RANGE_ATTR_SPACING: return range_spacing->leading == value->u.spacing.leading && range_spacing->trailing == value->u.spacing.trailing && @@ -2463,8 +2463,8 @@ static inline BOOL is_same_layout_attributes(struct layout_range_header const *h left->object == right->object && left->pair_kerning == right->pair_kerning && left->collection == right->collection && - !strcmpiW(left->locale, right->locale) && - !strcmpW(left->fontfamily, right->fontfamily); + !_wcsicmp(left->locale, right->locale) && + !wcscmp(left->fontfamily, right->fontfamily); } case LAYOUT_RANGE_UNDERLINE: case LAYOUT_RANGE_STRIKETHROUGH: @@ -2529,7 +2529,7 @@ static struct layout_range_header *alloc_layout_range(struct dwrite_textlayout * range->collection = layout->format.collection; if (range->collection) IDWriteFontCollection_AddRef(range->collection); - strcpyW(range->locale, layout->format.locale); + wcscpy(range->locale, layout->format.locale);
h = &range->h; break; @@ -2792,15 +2792,17 @@ static BOOL set_layout_range_attrval(struct layout_range_header *h, enum layout_ changed = set_layout_range_iface_attr((IUnknown**)&dest->collection, (IUnknown*)value->u.collection); break; case LAYOUT_RANGE_ATTR_LOCALE: - changed = strcmpiW(dest->locale, value->u.locale) != 0; - if (changed) { - strcpyW(dest->locale, value->u.locale); - strlwrW(dest->locale); + changed = !!wcsicmp(dest->locale, value->u.locale); + if (changed) + { + wcscpy(dest->locale, value->u.locale); + wcslwr(dest->locale); } break; case LAYOUT_RANGE_ATTR_FONTFAMILY: - changed = strcmpW(dest->fontfamily, value->u.fontfamily) != 0; - if (changed) { + changed = !!wcscmp(dest->fontfamily, value->u.fontfamily); + if (changed) + { heap_free(dest->fontfamily); dest->fontfamily = heap_strdupW(value->u.fontfamily); } @@ -3033,7 +3035,7 @@ static HRESULT get_string_attribute_length(struct dwrite_textlayout *layout, enu }
str = get_string_attribute_ptr(range, kind); - *length = strlenW(str); + *length = wcslen(str); return return_range(&range->h, r); }
@@ -3052,10 +3054,10 @@ static HRESULT get_string_attribute_value(struct dwrite_textlayout *layout, enum return E_INVALIDARG;
str = get_string_attribute_ptr(range, kind); - if (length < strlenW(str) + 1) + if (length < wcslen(str) + 1) return E_NOT_SUFFICIENT_BUFFER;
- strcpyW(ret, str); + wcscpy(ret, str); return return_range(&range->h, r); }
@@ -3488,7 +3490,7 @@ static HRESULT WINAPI dwritetextlayout_SetLocaleName(IDWriteTextLayout4 *iface,
TRACE("%p, %s, %s.\n", iface, debugstr_w(locale), debugstr_range(&range));
- if (!locale || strlenW(locale) > LOCALE_NAME_MAX_LENGTH-1) + if (!locale || wcslen(locale) > LOCALE_NAME_MAX_LENGTH-1) return E_INVALIDARG;
value.range = range; @@ -4816,7 +4818,7 @@ static HRESULT WINAPI dwritetextformat_layout_GetFontFamilyName(IDWriteTextForma TRACE("%p, %p, %u.\n", iface, name, size);
if (size <= layout->format.family_len) return E_NOT_SUFFICIENT_BUFFER; - strcpyW(name, layout->format.family_name); + wcscpy(name, layout->format.family_name); return S_OK; }
@@ -4872,7 +4874,7 @@ static HRESULT WINAPI dwritetextformat_layout_GetLocaleName(IDWriteTextFormat3 * TRACE("%p, %p, %u.\n", iface, name, size);
if (size <= layout->format.locale_len) return E_NOT_SUFFICIENT_BUFFER; - strcpyW(name, layout->format.locale); + wcscpy(name, layout->format.locale); return S_OK; }
@@ -5285,7 +5287,8 @@ static HRESULT WINAPI dwritetextlayout_source_GetLocaleName(IDWriteTextAnalysisS *text_len = range->h.range.length - position;
next = LIST_ENTRY(list_next(&layout->ranges, &range->h.entry), struct layout_range, h.entry); - while (next && next->h.range.startPosition < layout->len && !strcmpW(range->locale, next->locale)) { + while (next && next->h.range.startPosition < layout->len && !wcscmp(range->locale, next->locale)) + { *text_len += next->h.range.length; next = LIST_ENTRY(list_next(&layout->ranges, &next->h.entry), struct layout_range, h.entry); } @@ -5939,7 +5942,7 @@ static HRESULT WINAPI dwritetextformat_GetFontFamilyName(IDWriteTextFormat3 *ifa
if (size <= format->format.family_len) return E_NOT_SUFFICIENT_BUFFER; - strcpyW(name, format->format.family_name); + wcscpy(name, format->format.family_name); return S_OK; }
@@ -5996,7 +5999,7 @@ static HRESULT WINAPI dwritetextformat_GetLocaleName(IDWriteTextFormat3 *iface,
if (size <= format->format.locale_len) return E_NOT_SUFFICIENT_BUFFER; - strcpyW(name, format->format.locale); + wcscpy(name, format->format.locale); return S_OK; }
@@ -6216,11 +6219,11 @@ HRESULT create_textformat(const WCHAR *family_name, IDWriteFontCollection *colle object->IDWriteTextFormat3_iface.lpVtbl = &dwritetextformatvtbl; object->refcount = 1; object->format.family_name = heap_strdupW(family_name); - object->format.family_len = strlenW(family_name); + object->format.family_len = wcslen(family_name); object->format.locale = heap_strdupW(locale); - object->format.locale_len = strlenW(locale); + object->format.locale_len = wcslen(locale); /* Force locale name to lower case, layout will inherit this modified value. */ - strlwrW(object->format.locale); + wcslwr(object->format.locale); object->format.weight = weight; object->format.style = style; object->format.fontsize = size; diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c index 41b81ae951b..ac96e5f0a5e 100644 --- a/dlls/dwrite/main.c +++ b/dlls/dwrite/main.c @@ -343,7 +343,7 @@ static HRESULT WINAPI localizedstrings_FindLocaleName(IDWriteLocalizedStrings *i
for (i = 0; i < strings->count; ++i) { - if (!strcmpiW(strings->data[i].locale, locale_name)) + if (!_wcsicmp(strings->data[i].locale, locale_name)) { *exists = TRUE; *index = i; @@ -366,7 +366,7 @@ static HRESULT WINAPI localizedstrings_GetLocaleNameLength(IDWriteLocalizedStrin return E_FAIL; }
- *length = strlenW(strings->data[index].locale); + *length = wcslen(strings->data[index].locale); return S_OK; }
@@ -382,13 +382,13 @@ static HRESULT WINAPI localizedstrings_GetLocaleName(IDWriteLocalizedStrings *if return E_FAIL; }
- if (size < strlenW(strings->data[index].locale) + 1) + if (size < wcslen(strings->data[index].locale) + 1) { if (buffer) *buffer = 0; return E_NOT_SUFFICIENT_BUFFER; }
- strcpyW(buffer, strings->data[index].locale); + wcscpy(buffer, strings->data[index].locale); return S_OK; }
@@ -404,7 +404,7 @@ static HRESULT WINAPI localizedstrings_GetStringLength(IDWriteLocalizedStrings * return E_FAIL; }
- *length = strlenW(strings->data[index].string); + *length = wcslen(strings->data[index].string); return S_OK; }
@@ -420,13 +420,13 @@ static HRESULT WINAPI localizedstrings_GetString(IDWriteLocalizedStrings *iface, return E_FAIL; }
- if (size < strlenW(strings->data[index].string) + 1) + if (size < wcslen(strings->data[index].string) + 1) { if (buffer) *buffer = 0; return E_NOT_SUFFICIENT_BUFFER; }
- strcpyW(buffer, strings->data[index].string); + wcscpy(buffer, strings->data[index].string); return S_OK; }
@@ -470,7 +470,7 @@ HRESULT add_localizedstring(IDWriteLocalizedStrings *iface, const WCHAR *locale, if (*locale) { for (i = 0; i < count; i++) - if (!lstrcmpiW(strings->data[i].locale, locale)) + if (!_wcsicmp(strings->data[i].locale, locale)) return S_OK; }
@@ -485,7 +485,7 @@ HRESULT add_localizedstring(IDWriteLocalizedStrings *iface, const WCHAR *locale, heap_free(strings->data[count].string); return E_OUTOFMEMORY; } - strlwrW(strings->data[count].locale); + wcslwr(strings->data[count].locale);
strings->count++;
@@ -537,7 +537,7 @@ void set_en_localizedstring(IDWriteLocalizedStrings *iface, const WCHAR *string)
for (i = 0; i < strings->count; i++) { - if (!strcmpiW(strings->data[i].locale, enusW)) + if (!_wcsicmp(strings->data[i].locale, enusW)) { heap_free(strings->data[i].string); strings->data[i].string = heap_strdupW(string); @@ -546,11 +546,11 @@ void set_en_localizedstring(IDWriteLocalizedStrings *iface, const WCHAR *string) } }
-static int localizedstrings_sorting_compare(const void *left, const void *right) +static int __cdecl localizedstrings_sorting_compare(const void *left, const void *right) { const struct localizedpair *_l = left, *_r = right;
- return strcmpW(_l->locale, _r->locale); + return wcscmp(_l->locale, _r->locale); };
void sort_localizedstrings(IDWriteLocalizedStrings *iface) @@ -573,7 +573,7 @@ BOOL localizedstrings_contains(IDWriteLocalizedStrings *iface, const WCHAR *str)
for (i = 0; i < strings->count; ++i) { - if (!lstrcmpiW(strings->data[i].string, str)) return TRUE; + if (!_wcsicmp(strings->data[i].string, str)) return TRUE; }
return FALSE; @@ -1571,15 +1571,15 @@ static HRESULT create_system_path_list(WCHAR ***ret, unsigned int *ret_count) { if (dwrite_array_reserve((void **)&paths, &capacity, count + 1, sizeof(*paths))) { - if (!strchrW(value, '\')) + if (!wcschr(value, '\')) { static const WCHAR fontsW[] = {'\','f','o','n','t','s','\',0}; WCHAR *ptrW;
- ptrW = heap_alloc((MAX_PATH + lstrlenW(value)) * sizeof(WCHAR)); + ptrW = heap_alloc((MAX_PATH + wcslen(value)) * sizeof(WCHAR)); GetWindowsDirectoryW(ptrW, MAX_PATH); - lstrcatW(ptrW, fontsW); - lstrcatW(ptrW, value); + wcscat(ptrW, fontsW); + wcscat(ptrW, value);
heap_free(value); value = ptrW; @@ -1602,10 +1602,10 @@ static HRESULT create_system_path_list(WCHAR ***ret, unsigned int *ret_count) return S_OK; }
-static int create_system_fontset_compare(const void *left, const void *right) +static int __cdecl create_system_fontset_compare(const void *left, const void *right) { const WCHAR *_l = *(WCHAR **)left, *_r = *(WCHAR **)right; - return lstrcmpiW(_l, _r); + return _wcsicmp(_l, _r); };
static HRESULT create_system_fontset(IDWriteFactory7 *factory, REFIID riid, void **obj) @@ -1628,7 +1628,7 @@ static HRESULT create_system_fontset(IDWriteFactory7 *factory, REFIID riid, void
for (i = 0, j = 0; i < count; ++i) { - if (i != j && !lstrcmpiW(paths[i], paths[j])) continue; + if (i != j && !_wcsicmp(paths[i], paths[j])) continue;
if (FAILED(hr = IDWriteFontSetBuilder2_AddFontFile(builder, paths[i])) && hr != DWRITE_E_FILEFORMAT) WARN("Failed to add font file, hr %#x, path %s.\n", hr, debugstr_w(paths[i])); diff --git a/dlls/dwrite/opentype.c b/dlls/dwrite/opentype.c index 8d6133545a2..3d18317f192 100644 --- a/dlls/dwrite/opentype.c +++ b/dlls/dwrite/opentype.c @@ -21,9 +21,7 @@ #define COBJMACROS #define NONAMELESSUNION
-#include "config.h" #include "dwrite_private.h" -#include "winternl.h"
WINE_DEFAULT_DEBUG_CHANNEL(dwrite);
@@ -1574,7 +1572,7 @@ struct cmap_format4_compare_context unsigned int ch; };
-static int cmap_format4_compare_range(const void *a, const void *b) +static int __cdecl cmap_format4_compare_range(const void *a, const void *b) { const struct cmap_format4_compare_context *key = a; const UINT16 *end = b; @@ -1659,7 +1657,7 @@ static unsigned int opentype_cmap_format6_10_get_ranges(const struct dwrite_cmap return 1; }
-static int cmap_format12_13_compare_group(const void *a, const void *b) +static int __cdecl cmap_format12_13_compare_group(const void *a, const void *b) { const unsigned int *ch = a; const UINT32 *group = b; @@ -1737,7 +1735,7 @@ UINT16 opentype_cmap_get_glyph(const struct dwrite_cmap *cmap, unsigned int ch) return glyph; }
-static int cmap_header_compare(const void *a, const void *b) +static int __cdecl cmap_header_compare(const void *a, const void *b) { const UINT16 *key = a; const UINT16 *record = b; @@ -2271,17 +2269,18 @@ static void get_name_record_locale(enum OPENTYPE_PLATFORM_ID platform, USHORT la if (locale_name) MultiByteToWideChar(CP_ACP, 0, name_mac_langid_to_locale[lang_id], -1, locale, locale_len); else - strcpyW(locale, enusW); + wcscpy(locale, enusW); break; } case OPENTYPE_PLATFORM_WIN: - if (!LCIDToLocaleName(MAKELCID(lang_id, SORT_DEFAULT), locale, locale_len, 0)) { + if (!LCIDToLocaleName(MAKELCID(lang_id, SORT_DEFAULT), locale, locale_len, 0)) + { FIXME("failed to get locale name for lcid=0x%08x\n", MAKELCID(lang_id, SORT_DEFAULT)); - strcpyW(locale, enusW); + wcscpy(locale, enusW); } break; case OPENTYPE_PLATFORM_UNICODE: - strcpyW(locale, enusW); + wcscpy(locale, enusW); break; default: FIXME("unknown platform %d\n", platform); @@ -2351,7 +2350,7 @@ static BOOL opentype_decode_namerecord(const struct dwrite_fonttable *table, uns add_localizedstring(strings, locale, name_string); heap_free(name_string);
- ret = !lstrcmpW(locale, enusW); + ret = !wcscmp(locale, enusW); } else FIXME("handle NAME format 1\n"); @@ -2448,10 +2447,10 @@ static WCHAR *meta_get_lng_name(WCHAR *str, WCHAR **ctx) WCHAR *ret;
if (!str) str = *ctx; - while (*str && strchrW(delimW, *str)) str++; + while (*str && wcschr(delimW, *str)) str++; if (!*str) return NULL; ret = str++; - while (*str && !strchrW(delimW, *str)) str++; + while (*str && !wcschr(delimW, *str)) str++; if (*str) *str++ = 0; *ctx = str;
@@ -2651,10 +2650,12 @@ HRESULT opentype_get_font_facename(struct file_stream_desc *stream_desc, WCHAR *
IDWriteLocalizedStrings_GetStringLength(lfnames, index, &length); nameW = heap_alloc((length + 1) * sizeof(WCHAR)); - if (nameW) { + if (nameW) + { *nameW = 0; IDWriteLocalizedStrings_GetString(lfnames, index, nameW, length + 1); - lstrcpynW(lfname, nameW, LF_FACESIZE); + wcsncpy(lfname, nameW, LF_FACESIZE); + lfname[LF_FACESIZE-1] = 0; heap_free(nameW); } } @@ -2901,7 +2902,7 @@ HRESULT opentype_get_cpal_entries(const struct dwrite_fonttable *cpal, unsigned return S_OK; }
-static int colr_compare_gid(const void *g, const void *r) +static int __cdecl colr_compare_gid(const void *g, const void *r) { const struct colr_baseglyph_record *record = r; UINT16 glyph = *(UINT16*)g, GID = GET_BE_WORD(record->glyph); @@ -3259,7 +3260,7 @@ unsigned int opentype_layout_find_language(const struct scriptshaping_cache *cac return 0; }
-static int gdef_class_compare_format2(const void *g, const void *r) +static int __cdecl gdef_class_compare_format2(const void *g, const void *r) { const struct ot_gdef_class_range *range = r; UINT16 glyph = *(UINT16 *)g; @@ -3368,7 +3369,7 @@ struct coverage_compare_format1_context unsigned int *coverage_index; };
-static int coverage_compare_format1(const void *left, const void *right) +static int __cdecl coverage_compare_format1(const void *left, const void *right) { const struct coverage_compare_format1_context *context = left; UINT16 glyph = GET_BE_WORD(*(UINT16 *)right); @@ -3381,7 +3382,7 @@ static int coverage_compare_format1(const void *left, const void *right) return ret; }
-static int coverage_compare_format2(const void *g, const void *r) +static int __cdecl coverage_compare_format2(const void *g, const void *r) { const struct ot_coverage_range *range = r; UINT16 glyph = *(UINT16 *)g; @@ -3866,7 +3867,7 @@ static BOOL opentype_layout_apply_gpos_single_adjustment(struct scriptshaping_co return TRUE; }
-static int gpos_pair_adjustment_compare_format1(const void *g, const void *r) +static int __cdecl gpos_pair_adjustment_compare_format1(const void *g, const void *r) { const struct ot_gpos_pairvalue *pairvalue = r; UINT16 second_glyph = GET_BE_WORD(pairvalue->second_glyph); @@ -4456,7 +4457,7 @@ struct lookups size_t count; };
-static int lookups_sorting_compare(const void *a, const void *b) +static int __cdecl lookups_sorting_compare(const void *a, const void *b) { const struct lookup *left = (const struct lookup *)a; const struct lookup *right = (const struct lookup *)b; @@ -4715,7 +4716,7 @@ static void opentype_layout_collect_lookups(struct scriptshaping_context *contex } }
-static int feature_search_compare(const void *a, const void* b) +static int __cdecl feature_search_compare(const void *a, const void* b) { unsigned int tag = *(unsigned int *)a; const struct shaping_feature *feature = b; @@ -6525,7 +6526,7 @@ struct kern_format0_compare_key UINT16 right; };
-static int kern_format0_compare(const void *a, const void *b) +static int __cdecl kern_format0_compare(const void *a, const void *b) { const struct kern_format0_compare_key *key = a; const WORD *data = b; diff --git a/dlls/dwrite/shape.c b/dlls/dwrite/shape.c index abeb7eeac79..2d098fb5688 100644 --- a/dlls/dwrite/shape.c +++ b/dlls/dwrite/shape.c @@ -148,7 +148,7 @@ void shape_start_next_stage(struct shaping_features *features, stage_func func) features->stage++; }
-static int features_sorting_compare(const void *a, const void *b) +static int __cdecl features_sorting_compare(const void *a, const void *b) { const struct shaping_feature *left = a, *right = b; return left->tag != right->tag ? (left->tag < right->tag ? -1 : 1) : 0; @@ -352,7 +352,7 @@ HRESULT shape_get_glyphs(struct scriptshaping_context *context, const unsigned i return (context->glyph_count <= context->u.subst.max_glyph_count) ? S_OK : E_NOT_SUFFICIENT_BUFFER; }
-static int tag_array_sorting_compare(const void *a, const void *b) +static int __cdecl tag_array_sorting_compare(const void *a, const void *b) { unsigned int left = GET_BE_DWORD(*(unsigned int *)a), right = GET_BE_DWORD(*(unsigned int *)b); return left != right ? (left < right ? -1 : 1) : 0;