[PATCH 1/4] shell32: Add ShellLinkObject stubs.
Nikolay Sivov
nsivov at codeweavers.com
Sun Sep 13 16:09:00 CDT 2020
On 9/13/20 11:33 PM, Myah Caron wrote:
> +typedef struct {
> + IShellLinkDual2 IShellLinkDual2_iface;
> + LONG ref;
> +
> + FolderItemImpl *item;
> + IShellLinkW *shell_link;
> + IPersistFile *persist_file;
> +} ShellLinkObjectImpl;
It looks like you're only using shell_link.
> +static HRESULT ShellLinkObject_Constructor(FolderItemImpl *item, IShellLinkDual2 **link)
It's not used until 3/4. I think it's fine to have tests in first patch,
and merge this one with 3/4.
> + This->shell_link = NULL;
> + hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
> + &IID_IShellLinkW, (LPVOID*)&This->shell_link);
> + if (hr != S_OK) goto free_this;
> +
> + This->persist_file = NULL;
> + IShellLinkW_QueryInterface(This->shell_link, &IID_IPersistFile,
> + (LPVOID*)&This->persist_file);
> + if (hr != S_OK) goto free_this;
This is probably missing assignment to hr. For checks FAILED() is
usually sufficient.
> +
> + hr = IPersistFile_Load(This->persist_file, item->path, STGM_READ);
> + if (hr != S_OK) goto free_this;
> +
> + IShellLinkDual2_AddRef(&This->IShellLinkDual2_iface);
> +
> + *link = (IShellLinkDual2 *)&This->IShellLinkDual2_iface;
> + return S_OK;
Why AddRef here?
> +
> + free_this:
> + heap_free(This);
> + return hr;
It's easy to avoid goto in this case.
More information about the wine-devel
mailing list