mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-16 00:12:51 +00:00
(svn r15818) -Fix [FS#2752]: some (newer) GCCs have trouble compiling the Win32 specific part of fontcache.cpp; jumps across variable declarations (Maeyanie)
This commit is contained in:
parent
2fe151bd92
commit
56e7d2944b
@ -206,42 +206,47 @@ static const char *GetEnglishFontName(const ENUMLOGFONTEX *logfont)
|
|||||||
static char font_name[MAX_PATH];
|
static char font_name[MAX_PATH];
|
||||||
const char *ret_font_name = NULL;
|
const char *ret_font_name = NULL;
|
||||||
uint pos = 0;
|
uint pos = 0;
|
||||||
|
HDC dc;
|
||||||
|
HGDIOBJ oldfont;
|
||||||
|
byte *buf;
|
||||||
|
DWORD dw;
|
||||||
|
uint16 format, count, stringOffset, platformId, encodingId, languageId, nameId, length, offset;
|
||||||
|
|
||||||
HFONT font = CreateFontIndirect(&logfont->elfLogFont);
|
HFONT font = CreateFontIndirect(&logfont->elfLogFont);
|
||||||
if (font == NULL) goto err1;
|
if (font == NULL) goto err1;
|
||||||
|
|
||||||
HDC dc = GetDC(NULL);
|
dc = GetDC(NULL);
|
||||||
HGDIOBJ oldfont = SelectObject(dc, font);
|
oldfont = SelectObject(dc, font);
|
||||||
DWORD dw = GetFontData(dc, 'eman', 0, NULL, 0);
|
dw = GetFontData(dc, 'eman', 0, NULL, 0);
|
||||||
if (dw == GDI_ERROR) goto err2;
|
if (dw == GDI_ERROR) goto err2;
|
||||||
|
|
||||||
byte *buf = MallocT<byte>(dw);
|
buf = MallocT<byte>(dw);
|
||||||
dw = GetFontData(dc, 'eman', 0, buf, dw);
|
dw = GetFontData(dc, 'eman', 0, buf, dw);
|
||||||
if (dw == GDI_ERROR) goto err3;
|
if (dw == GDI_ERROR) goto err3;
|
||||||
|
|
||||||
uint16 format = buf[pos++] << 8;
|
format = buf[pos++] << 8;
|
||||||
format += buf[pos++];
|
format += buf[pos++];
|
||||||
assert(format == 0);
|
assert(format == 0);
|
||||||
uint16 count = buf[pos++] << 8;
|
count = buf[pos++] << 8;
|
||||||
count += buf[pos++];
|
count += buf[pos++];
|
||||||
uint16 stringOffset = buf[pos++] << 8;
|
stringOffset = buf[pos++] << 8;
|
||||||
stringOffset += buf[pos++];
|
stringOffset += buf[pos++];
|
||||||
for (uint i = 0; i < count; i++) {
|
for (uint i = 0; i < count; i++) {
|
||||||
uint16 platformId = buf[pos++] << 8;
|
platformId = buf[pos++] << 8;
|
||||||
platformId += buf[pos++];
|
platformId += buf[pos++];
|
||||||
uint16 encodingId = buf[pos++] << 8;
|
encodingId = buf[pos++] << 8;
|
||||||
encodingId += buf[pos++];
|
encodingId += buf[pos++];
|
||||||
uint16 languageId = buf[pos++] << 8;
|
languageId = buf[pos++] << 8;
|
||||||
languageId += buf[pos++];
|
languageId += buf[pos++];
|
||||||
uint16 nameId = buf[pos++] << 8;
|
nameId = buf[pos++] << 8;
|
||||||
nameId += buf[pos++];
|
nameId += buf[pos++];
|
||||||
if (nameId != 1) {
|
if (nameId != 1) {
|
||||||
pos += 4; // skip length and offset
|
pos += 4; // skip length and offset
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
uint16 length = buf[pos++] << 8;
|
length = buf[pos++] << 8;
|
||||||
length += buf[pos++];
|
length += buf[pos++];
|
||||||
uint16 offset = buf[pos++] << 8;
|
offset = buf[pos++] << 8;
|
||||||
offset += buf[pos++];
|
offset += buf[pos++];
|
||||||
|
|
||||||
/* Don't buffer overflow */
|
/* Don't buffer overflow */
|
||||||
|
Loading…
Reference in New Issue
Block a user