[HHCTRL.OCX] Sync with Wine Staging 4.18. CORE-16441

This commit is contained in:
Amine Khaldi 2019-10-26 22:57:01 +01:00
parent 7046ddd63c
commit 6cbb644524
8 changed files with 75 additions and 67 deletions

View file

@ -228,11 +228,11 @@ static WCHAR *FindHTMLHelpSetting(HHInfo *info, const WCHAR *extW)
WCHAR *filename; WCHAR *filename;
HRESULT hr; HRESULT hr;
filename = heap_alloc( (strlenW(info->pCHMInfo->compiledFile) filename = heap_alloc( (lstrlenW(info->pCHMInfo->compiledFile)
+ strlenW(periodW) + strlenW(extW) + 1) * sizeof(WCHAR) ); + lstrlenW(periodW) + lstrlenW(extW) + 1) * sizeof(WCHAR) );
strcpyW(filename, info->pCHMInfo->compiledFile); lstrcpyW(filename, info->pCHMInfo->compiledFile);
strcatW(filename, periodW); lstrcatW(filename, periodW);
strcatW(filename, extW); lstrcatW(filename, extW);
hr = IStorage_OpenStream(pStorage, filename, NULL, STGM_READ, 0, &pStream); hr = IStorage_OpenStream(pStorage, filename, NULL, STGM_READ, 0, &pStream);
if (FAILED(hr)) if (FAILED(hr))
{ {
@ -483,11 +483,11 @@ LPCWSTR skip_schema(LPCWSTR url)
static const WCHAR msits_schema[] = {'m','s','-','i','t','s',':'}; static const WCHAR msits_schema[] = {'m','s','-','i','t','s',':'};
static const WCHAR mk_schema[] = {'m','k',':','@','M','S','I','T','S','t','o','r','e',':'}; static const WCHAR mk_schema[] = {'m','k',':','@','M','S','I','T','S','t','o','r','e',':'};
if(!strncmpiW(its_schema, url, ARRAY_SIZE(its_schema))) if(!_wcsnicmp(its_schema, url, ARRAY_SIZE(its_schema)))
return url + ARRAY_SIZE(its_schema); return url + ARRAY_SIZE(its_schema);
if(!strncmpiW(msits_schema, url, ARRAY_SIZE(msits_schema))) if(!_wcsnicmp(msits_schema, url, ARRAY_SIZE(msits_schema)))
return url + ARRAY_SIZE(msits_schema); return url + ARRAY_SIZE(msits_schema);
if(!strncmpiW(mk_schema, url, ARRAY_SIZE(mk_schema))) if(!_wcsnicmp(mk_schema, url, ARRAY_SIZE(mk_schema)))
return url + ARRAY_SIZE(mk_schema); return url + ARRAY_SIZE(mk_schema);
return url; return url;
@ -500,15 +500,15 @@ void SetChmPath(ChmPath *file, LPCWSTR base_file, LPCWSTR path)
path = skip_schema(path); path = skip_schema(path);
ptr = strstrW(path, separatorW); ptr = wcsstr(path, separatorW);
if(ptr) { if(ptr) {
WCHAR chm_file[MAX_PATH]; WCHAR chm_file[MAX_PATH];
WCHAR rel_path[MAX_PATH]; WCHAR rel_path[MAX_PATH];
WCHAR base_path[MAX_PATH]; WCHAR base_path[MAX_PATH];
LPWSTR p; LPWSTR p;
strcpyW(base_path, base_file); lstrcpyW(base_path, base_file);
p = strrchrW(base_path, '\\'); p = wcsrchr(base_path, '\\');
if(p) if(p)
*p = 0; *p = 0;
@ -595,7 +595,7 @@ WCHAR *GetDocumentTitle(CHMInfo *info, LPCWSTR document)
TRACE("%s\n", node.buf); TRACE("%s\n", node.buf);
if(!strcasecmp(node_name.buf, "title")) { if(!_strnicmp(node_name.buf, "title", -1)) {
if(next_content(&stream, &content) && content.len > 1) if(next_content(&stream, &content) && content.len > 1)
{ {
document_title = strdupnAtoW(&content.buf[1], content.len-1); document_title = strdupnAtoW(&content.buf[1], content.len-1);

View file

@ -62,11 +62,11 @@ static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const
return; return;
} }
if(!strncasecmp("name", ptr, len)) { if(!_strnicmp("name", ptr, len)) {
param = &item->name; param = &item->name;
}else if(!strncasecmp("merge", ptr, len)) { }else if(!_strnicmp("merge", ptr, len)) {
param = &merge; param = &merge;
}else if(!strncasecmp("local", ptr, len)) { }else if(!_strnicmp("local", ptr, len)) {
param = &item->local; param = &item->local;
}else { }else {
WARN("unhandled param %s\n", debugstr_an(ptr, len)); WARN("unhandled param %s\n", debugstr_an(ptr, len));
@ -148,9 +148,9 @@ static ContentItem *parse_sitemap_object(HHInfo *info, stream_t *stream, Content
TRACE("%s\n", node.buf); TRACE("%s\n", node.buf);
if(!strcasecmp(node_name.buf, "/object")) if(!_strnicmp(node_name.buf, "/object", -1))
break; break;
if(!strcasecmp(node_name.buf, "param")) if(!_strnicmp(node_name.buf, "param", -1))
parse_obj_node_param(item, hhc_root, node.buf, info->pCHMInfo->codePage); parse_obj_node_param(item, hhc_root, node.buf, info->pCHMInfo->codePage);
strbuf_zero(&node); strbuf_zero(&node);
@ -195,7 +195,7 @@ static ContentItem *parse_ul(HHInfo *info, stream_t *stream, ContentItem *hhc_ro
TRACE("%s\n", node.buf); TRACE("%s\n", node.buf);
if(!strcasecmp(node_name.buf, "object")) { if(!_strnicmp(node_name.buf, "object", -1)) {
const char *ptr; const char *ptr;
int len; int len;
@ -210,10 +210,10 @@ static ContentItem *parse_ul(HHInfo *info, stream_t *stream, ContentItem *hhc_ro
if(!ret) if(!ret)
ret = prev; ret = prev;
} }
}else if(!strcasecmp(node_name.buf, "ul")) { }else if(!_strnicmp(node_name.buf, "ul", -1)) {
new_item = parse_ul(info, stream, hhc_root); new_item = parse_ul(info, stream, hhc_root);
insert_item(prev, new_item, INSERT_CHILD); insert_item(prev, new_item, INSERT_CHILD);
}else if(!strcasecmp(node_name.buf, "/ul")) { }else if(!_strnicmp(node_name.buf, "/ul", -1)) {
break; break;
} }
@ -245,7 +245,7 @@ static ContentItem *parse_hhc(HHInfo *info, IStream *str, ContentItem *hhc_root,
TRACE("%s\n", node.buf); TRACE("%s\n", node.buf);
if(!strcasecmp(node_name.buf, "ul")) { if(!_strnicmp(node_name.buf, "ul", -1)) {
ContentItem *item = parse_ul(info, &stream, hhc_root); ContentItem *item = parse_ul(info, &stream, hhc_root);
prev = insert_item(prev, item, INSERT_CHILD); prev = insert_item(prev, item, INSERT_CHILD);
if(!ret) if(!ret)
@ -268,7 +268,7 @@ static void insert_content_item(HWND hwnd, ContentItem *parent, ContentItem *ite
memset(&tvis, 0, sizeof(tvis)); memset(&tvis, 0, sizeof(tvis));
tvis.u.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE; tvis.u.item.mask = TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
tvis.u.item.cchTextMax = strlenW(item->name)+1; tvis.u.item.cchTextMax = lstrlenW(item->name)+1;
tvis.u.item.pszText = item->name; tvis.u.item.pszText = item->name;
tvis.u.item.lParam = (LPARAM)item; tvis.u.item.lParam = (LPARAM)item;
tvis.u.item.iImage = item->child ? HHTV_FOLDER : HHTV_DOCUMENT; tvis.u.item.iImage = item->child ? HHTV_FOLDER : HHTV_DOCUMENT;

View file

@ -216,7 +216,7 @@ BOOL NavigateToUrl(HHInfo *info, LPCWSTR surl)
TRACE("%s\n", debugstr_w(surl)); TRACE("%s\n", debugstr_w(surl));
if (strstrW(surl, url_indicator)) { if (wcsstr(surl, url_indicator)) {
hres = navigate_url(info, surl); hres = navigate_url(info, surl);
if(SUCCEEDED(hres)) if(SUCCEEDED(hres))
return TRUE; return TRUE;
@ -288,7 +288,7 @@ static void DoSync(HHInfo *info)
static const WCHAR delimW[] = {':',':','/',0}; static const WCHAR delimW[] = {':',':','/',0};
const WCHAR *index; const WCHAR *index;
index = strstrW(url, delimW); index = wcsstr(url, delimW);
if (index) if (index)
ActivateContentTopic(info->tabs[TAB_CONTENTS].hwnd, index + 3, info->content); /* skip over ::/ */ ActivateContentTopic(info->tabs[TAB_CONTENTS].hwnd, index + 3, info->content); /* skip over ::/ */
@ -639,7 +639,7 @@ static LRESULT OnTopicChange(HHInfo *info, void *user_data)
memset(&lvi, 0, sizeof(lvi)); memset(&lvi, 0, sizeof(lvi));
lvi.iItem = i; lvi.iItem = i;
lvi.mask = LVIF_TEXT|LVIF_PARAM; lvi.mask = LVIF_TEXT|LVIF_PARAM;
lvi.cchTextMax = strlenW(name)+1; lvi.cchTextMax = lstrlenW(name)+1;
lvi.pszText = name; lvi.pszText = name;
lvi.lParam = (LPARAM) item; lvi.lParam = (LPARAM) item;
SendMessageW(info->popup.hwndList, LVM_INSERTITEMW, 0, (LPARAM)&lvi); SendMessageW(info->popup.hwndList, LVM_INSERTITEMW, 0, (LPARAM)&lvi);
@ -1025,7 +1025,7 @@ static BOOL HH_AddToolbar(HHInfo *pHHInfo)
for (dwIndex = 0; dwIndex < dwNumButtons; dwIndex++) for (dwIndex = 0; dwIndex < dwNumButtons; dwIndex++)
{ {
LPWSTR szBuf = HH_LoadString(buttons[dwIndex].idCommand); LPWSTR szBuf = HH_LoadString(buttons[dwIndex].idCommand);
DWORD dwLen = strlenW(szBuf); DWORD dwLen = lstrlenW(szBuf);
szBuf[dwLen + 1] = 0; /* Double-null terminate */ szBuf[dwLen + 1] = 0; /* Double-null terminate */
buttons[dwIndex].iString = (DWORD)SendMessageW(hToolbar, TB_ADDSTRINGW, 0, (LPARAM)szBuf); buttons[dwIndex].iString = (DWORD)SendMessageW(hToolbar, TB_ADDSTRINGW, 0, (LPARAM)szBuf);
@ -1958,7 +1958,7 @@ HHInfo *find_window(const WCHAR *window)
LIST_FOR_EACH_ENTRY(info, &window_list, HHInfo, entry) LIST_FOR_EACH_ENTRY(info, &window_list, HHInfo, entry)
{ {
if (strcmpW(info->WinType.pszType, window) == 0) if (lstrcmpW(info->WinType.pszType, window) == 0)
return info; return info;
} }
return NULL; return NULL;

View file

@ -97,38 +97,43 @@ static const char *command_to_string(UINT command)
#undef X #undef X
} }
static BOOL resolve_filename(const WCHAR *filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window) static BOOL resolve_filename(const WCHAR *env_filename, WCHAR *fullname, DWORD buflen, WCHAR **index, WCHAR **window)
{ {
const WCHAR *extra;
WCHAR chm_file[MAX_PATH];
static const WCHAR helpW[] = {'\\','h','e','l','p','\\',0}; static const WCHAR helpW[] = {'\\','h','e','l','p','\\',0};
static const WCHAR delimW[] = {':',':',0}; static const WCHAR delimW[] = {':',':',0};
static const WCHAR delim2W[] = {'>',0}; static const WCHAR delim2W[] = {'>',0};
filename = skip_schema(filename); DWORD env_len;
WCHAR *filename, *extra;
env_filename = skip_schema(env_filename);
/* the format is "helpFile[::/index][>window]" */ /* the format is "helpFile[::/index][>window]" */
if (index) *index = NULL; if (index) *index = NULL;
if (window) *window = NULL; if (window) *window = NULL;
extra = strstrW(filename, delim2W); env_len = ExpandEnvironmentStringsW(env_filename, NULL, 0);
if (!env_len)
return 0;
filename = heap_alloc(env_len * sizeof(WCHAR));
if (filename == NULL)
return 0;
ExpandEnvironmentStringsW(env_filename, filename, env_len);
extra = wcsstr(filename, delim2W);
if (extra) if (extra)
{ {
memcpy(chm_file, filename, (extra-filename)*sizeof(WCHAR)); *extra = 0;
chm_file[extra-filename] = 0;
filename = chm_file;
if (window) if (window)
*window = strdupW(extra+1); *window = strdupW(extra+1);
} }
extra = strstrW(filename, delimW); extra = wcsstr(filename, delimW);
if (extra) if (extra)
{ {
if (filename != chm_file) *extra = 0;
memcpy(chm_file, filename, (extra-filename)*sizeof(WCHAR));
chm_file[extra-filename] = 0;
filename = chm_file;
if (index) if (index)
*index = strdupW(extra+2); *index = strdupW(extra+2);
} }
@ -137,9 +142,12 @@ static BOOL resolve_filename(const WCHAR *filename, WCHAR *fullname, DWORD bufle
if (GetFileAttributesW(fullname) == INVALID_FILE_ATTRIBUTES) if (GetFileAttributesW(fullname) == INVALID_FILE_ATTRIBUTES)
{ {
GetWindowsDirectoryW(fullname, buflen); GetWindowsDirectoryW(fullname, buflen);
strcatW(fullname, helpW); lstrcatW(fullname, helpW);
strcatW(fullname, filename); lstrcatW(fullname, filename);
} }
heap_free(filename);
return (GetFileAttributesW(fullname) != INVALID_FILE_ATTRIBUTES); return (GetFileAttributesW(fullname) != INVALID_FILE_ATTRIBUTES);
} }
@ -206,12 +214,12 @@ HWND WINAPI HtmlHelpW(HWND caller, LPCWSTR filename, UINT command, DWORD_PTR dat
static const WCHAR delimW[] = {':',':',0}; static const WCHAR delimW[] = {':',':',0};
const WCHAR *i = (const WCHAR *)data; const WCHAR *i = (const WCHAR *)data;
index = strstrW(i, delimW); index = wcsstr(i, delimW);
if(index) if(index)
{ {
if(memcmp(info->pCHMInfo->szFile, i, index-i)) if(memcmp(info->pCHMInfo->szFile, i, index-i))
FIXME("Opening a CHM file in the context of another is not supported.\n"); FIXME("Opening a CHM file in the context of another is not supported.\n");
index += strlenW(delimW); index += lstrlenW(delimW);
} }
else else
index = i; index = i;

View file

@ -26,6 +26,7 @@
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
#include "wine/winternl.h"
#include "winuser.h" #include "winuser.h"
#include "winnls.h" #include "winnls.h"
#include "htmlhelp.h" #include "htmlhelp.h"
@ -39,7 +40,6 @@
#endif #endif
#include "wine/itss.h" #include "wine/itss.h"
#include "wine/unicode.h"
#include "wine/heap.h" #include "wine/heap.h"
#include "wine/list.h" #include "wine/list.h"
@ -258,7 +258,7 @@ static inline LPWSTR strdupW(LPCWSTR str)
if(!str) if(!str)
return NULL; return NULL;
size = (strlenW(str)+1)*sizeof(WCHAR); size = (lstrlenW(str)+1)*sizeof(WCHAR);
ret = heap_alloc(size); ret = heap_alloc(size);
memcpy(ret, str, size); memcpy(ret, str, size);

View file

@ -43,7 +43,7 @@ static void fill_index_tree(HWND hwnd, IndexItem *item)
lvi.iItem = index++; lvi.iItem = index++;
lvi.mask = LVIF_TEXT|LVIF_PARAM|LVIF_INDENT; lvi.mask = LVIF_TEXT|LVIF_PARAM|LVIF_INDENT;
lvi.iIndent = item->indentLevel; lvi.iIndent = item->indentLevel;
lvi.cchTextMax = strlenW(item->keyword)+1; lvi.cchTextMax = lstrlenW(item->keyword)+1;
lvi.pszText = item->keyword; lvi.pszText = item->keyword;
lvi.lParam = (LPARAM)item; lvi.lParam = (LPARAM)item;
item->id = (HTREEITEM)SendMessageW(hwnd, LVM_INSERTITEMW, 0, (LPARAM)&lvi); item->id = (HTREEITEM)SendMessageW(hwnd, LVM_INSERTITEMW, 0, (LPARAM)&lvi);
@ -83,20 +83,20 @@ static void parse_index_obj_node_param(IndexItem *item, const char *text, UINT c
/* Allocate a new sub-item, either on the first run or whenever a /* Allocate a new sub-item, either on the first run or whenever a
* sub-topic has filled out both the "name" and "local" params. * sub-topic has filled out both the "name" and "local" params.
*/ */
if(item->itemFlags == 0x11 && (!strncasecmp("name", ptr, len) || !strncasecmp("local", ptr, len))) if(item->itemFlags == 0x11 && (!_strnicmp("name", ptr, len) || !_strnicmp("local", ptr, len)))
item_realloc(item, item->nItems+1); item_realloc(item, item->nItems+1);
if(!strncasecmp("keyword", ptr, len)) { if(!_strnicmp("keyword", ptr, len)) {
param = &item->keyword; param = &item->keyword;
}else if(!item->keyword && !strncasecmp("name", ptr, len)) { }else if(!item->keyword && !_strnicmp("name", ptr, len)) {
/* Some HTML Help index files use an additional "name" parameter /* Some HTML Help index files use an additional "name" parameter
* rather than the "keyword" parameter. In this case, the first * rather than the "keyword" parameter. In this case, the first
* occurrence of the "name" parameter is the keyword. * occurrence of the "name" parameter is the keyword.
*/ */
param = &item->keyword; param = &item->keyword;
}else if(!strncasecmp("name", ptr, len)) { }else if(!_strnicmp("name", ptr, len)) {
item->itemFlags |= 0x01; item->itemFlags |= 0x01;
param = &item->items[item->nItems-1].name; param = &item->items[item->nItems-1].name;
}else if(!strncasecmp("local", ptr, len)) { }else if(!_strnicmp("local", ptr, len)) {
item->itemFlags |= 0x10; item->itemFlags |= 0x10;
param = &item->items[item->nItems-1].local; param = &item->items[item->nItems-1].local;
}else { }else {
@ -137,9 +137,9 @@ static IndexItem *parse_index_sitemap_object(HHInfo *info, stream_t *stream)
TRACE("%s\n", node.buf); TRACE("%s\n", node.buf);
if(!strcasecmp(node_name.buf, "param")) { if(!_strnicmp(node_name.buf, "param", -1)) {
parse_index_obj_node_param(item, node.buf, info->pCHMInfo->codePage); parse_index_obj_node_param(item, node.buf, info->pCHMInfo->codePage);
}else if(!strcasecmp(node_name.buf, "/object")) { }else if(!_strnicmp(node_name.buf, "/object", -1)) {
break; break;
}else { }else {
WARN("Unhandled tag! %s\n", node_name.buf); WARN("Unhandled tag! %s\n", node_name.buf);
@ -173,7 +173,7 @@ static IndexItem *parse_li(HHInfo *info, stream_t *stream)
TRACE("%s\n", node.buf); TRACE("%s\n", node.buf);
if(!strcasecmp(node_name.buf, "object")) { if(!_strnicmp(node_name.buf, "object", -1)) {
const char *ptr; const char *ptr;
int len; int len;
@ -228,11 +228,11 @@ static void parse_hhindex(HHInfo *info, IStream *str, IndexItem *item)
TRACE("%s\n", node.buf); TRACE("%s\n", node.buf);
if(!strcasecmp(node_name.buf, "li")) { if(!_strnicmp(node_name.buf, "li", -1)) {
IndexItem *new_item; IndexItem *new_item;
new_item = parse_li(info, &stream); new_item = parse_li(info, &stream);
if(new_item && item->keyword && strcmpW(new_item->keyword, item->keyword) == 0) { if(new_item && item->keyword && lstrcmpW(new_item->keyword, item->keyword) == 0) {
int num_items = item->nItems; int num_items = item->nItems;
item_realloc(item, num_items+1); item_realloc(item, num_items+1);
@ -246,9 +246,9 @@ static void parse_hhindex(HHInfo *info, IStream *str, IndexItem *item)
item = item->next; item = item->next;
item->indentLevel = indent_level; item->indentLevel = indent_level;
} }
}else if(!strcasecmp(node_name.buf, "ul")) { }else if(!_strnicmp(node_name.buf, "ul", -1)) {
indent_level++; indent_level++;
}else if(!strcasecmp(node_name.buf, "/ul")) { }else if(!_strnicmp(node_name.buf, "/ul", -1)) {
indent_level--; indent_level--;
}else { }else {
WARN("Unhandled tag! %s\n", node_name.buf); WARN("Unhandled tag! %s\n", node_name.buf);

View file

@ -29,7 +29,7 @@ static SearchItem *SearchCHM_Folder(SearchItem *item, IStorage *pStorage,
/* Allocate a ListView entry for a search result. */ /* Allocate a ListView entry for a search result. */
static SearchItem *alloc_search_item(WCHAR *title, const WCHAR *filename) static SearchItem *alloc_search_item(WCHAR *title, const WCHAR *filename)
{ {
int filename_len = filename ? (strlenW(filename)+1)*sizeof(WCHAR) : 0; int filename_len = filename ? (lstrlenW(filename)+1)*sizeof(WCHAR) : 0;
SearchItem *item; SearchItem *item;
item = heap_alloc_zero(sizeof(SearchItem)); item = heap_alloc_zero(sizeof(SearchItem));
@ -56,7 +56,7 @@ static void fill_search_tree(HWND hwndList, SearchItem *item)
memset(&lvi, 0, sizeof(lvi)); memset(&lvi, 0, sizeof(lvi));
lvi.iItem = index++; lvi.iItem = index++;
lvi.mask = LVIF_TEXT|LVIF_PARAM; lvi.mask = LVIF_TEXT|LVIF_PARAM;
lvi.cchTextMax = strlenW(item->title)+1; lvi.cchTextMax = lstrlenW(item->title)+1;
lvi.pszText = item->title; lvi.pszText = item->title;
lvi.lParam = (LPARAM)item; lvi.lParam = (LPARAM)item;
item->id = (HTREEITEM)SendMessageW(hwndList, LVM_INSERTITEMW, 0, (LPARAM)&lvi); item->id = (HTREEITEM)SendMessageW(hwndList, LVM_INSERTITEMW, 0, (LPARAM)&lvi);
@ -102,7 +102,7 @@ static WCHAR *SearchCHM_File(IStorage *pStorage, const WCHAR *file, const char *
char *text = &content.buf[1]; char *text = &content.buf[1];
int textlen = content.len-1; int textlen = content.len-1;
if(!strcasecmp(node_name.buf, "title")) if(!_strnicmp(node_name.buf, "title", -1))
{ {
int wlen = MultiByteToWideChar(CP_ACP, 0, text, textlen, NULL, 0); int wlen = MultiByteToWideChar(CP_ACP, 0, text, textlen, NULL, 0);
title = heap_alloc((wlen+1)*sizeof(WCHAR)); title = heap_alloc((wlen+1)*sizeof(WCHAR));
@ -168,14 +168,14 @@ static SearchItem *SearchCHM_Storage(SearchItem *item, IStorage *pStorage,
while (IEnumSTATSTG_Next(elem, 1, &entries, &retr) == NOERROR) while (IEnumSTATSTG_Next(elem, 1, &entries, &retr) == NOERROR)
{ {
filename = entries.pwcsName; filename = entries.pwcsName;
while(strchrW(filename, '/')) while(wcschr(filename, '/'))
filename = strchrW(filename, '/')+1; filename = wcschr(filename, '/')+1;
switch(entries.type) { switch(entries.type) {
case STGTY_STORAGE: case STGTY_STORAGE:
item = SearchCHM_Folder(item, pStorage, filename, needle); item = SearchCHM_Folder(item, pStorage, filename, needle);
break; break;
case STGTY_STREAM: case STGTY_STREAM:
if(strstrW(filename, szHTMext)) if(wcsstr(filename, szHTMext))
{ {
WCHAR *title = SearchCHM_File(pStorage, filename, needle); WCHAR *title = SearchCHM_File(pStorage, filename, needle);

View file

@ -70,7 +70,7 @@ dll/win32/faultrep # Synced to WineStaging-4.18
dll/win32/fontsub # Synced to WineStaging-2.9 dll/win32/fontsub # Synced to WineStaging-2.9
dll/win32/fusion # Synced to WineStaging-4.18 dll/win32/fusion # Synced to WineStaging-4.18
dll/win32/gdiplus # Synced to WineStaging-4.0 dll/win32/gdiplus # Synced to WineStaging-4.0
dll/win32/hhctrl.ocx # Synced to WineStaging-4.0 dll/win32/hhctrl.ocx # Synced to WineStaging-4.18
dll/win32/hlink # Synced to WineStaging-4.0 dll/win32/hlink # Synced to WineStaging-4.0
dll/win32/hnetcfg # Synced to WineStaging-4.18 dll/win32/hnetcfg # Synced to WineStaging-4.18
dll/win32/httpapi # Synced to WineStaging-3.3 dll/win32/httpapi # Synced to WineStaging-3.3