From: Robert Wilhelm Subject: [PATCH 6/8] scrrun: Move code to new helper function get_file_name(). Message-Id: Date: Wed, 29 Jun 2022 15:47:07 +0000 In-Reply-To: References: From: Robert Wilhelm Signed-off-by: Robert Wilhelm --- 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; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/343