hhctrl.ocx: Fix parsing of some TOC topics that reference other files.

This commit is contained in:
Erich Hoover 2012-02-13 11:45:29 -07:00 committed by Alexandre Julliard
parent 0872572a6d
commit 98f0be8dc3
1 changed files with 26 additions and 5 deletions

View File

@ -50,11 +50,21 @@ static void free_content_item(ContentItem *item)
} }
} }
static void store_param(LPWSTR *param, const char *value, int len)
{
int wlen;
wlen = MultiByteToWideChar(CP_ACP, 0, value, len, NULL, 0);
*param = heap_alloc((wlen+1)*sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, value, len, *param, wlen);
(*param)[wlen] = 0;
}
static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const char *text) static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const char *text)
{ {
const char *ptr; const char *ptr;
LPWSTR *param, merge; LPWSTR *param, merge;
int len, wlen; int len;
ptr = get_attr(text, "name", &len); ptr = get_attr(text, "name", &len);
if(!ptr) { if(!ptr) {
@ -79,10 +89,21 @@ static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const
return; return;
} }
wlen = MultiByteToWideChar(CP_ACP, 0, ptr, len, NULL, 0); /*
*param = heap_alloc((wlen+1)*sizeof(WCHAR)); * "merge" parameter data (referencing another CHM file) can be incorporated into the "local" parameter
MultiByteToWideChar(CP_ACP, 0, ptr, len, *param, wlen); * by specifying the filename in the format:
(*param)[wlen] = 0; * MS-ITS:file.chm::/local_path.htm
*/
if(param == &item->local && strstr(ptr, "::"))
{
const char *local = strstr(ptr, "::")+2;
int local_len = len-(local-ptr);
store_param(&item->local, local, local_len);
param = &merge;
}
store_param(param, ptr, len);
if(param == &merge) { if(param == &merge) {
SetChmPath(&item->merge, hhc_root->merge.chm_file, merge); SetChmPath(&item->merge, hhc_root->merge.chm_file, merge);