https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6cbb6445242203dcd1f112...
commit 6cbb6445242203dcd1f112c62796981e6a1f4d6f Author: Amine Khaldi amine.khaldi@reactos.org AuthorDate: Sat Oct 26 22:57:01 2019 +0100 Commit: Amine Khaldi amine.khaldi@reactos.org CommitDate: Sat Oct 26 22:57:01 2019 +0100
[HHCTRL.OCX] Sync with Wine Staging 4.18. CORE-16441 --- dll/win32/hhctrl.ocx/chm.c | 24 +++++++++++------------ dll/win32/hhctrl.ocx/content.c | 20 +++++++++---------- dll/win32/hhctrl.ocx/help.c | 10 +++++----- dll/win32/hhctrl.ocx/hhctrl.c | 44 +++++++++++++++++++++++++----------------- dll/win32/hhctrl.ocx/hhctrl.h | 4 ++-- dll/win32/hhctrl.ocx/index.c | 26 ++++++++++++------------- dll/win32/hhctrl.ocx/search.c | 12 ++++++------ media/doc/README.WINE | 2 +- 8 files changed, 75 insertions(+), 67 deletions(-)
diff --git a/dll/win32/hhctrl.ocx/chm.c b/dll/win32/hhctrl.ocx/chm.c index 01403368b0f..07211f1dbd5 100644 --- a/dll/win32/hhctrl.ocx/chm.c +++ b/dll/win32/hhctrl.ocx/chm.c @@ -228,11 +228,11 @@ static WCHAR *FindHTMLHelpSetting(HHInfo *info, const WCHAR *extW) WCHAR *filename; HRESULT hr;
- filename = heap_alloc( (strlenW(info->pCHMInfo->compiledFile) - + strlenW(periodW) + strlenW(extW) + 1) * sizeof(WCHAR) ); - strcpyW(filename, info->pCHMInfo->compiledFile); - strcatW(filename, periodW); - strcatW(filename, extW); + filename = heap_alloc( (lstrlenW(info->pCHMInfo->compiledFile) + + lstrlenW(periodW) + lstrlenW(extW) + 1) * sizeof(WCHAR) ); + lstrcpyW(filename, info->pCHMInfo->compiledFile); + lstrcatW(filename, periodW); + lstrcatW(filename, extW); hr = IStorage_OpenStream(pStorage, filename, NULL, STGM_READ, 0, &pStream); 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 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); - if(!strncmpiW(msits_schema, url, ARRAY_SIZE(msits_schema))) + if(!_wcsnicmp(msits_schema, 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; @@ -500,15 +500,15 @@ void SetChmPath(ChmPath *file, LPCWSTR base_file, LPCWSTR path)
path = skip_schema(path);
- ptr = strstrW(path, separatorW); + ptr = wcsstr(path, separatorW); if(ptr) { WCHAR chm_file[MAX_PATH]; WCHAR rel_path[MAX_PATH]; WCHAR base_path[MAX_PATH]; LPWSTR p;
- strcpyW(base_path, base_file); - p = strrchrW(base_path, '\'); + lstrcpyW(base_path, base_file); + p = wcsrchr(base_path, '\'); if(p) *p = 0;
@@ -595,7 +595,7 @@ WCHAR *GetDocumentTitle(CHMInfo *info, LPCWSTR document)
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) { document_title = strdupnAtoW(&content.buf[1], content.len-1); diff --git a/dll/win32/hhctrl.ocx/content.c b/dll/win32/hhctrl.ocx/content.c index 6a7c8f8a8c2..0bf374344d0 100644 --- a/dll/win32/hhctrl.ocx/content.c +++ b/dll/win32/hhctrl.ocx/content.c @@ -62,11 +62,11 @@ static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const return; }
- if(!strncasecmp("name", ptr, len)) { + if(!_strnicmp("name", ptr, len)) { param = &item->name; - }else if(!strncasecmp("merge", ptr, len)) { + }else if(!_strnicmp("merge", ptr, len)) { param = &merge; - }else if(!strncasecmp("local", ptr, len)) { + }else if(!_strnicmp("local", ptr, len)) { param = &item->local; }else { 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);
- if(!strcasecmp(node_name.buf, "/object")) + if(!_strnicmp(node_name.buf, "/object", -1)) 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);
strbuf_zero(&node); @@ -195,7 +195,7 @@ static ContentItem *parse_ul(HHInfo *info, stream_t *stream, ContentItem *hhc_ro
TRACE("%s\n", node.buf);
- if(!strcasecmp(node_name.buf, "object")) { + if(!_strnicmp(node_name.buf, "object", -1)) { const char *ptr; int len;
@@ -210,10 +210,10 @@ static ContentItem *parse_ul(HHInfo *info, stream_t *stream, ContentItem *hhc_ro if(!ret) 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); insert_item(prev, new_item, INSERT_CHILD); - }else if(!strcasecmp(node_name.buf, "/ul")) { + }else if(!_strnicmp(node_name.buf, "/ul", -1)) { break; }
@@ -245,7 +245,7 @@ static ContentItem *parse_hhc(HHInfo *info, IStream *str, ContentItem *hhc_root,
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); prev = insert_item(prev, item, INSERT_CHILD); if(!ret) @@ -268,7 +268,7 @@ static void insert_content_item(HWND hwnd, ContentItem *parent, ContentItem *ite
memset(&tvis, 0, sizeof(tvis)); 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.lParam = (LPARAM)item; tvis.u.item.iImage = item->child ? HHTV_FOLDER : HHTV_DOCUMENT; diff --git a/dll/win32/hhctrl.ocx/help.c b/dll/win32/hhctrl.ocx/help.c index 75b28f2f57d..06f73358f44 100644 --- a/dll/win32/hhctrl.ocx/help.c +++ b/dll/win32/hhctrl.ocx/help.c @@ -216,7 +216,7 @@ BOOL NavigateToUrl(HHInfo *info, LPCWSTR surl)
TRACE("%s\n", debugstr_w(surl));
- if (strstrW(surl, url_indicator)) { + if (wcsstr(surl, url_indicator)) { hres = navigate_url(info, surl); if(SUCCEEDED(hres)) return TRUE; @@ -288,7 +288,7 @@ static void DoSync(HHInfo *info) static const WCHAR delimW[] = {':',':','/',0}; const WCHAR *index;
- index = strstrW(url, delimW); + index = wcsstr(url, delimW);
if (index) 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)); lvi.iItem = i; lvi.mask = LVIF_TEXT|LVIF_PARAM; - lvi.cchTextMax = strlenW(name)+1; + lvi.cchTextMax = lstrlenW(name)+1; lvi.pszText = name; lvi.lParam = (LPARAM) item; 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++) { LPWSTR szBuf = HH_LoadString(buttons[dwIndex].idCommand); - DWORD dwLen = strlenW(szBuf); + DWORD dwLen = lstrlenW(szBuf); szBuf[dwLen + 1] = 0; /* Double-null terminate */
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) { - if (strcmpW(info->WinType.pszType, window) == 0) + if (lstrcmpW(info->WinType.pszType, window) == 0) return info; } return NULL; diff --git a/dll/win32/hhctrl.ocx/hhctrl.c b/dll/win32/hhctrl.ocx/hhctrl.c index 7efca002f9f..893cdde6ea7 100644 --- a/dll/win32/hhctrl.ocx/hhctrl.c +++ b/dll/win32/hhctrl.ocx/hhctrl.c @@ -97,38 +97,43 @@ static const char *command_to_string(UINT command) #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 delimW[] = {':',':',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]" */ if (index) *index = 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) { - memcpy(chm_file, filename, (extra-filename)*sizeof(WCHAR)); - chm_file[extra-filename] = 0; - filename = chm_file; + *extra = 0; if (window) *window = strdupW(extra+1); }
- extra = strstrW(filename, delimW); + extra = wcsstr(filename, delimW); if (extra) { - if (filename != chm_file) - memcpy(chm_file, filename, (extra-filename)*sizeof(WCHAR)); - chm_file[extra-filename] = 0; - filename = chm_file; + *extra = 0; if (index) *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) { GetWindowsDirectoryW(fullname, buflen); - strcatW(fullname, helpW); - strcatW(fullname, filename); + lstrcatW(fullname, helpW); + lstrcatW(fullname, filename); } + + heap_free(filename); + 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}; const WCHAR *i = (const WCHAR *)data;
- index = strstrW(i, delimW); + index = wcsstr(i, delimW); if(index) { if(memcmp(info->pCHMInfo->szFile, i, index-i)) FIXME("Opening a CHM file in the context of another is not supported.\n"); - index += strlenW(delimW); + index += lstrlenW(delimW); } else index = i; diff --git a/dll/win32/hhctrl.ocx/hhctrl.h b/dll/win32/hhctrl.ocx/hhctrl.h index b358f543788..a03d09f5633 100644 --- a/dll/win32/hhctrl.ocx/hhctrl.h +++ b/dll/win32/hhctrl.ocx/hhctrl.h @@ -26,6 +26,7 @@
#include "windef.h" #include "winbase.h" +#include "wine/winternl.h" #include "winuser.h" #include "winnls.h" #include "htmlhelp.h" @@ -39,7 +40,6 @@ #endif
#include "wine/itss.h" -#include "wine/unicode.h" #include "wine/heap.h" #include "wine/list.h"
@@ -258,7 +258,7 @@ static inline LPWSTR strdupW(LPCWSTR str) if(!str) return NULL;
- size = (strlenW(str)+1)*sizeof(WCHAR); + size = (lstrlenW(str)+1)*sizeof(WCHAR); ret = heap_alloc(size); memcpy(ret, str, size);
diff --git a/dll/win32/hhctrl.ocx/index.c b/dll/win32/hhctrl.ocx/index.c index 8b80ce24e79..54151d0821e 100644 --- a/dll/win32/hhctrl.ocx/index.c +++ b/dll/win32/hhctrl.ocx/index.c @@ -43,7 +43,7 @@ static void fill_index_tree(HWND hwnd, IndexItem *item) lvi.iItem = index++; lvi.mask = LVIF_TEXT|LVIF_PARAM|LVIF_INDENT; lvi.iIndent = item->indentLevel; - lvi.cchTextMax = strlenW(item->keyword)+1; + lvi.cchTextMax = lstrlenW(item->keyword)+1; lvi.pszText = item->keyword; lvi.lParam = (LPARAM)item; 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 * 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); - if(!strncasecmp("keyword", ptr, len)) { + if(!_strnicmp("keyword", ptr, len)) { 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 * rather than the "keyword" parameter. In this case, the first * occurrence of the "name" parameter is the keyword. */ param = &item->keyword; - }else if(!strncasecmp("name", ptr, len)) { + }else if(!_strnicmp("name", ptr, len)) { item->itemFlags |= 0x01; param = &item->items[item->nItems-1].name; - }else if(!strncasecmp("local", ptr, len)) { + }else if(!_strnicmp("local", ptr, len)) { item->itemFlags |= 0x10; param = &item->items[item->nItems-1].local; }else { @@ -137,9 +137,9 @@ static IndexItem *parse_index_sitemap_object(HHInfo *info, stream_t *stream)
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); - }else if(!strcasecmp(node_name.buf, "/object")) { + }else if(!_strnicmp(node_name.buf, "/object", -1)) { break; }else { 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);
- if(!strcasecmp(node_name.buf, "object")) { + if(!_strnicmp(node_name.buf, "object", -1)) { const char *ptr; int len;
@@ -228,11 +228,11 @@ static void parse_hhindex(HHInfo *info, IStream *str, IndexItem *item)
TRACE("%s\n", node.buf);
- if(!strcasecmp(node_name.buf, "li")) { + if(!_strnicmp(node_name.buf, "li", -1)) { IndexItem *new_item;
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;
item_realloc(item, num_items+1); @@ -246,9 +246,9 @@ static void parse_hhindex(HHInfo *info, IStream *str, IndexItem *item) item = item->next; item->indentLevel = indent_level; } - }else if(!strcasecmp(node_name.buf, "ul")) { + }else if(!_strnicmp(node_name.buf, "ul", -1)) { indent_level++; - }else if(!strcasecmp(node_name.buf, "/ul")) { + }else if(!_strnicmp(node_name.buf, "/ul", -1)) { indent_level--; }else { WARN("Unhandled tag! %s\n", node_name.buf); diff --git a/dll/win32/hhctrl.ocx/search.c b/dll/win32/hhctrl.ocx/search.c index 0e198b87367..f9c13a91312 100644 --- a/dll/win32/hhctrl.ocx/search.c +++ b/dll/win32/hhctrl.ocx/search.c @@ -29,7 +29,7 @@ static SearchItem *SearchCHM_Folder(SearchItem *item, IStorage *pStorage, /* Allocate a ListView entry for a search result. */ 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;
item = heap_alloc_zero(sizeof(SearchItem)); @@ -56,7 +56,7 @@ static void fill_search_tree(HWND hwndList, SearchItem *item) memset(&lvi, 0, sizeof(lvi)); lvi.iItem = index++; lvi.mask = LVIF_TEXT|LVIF_PARAM; - lvi.cchTextMax = strlenW(item->title)+1; + lvi.cchTextMax = lstrlenW(item->title)+1; lvi.pszText = item->title; lvi.lParam = (LPARAM)item; 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]; 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); 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) { filename = entries.pwcsName; - while(strchrW(filename, '/')) - filename = strchrW(filename, '/')+1; + while(wcschr(filename, '/')) + filename = wcschr(filename, '/')+1; switch(entries.type) { case STGTY_STORAGE: item = SearchCHM_Folder(item, pStorage, filename, needle); break; case STGTY_STREAM: - if(strstrW(filename, szHTMext)) + if(wcsstr(filename, szHTMext)) { WCHAR *title = SearchCHM_File(pStorage, filename, needle);
diff --git a/media/doc/README.WINE b/media/doc/README.WINE index fdc5b31dc7f..01c8ef6cb1e 100644 --- a/media/doc/README.WINE +++ b/media/doc/README.WINE @@ -70,7 +70,7 @@ dll/win32/faultrep # Synced to WineStaging-4.18 dll/win32/fontsub # Synced to WineStaging-2.9 dll/win32/fusion # Synced to WineStaging-4.18 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/hnetcfg # Synced to WineStaging-4.18 dll/win32/httpapi # Synced to WineStaging-3.3