Nikolay Sivov : wshom: Implement get_WorkingDirectory(), handle allocation failures.
Alexandre Julliard
julliard at winehq.org
Wed Feb 5 13:18:53 CST 2014
Module: wine
Branch: master
Commit: 2b1f2001b153190bbd3bb138684149f672a0bf12
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2b1f2001b153190bbd3bb138684149f672a0bf12
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Feb 5 09:29:19 2014 +0400
wshom: Implement get_WorkingDirectory(), handle allocation failures.
---
dlls/wshom.ocx/shell.c | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/dlls/wshom.ocx/shell.c b/dlls/wshom.ocx/shell.c
index 2dc2bbe..ea9caba 100644
--- a/dlls/wshom.ocx/shell.c
+++ b/dlls/wshom.ocx/shell.c
@@ -409,7 +409,7 @@ static HRESULT WINAPI WshShortcut_get_Arguments(IWshShortcut *iface, BSTR *Argum
return hr;
*Arguments = SysAllocString(buffW);
- return S_OK;
+ return *Arguments ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI WshShortcut_put_Arguments(IWshShortcut *iface, BSTR Arguments)
@@ -501,14 +501,26 @@ static HRESULT WINAPI WshShortcut_put_WindowStyle(IWshShortcut *iface, int ShowC
static HRESULT WINAPI WshShortcut_get_WorkingDirectory(IWshShortcut *iface, BSTR *WorkingDirectory)
{
WshShortcut *This = impl_from_IWshShortcut(iface);
- FIXME("(%p)->(%p): stub\n", This, WorkingDirectory);
- return E_NOTIMPL;
+ WCHAR buffW[MAX_PATH];
+ HRESULT hr;
+
+ TRACE("(%p)->(%p)\n", This, WorkingDirectory);
+
+ if (!WorkingDirectory)
+ return E_POINTER;
+
+ *WorkingDirectory = NULL;
+ hr = IShellLinkW_GetWorkingDirectory(This->link, buffW, sizeof(buffW)/sizeof(WCHAR));
+ if (FAILED(hr)) return hr;
+
+ *WorkingDirectory = SysAllocString(buffW);
+ return *WorkingDirectory ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI WshShortcut_put_WorkingDirectory(IWshShortcut *iface, BSTR WorkingDirectory)
{
WshShortcut *This = impl_from_IWshShortcut(iface);
- TRACE("(%p)->(%s): stub\n", This, debugstr_w(WorkingDirectory));
+ TRACE("(%p)->(%s)\n", This, debugstr_w(WorkingDirectory));
return IShellLinkW_SetWorkingDirectory(This->link, WorkingDirectory);
}
@@ -584,6 +596,13 @@ static HRESULT WshShortcut_Create(const WCHAR *path, IDispatch **shortcut)
}
This->path_link = SysAllocString(path);
+ if (!This->path_link)
+ {
+ IShellLinkW_Release(This->link);
+ HeapFree(GetProcessHeap(), 0, This);
+ return E_OUTOFMEMORY;
+ }
+
*shortcut = (IDispatch*)&This->IWshShortcut_iface;
return S_OK;
More information about the wine-cvs
mailing list