Fabian Maurer (@DarkShadow44) commented about dlls/shdocvw/shdocvw_main.c:
- /* Guessing at parameter 3 based on IShellFolder's ParseDisplayName */
- FIXME("stub: 0x%lx %s %p %p\n",codepage,debugstr_w(lpszDisplayName),pbc,ppidl);
- return E_FAIL;
- FIXME("%lu %s %p %p: semi-stub\n", codepage, debugstr_w(name), pbc, ppidl);
- /* Make sure that it's correct URL */
- res.cbSize = sizeof(res);
- hr = ParseURLW(name, &res);
- if (hr != S_OK) return E_FAIL;
- hr = SHGetFolderLocation(0, CSIDL_INTERNET, 0, 0, &parent);
- if (hr != S_OK) return hr;
- len = wcslen(name) + 3;
- size = sizeof(WORD) + sizeof(*ie_data) + len * sizeof(WCHAR) + sizeof(*next);
Might be a stupid question, but why +3, isn't this triple null terminated? Also I noticed you do a sizeof(WORD) for the child ITEMIDLIST, I assume to not waste the "BYTE abID[1];". Later you do something similar for ie_pidl_data, but using "FIELD_OFFSET(struct ie_pidl_data, name)". I'd find it easier to understand if you used the same concept for ITEMIDLIST, like FIELD_OFFSET(ITEMIDLIST, mkid.abID). I have to admit it took me a while to get where the WORD was coming from.