From: Robert Wilhelm robert.wilhelm@gmx.net
Signed-off-by: Robert Wilhelm robert.wilhelm@gmx.net --- dlls/scrrun/filesystem.c | 42 ++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-)
diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 6ffebc0af12..197fe9f3625 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3301,10 +3301,37 @@ static HRESULT WINAPI filesys_GetParentFolderName(IFileSystem3 *iface, BSTR Path return S_OK; }
+static HRESULT get_file_name(const WCHAR *path, int *start, int *end) +{ + int s,e; + + if(!path) + return 0; + + for(e=lstrlenW(path)-1; e>=0; e--) + if(path[e]!='/' && path[e]!='\') + break; + + for(s=e; s>=0; s--) + if(path[s]=='/' || path[s]=='\') + break; + + s++; + + if(s>e || (s==0 && e==1 && path[1]==':')) { + return E_FAIL; + } + + *start = s; + *end = e; + + return S_OK; +} + static HRESULT WINAPI filesys_GetFileName(IFileSystem3 *iface, BSTR Path, BSTR *pbstrResult) { - int i, end; + int start=0, end=0;
TRACE("%p %s %p\n", iface, debugstr_w(Path), pbstrResult);
@@ -3316,21 +3343,12 @@ static HRESULT WINAPI filesys_GetFileName(IFileSystem3 *iface, BSTR Path, return S_OK; }
- for(end=lstrlenW(Path)-1; end>=0; end--) - if(Path[end]!='/' && Path[end]!='\') - break; - - for(i=end; i>=0; i--) - if(Path[i]=='/' || Path[i]=='\') - break; - i++; - - if(i>end || (i==0 && end==1 && Path[1]==':')) { + if (FAILED(get_file_name( Path, &start, &end))) { *pbstrResult = NULL; return S_OK; }
- *pbstrResult = SysAllocStringLen(Path+i, end-i+1); + *pbstrResult = SysAllocStringLen(Path+start, end-start+1); if(!*pbstrResult) return E_OUTOFMEMORY; return S_OK;