From 91f89b4f96674024b3436423ddb188e838d1ca54 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Cardot Date: Fri, 15 Apr 2016 12:08:03 +0200 Subject: [PATCH] winhlp32: Fix some images not shown in certain 16-bit help files. Subfiles with bitmap images are usually prefixed with '|', but sometimes not. Signed-off-by: Jean-Christophe Cardot Signed-off-by: Alexandre Julliard --- programs/winhlp32/hlpfile.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/programs/winhlp32/hlpfile.c b/programs/winhlp32/hlpfile.c index 10484a9584d..2748e5cfdf9 100644 --- a/programs/winhlp32/hlpfile.c +++ b/programs/winhlp32/hlpfile.c @@ -507,6 +507,18 @@ static BOOL HLPFILE_FindSubFile(HLPFILE* hlpfile, LPCSTR name, BYTE **subbuf, BY WINE_TRACE("looking for file '%s'\n", name); ptr = HLPFILE_BPTreeSearch(hlpfile->file_buffer + GET_UINT(hlpfile->file_buffer, 4), name, comp_FindSubFile); + if (!ptr) + { /* Subfiles with bitmap images are usually prefixed with '|', but sometimes not. + Unfortunately, there is no consensus among different pieces of unofficial + documentation. So remove leading '|' and try again. */ + CHAR c = *name++; + if (c == '|') + { + WINE_TRACE("not found. try '%s'\n", name); + ptr = HLPFILE_BPTreeSearch(hlpfile->file_buffer + GET_UINT(hlpfile->file_buffer, 4), + name, comp_FindSubFile); + } + } if (!ptr) return FALSE; *subbuf = hlpfile->file_buffer + GET_UINT(ptr, strlen(name)+1); if (*subbuf >= hlpfile->file_buffer + hlpfile->file_buffer_size)