[PATCH 1/2] scrrun: Extract code to new helper function build_path.
Robert Wilhelm
robert.wilhelm at gmx.net
Tue Nov 23 15:11:19 CST 2021
Signed-off-by: Robert Wilhelm <robert.wilhelm at gmx.net>
---
dlls/scrrun/filesystem.c | 109 +++++++++++++++++++++------------------
1 file changed, 58 insertions(+), 51 deletions(-)
diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c
index 68ef1786af9..e55615eb4da 100644
--- a/dlls/scrrun/filesystem.c
+++ b/dlls/scrrun/filesystem.c
@@ -223,6 +223,63 @@ static BSTR get_full_path(BSTR path, const WIN32_FIND_DATAW *data)
return SysAllocString(buffW);
}
+static HRESULT WINAPI build_path( BSTR Path, BSTR Name, BSTR *Result)
+{
+ BSTR ret;
+
+ TRACE("%s %s %p\n", debugstr_w(Path), debugstr_w(Name), Result);
+
+ if (!Result) return E_POINTER;
+
+ if (Path && Name)
+ {
+ int path_len = SysStringLen(Path), name_len = SysStringLen(Name);
+
+ /* if both parts have backslashes strip one from Path */
+ if (Path[path_len-1] == '\\' && Name[0] == '\\')
+ {
+ path_len -= 1;
+
+ ret = SysAllocStringLen(NULL, path_len + name_len);
+ if (ret)
+ {
+ lstrcpyW(ret, Path);
+ ret[path_len] = 0;
+ lstrcatW(ret, Name);
+ }
+ }
+ else if (Path[path_len-1] != '\\' && Name[0] != '\\')
+ {
+ ret = SysAllocStringLen(NULL, path_len + name_len + 1);
+ if (ret)
+ {
+ lstrcpyW(ret, Path);
+ if (Path[path_len-1] != ':')
+ wcscat(ret, L"\\");
+ lstrcatW(ret, Name);
+ }
+ }
+ else
+ {
+ ret = SysAllocStringLen(NULL, path_len + name_len);
+ if (ret)
+ {
+ lstrcpyW(ret, Path);
+ lstrcatW(ret, Name);
+ }
+ }
+ }
+ else if (Path || Name)
+ ret = SysAllocString(Path ? Path : Name);
+ else
+ ret = SysAllocStringLen(NULL, 0);
+
+ if (!ret) return E_OUTOFMEMORY;
+ *Result = ret;
+
+ return S_OK;
+}
+
static BOOL textstream_check_iomode(struct textstream *This, enum iotype type)
{
if (type == IORead)
@@ -3034,59 +3091,9 @@ static HRESULT WINAPI filesys_get_Drives(IFileSystem3 *iface, IDriveCollection *
static HRESULT WINAPI filesys_BuildPath(IFileSystem3 *iface, BSTR Path,
BSTR Name, BSTR *Result)
{
- BSTR ret;
-
TRACE("%p %s %s %p\n", iface, debugstr_w(Path), debugstr_w(Name), Result);
- if (!Result) return E_POINTER;
-
- if (Path && Name)
- {
- int path_len = SysStringLen(Path), name_len = SysStringLen(Name);
-
- /* if both parts have backslashes strip one from Path */
- if (Path[path_len-1] == '\\' && Name[0] == '\\')
- {
- path_len -= 1;
-
- ret = SysAllocStringLen(NULL, path_len + name_len);
- if (ret)
- {
- lstrcpyW(ret, Path);
- ret[path_len] = 0;
- lstrcatW(ret, Name);
- }
- }
- else if (Path[path_len-1] != '\\' && Name[0] != '\\')
- {
- ret = SysAllocStringLen(NULL, path_len + name_len + 1);
- if (ret)
- {
- lstrcpyW(ret, Path);
- if (Path[path_len-1] != ':')
- wcscat(ret, L"\\");
- lstrcatW(ret, Name);
- }
- }
- else
- {
- ret = SysAllocStringLen(NULL, path_len + name_len);
- if (ret)
- {
- lstrcpyW(ret, Path);
- lstrcatW(ret, Name);
- }
- }
- }
- else if (Path || Name)
- ret = SysAllocString(Path ? Path : Name);
- else
- ret = SysAllocStringLen(NULL, 0);
-
- if (!ret) return E_OUTOFMEMORY;
- *Result = ret;
-
- return S_OK;
+ return build_path(Path, Name, Result);
}
static HRESULT WINAPI filesys_GetDriveName(IFileSystem3 *iface, BSTR path, BSTR *drive)
--
2.31.1
More information about the wine-devel
mailing list