[PATCH 04/10] opcservices: Implement CombinePartUri().
Nikolay Sivov
nsivov at codeweavers.com
Wed Sep 19 06:19:32 CDT 2018
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/opcservices/tests/opcservices.c | 14 ++++++++++----
dlls/opcservices/uri.c | 21 +++++++++++++++++++--
2 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/dlls/opcservices/tests/opcservices.c b/dlls/opcservices/tests/opcservices.c
index 986aae468a..ab8c2e47a5 100644
--- a/dlls/opcservices/tests/opcservices.c
+++ b/dlls/opcservices/tests/opcservices.c
@@ -1053,19 +1053,25 @@ static void test_combine_uri(void)
hr = CreateUri(relativeW, Uri_CREATE_ALLOW_RELATIVE, 0, &relative_uri);
ok(SUCCEEDED(hr), "%u: failed to create relative uri, hr %#x.\n", i, hr);
+ combined_uri = (void *)0xdeadbeef;
+ hr = IOpcUri_CombinePartUri(uri, NULL, &combined_uri);
+ ok(hr == E_POINTER, "%u: failed to combine uris, hr %#x.\n", i, hr);
+ ok(!combined_uri, "Unexpected instance.\n");
+
+ hr = IOpcUri_CombinePartUri(uri, relative_uri, NULL);
+ ok(hr == E_POINTER, "%u: failed to combine uris, hr %#x.\n", i, hr);
+
hr = IOpcUri_CombinePartUri(uri, relative_uri, &combined_uri);
- todo_wine
ok(SUCCEEDED(hr), "%u: failed to combine uris, hr %#x.\n", i, hr);
- if (SUCCEEDED(hr))
- {
hr = IOpcPartUri_GetRawUri(combined_uri, &str);
ok(SUCCEEDED(hr), "%u: failed to get raw uri, hr %#x.\n", i, hr);
+ todo_wine_if(i == 2 || i == 3)
ok(!lstrcmpW(str, combinedW), "%u: unexpected uri %s.\n", i, wine_dbgstr_w(str));
SysFreeString(str);
IOpcPartUri_Release(combined_uri);
- }
+
heap_free(uriW);
heap_free(relativeW);
heap_free(combinedW);
diff --git a/dlls/opcservices/uri.c b/dlls/opcservices/uri.c
index fa5ddbcde8..800ae34571 100644
--- a/dlls/opcservices/uri.c
+++ b/dlls/opcservices/uri.c
@@ -357,9 +357,26 @@ static HRESULT WINAPI opc_uri_GetRelativeUri(IOpcPartUri *iface, IOpcPartUri *pa
static HRESULT WINAPI opc_uri_CombinePartUri(IOpcPartUri *iface, IUri *relative_uri, IOpcPartUri **combined)
{
- FIXME("iface %p, relative_uri %p, combined %p stub!\n", iface, relative_uri, combined);
+ struct opc_uri *uri = impl_from_IOpcPartUri(iface);
+ IUri *combined_uri;
+ HRESULT hr;
- return E_NOTIMPL;
+ TRACE("iface %p, relative_uri %p, combined %p.\n", iface, relative_uri, combined);
+
+ if (!combined)
+ return E_POINTER;
+
+ *combined = NULL;
+
+ if (!relative_uri)
+ return E_POINTER;
+
+ if (FAILED(hr = CoInternetCombineIUri(uri->uri, relative_uri, 0, &combined_uri, 0)))
+ return hr;
+
+ hr = opc_part_uri_create(combined_uri, NULL, combined);
+ IUri_Release(combined_uri);
+ return hr;
}
static HRESULT WINAPI opc_uri_ComparePartUri(IOpcPartUri *iface, IOpcPartUri *part_uri,
--
2.18.0
More information about the wine-devel
mailing list