(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:
rubidium 2009-03-22 21:07:55 +00:00
parent 2fe151bd92
commit 56e7d2944b
1 changed files with 18 additions and 13 deletions

View File

@ -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 */