Module: wine Branch: refs/heads/master Commit: 506e09308ace691f5fdbab4619e67ca0349bc66b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=506e09308ace691f5fdbab46...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Aug 2 21:29:58 2006 +0200
hlink: Added HlinkIsShortcut implementation.
---
dlls/hlink/hlink.spec | 2 +- dlls/hlink/hlink_main.c | 19 +++++++++++++++++++ dlls/hlink/tests/hlink.c | 38 ++++++++++++++++++++++++++++++++++++++ include/hlink.idl | 1 + 4 files changed, 59 insertions(+), 1 deletions(-)
diff --git a/dlls/hlink/hlink.spec b/dlls/hlink/hlink.spec index 0d9a2c9..c0386b5 100644 --- a/dlls/hlink/hlink.spec +++ b/dlls/hlink/hlink.spec @@ -17,7 +17,7 @@ 22 stub HlinkGetSpecialReference 23 stub HlinkCreateShortcut 24 stub HlinkResolveShortcut -25 stub HlinkIsShortcut +25 stdcall HlinkIsShortcut(wstr) 26 stub HlinkResolveShortcutToString 27 stub HlinkCreateShortcutFromString 28 stub HlinkGetValueFromParams diff --git a/dlls/hlink/hlink_main.c b/dlls/hlink/hlink_main.c index dfa4464..bd1ed6e 100644 --- a/dlls/hlink/hlink_main.c +++ b/dlls/hlink/hlink_main.c @@ -31,6 +31,7 @@ #include "ole2.h" #include "unknwn.h"
#include "wine/debug.h" +#include "wine/unicode.h" #include "hlink.h"
#include "initguid.h" @@ -254,6 +255,24 @@ HRESULT WINAPI HlinkNavigateToStringRefe return r; }
+HRESULT WINAPI HlinkIsShortcut(LPCWSTR pwzFileName) +{ + int len; + + static const WCHAR url_ext[] = {'.','u','r','l',0}; + + TRACE("(%s)\n", debugstr_w(pwzFileName)); + + if(!pwzFileName) + return E_INVALIDARG; + + len = strlenW(pwzFileName)-4; + if(len < 0) + return S_FALSE; + + return strcmpiW(pwzFileName+len, url_ext) ? S_FALSE : S_OK; +} + static HRESULT WINAPI HLinkCF_fnQueryInterface ( LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj) { diff --git a/dlls/hlink/tests/hlink.c b/dlls/hlink/tests/hlink.c index 47bf80f..e44a799 100644 --- a/dlls/hlink/tests/hlink.c +++ b/dlls/hlink/tests/hlink.c @@ -25,6 +25,42 @@ #include <hlguids.h>
#include "wine/test.h"
+static void test_HlinkIsShortcut(void) +{ + int i; + HRESULT hres; + + static const WCHAR file0[] = {'f','i','l','e',0}; + static const WCHAR file1[] = {'f','i','l','e','.','u','r','l',0}; + static const WCHAR file2[] = {'f','i','l','e','.','l','n','k',0}; + static const WCHAR file3[] = {'f','i','l','e','.','u','R','l',0}; + static const WCHAR file4[] = {'f','i','l','e','u','r','l',0}; + static const WCHAR file5[] = {'c',':','\','f','i','l','e','.','u','r','l',0}; + static const WCHAR file6[] = {'c',':','\','f','i','l','e','.','l','n','k',0}; + static const WCHAR file7[] = {'.','u','r','l',0}; + + static struct { + LPCWSTR file; + HRESULT hres; + } shortcut_test[] = { + {file0, S_FALSE}, + {file1, S_OK}, + {file2, S_FALSE}, + {file3, S_OK}, + {file4, S_FALSE}, + {file5, S_OK}, + {file6, S_FALSE}, + {file7, S_OK}, + {NULL, E_INVALIDARG} + }; + + for(i=0; i<sizeof(shortcut_test)/sizeof(shortcut_test[0]); i++) { + hres = HlinkIsShortcut(shortcut_test[i].file); + ok(hres == shortcut_test[i].hres, "[%d] HlinkIsShortcut returned %08lx, expected %08lx\n", + i, hres, shortcut_test[i].hres); + } +} + START_TEST(hlink) { HRESULT r; @@ -69,4 +105,6 @@ START_TEST(hlink) r = IHlink_GetStringReference(lnk, HLINKGETREF_DEFAULT, NULL, &str); ok(r == S_OK, "failed\n"); ok(str == NULL, "string should be null\n"); + + test_HlinkIsShortcut(); } diff --git a/include/hlink.idl b/include/hlink.idl index b737e9c..23873eb 100644 --- a/include/hlink.idl +++ b/include/hlink.idl @@ -32,6 +32,7 @@ cpp_quote("HRESULT WINAPI HlinkCreateBro cpp_quote("HRESULT WINAPI HlinkNavigateToStringReference(LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);") cpp_quote("HRESULT WINAPI HlinkNavigate(IHlink*, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);") cpp_quote("HRESULT WINAPI HlinkOnNavigate(IHlinkFrame*, IHlinkBrowseContext*, DWORD, IMoniker*, LPCWSTR, LPCWSTR, ULONG*);") +cpp_quote("HRESULT WINAPI HlinkIsShortcut(LPCWSTR);")
/***************************************************************************** * IHlink interface