[PATCH 3/6] opcservices: Add IOpcRelationship stub.
Nikolay Sivov
nsivov at codeweavers.com
Tue Sep 4 00:04:55 CDT 2018
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/opcservices/package.c | 114 ++++++++++++++++++++++++++++++++++++-
1 file changed, 113 insertions(+), 1 deletion(-)
diff --git a/dlls/opcservices/package.c b/dlls/opcservices/package.c
index 09014ffc82..a9b4d14fc3 100644
--- a/dlls/opcservices/package.c
+++ b/dlls/opcservices/package.c
@@ -54,6 +54,12 @@ struct opc_part_set
LONG refcount;
};
+struct opc_relationship
+{
+ IOpcRelationship IOpcRelationship_iface;
+ LONG refcount;
+};
+
struct opc_relationship_set
{
IOpcRelationshipSet IOpcRelationshipSet_iface;
@@ -80,6 +86,11 @@ static inline struct opc_relationship_set *impl_from_IOpcRelationshipSet(IOpcRel
return CONTAINING_RECORD(iface, struct opc_relationship_set, IOpcRelationshipSet_iface);
}
+static inline struct opc_relationship *impl_from_IOpcRelationship(IOpcRelationship *iface)
+{
+ return CONTAINING_RECORD(iface, struct opc_relationship, IOpcRelationship_iface);
+}
+
static WCHAR *opc_strdupW(const WCHAR *str)
{
WCHAR *ret = NULL;
@@ -310,6 +321,107 @@ static const IOpcPartSetVtbl opc_part_set_vtbl =
opc_part_set_GtEnumerator,
};
+static HRESULT WINAPI opc_relationship_QueryInterface(IOpcRelationship *iface, REFIID iid, void **out)
+{
+ TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
+
+ if (IsEqualIID(iid, &IID_IOpcRelationship) ||
+ IsEqualIID(iid, &IID_IUnknown))
+ {
+ *out = iface;
+ IOpcRelationship_AddRef(iface);
+ return S_OK;
+ }
+
+ WARN("Unsupported interface %s.\n", debugstr_guid(iid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI opc_relationship_AddRef(IOpcRelationship *iface)
+{
+ struct opc_relationship *relationship = impl_from_IOpcRelationship(iface);
+ ULONG refcount = InterlockedIncrement(&relationship->refcount);
+
+ TRACE("%p increasing refcount to %u.\n", iface, refcount);
+
+ return refcount;
+}
+
+static ULONG WINAPI opc_relationship_Release(IOpcRelationship *iface)
+{
+ struct opc_relationship *relationship = impl_from_IOpcRelationship(iface);
+ ULONG refcount = InterlockedDecrement(&relationship->refcount);
+
+ TRACE("%p decreasing refcount to %u.\n", iface, refcount);
+
+ if (!refcount)
+ heap_free(relationship);
+
+ return refcount;
+}
+
+static HRESULT WINAPI opc_relationship_GetId(IOpcRelationship *iface, WCHAR **id)
+{
+ FIXME("iface %p, id %p stub!\n", iface, id);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI opc_relationship_GetRelationshipType(IOpcRelationship *iface, WCHAR **type)
+{
+ FIXME("iface %p, type %p stub!\n", iface, type);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI opc_relationship_GetSourceUri(IOpcRelationship *iface, IOpcUri **uri)
+{
+ FIXME("iface %p, uri %p stub!\n", iface, uri);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI opc_relationship_GetTargetUri(IOpcRelationship *iface, IUri **target)
+{
+ FIXME("iface %p, target %p stub!\n", iface, target);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI opc_relationship_GetTargetMode(IOpcRelationship *iface, OPC_URI_TARGET_MODE *target_mode)
+{
+ FIXME("iface %p, target_mode %p stub!\n", iface, target_mode);
+
+ return E_NOTIMPL;
+}
+
+static const IOpcRelationshipVtbl opc_relationship_vtbl =
+{
+ opc_relationship_QueryInterface,
+ opc_relationship_AddRef,
+ opc_relationship_Release,
+ opc_relationship_GetId,
+ opc_relationship_GetRelationshipType,
+ opc_relationship_GetSourceUri,
+ opc_relationship_GetTargetUri,
+ opc_relationship_GetTargetMode,
+};
+
+static HRESULT opc_relationship_create(IOpcRelationship **out)
+{
+ struct opc_relationship *relationship;
+
+ if (!(relationship = heap_alloc_zero(sizeof(*relationship))))
+ return E_OUTOFMEMORY;
+
+ relationship->IOpcRelationship_iface.lpVtbl = &opc_relationship_vtbl;
+ relationship->refcount = 1;
+
+ *out = &relationship->IOpcRelationship_iface;
+ TRACE("Created relationship %p.\n", *out);
+ return S_OK;
+}
+
static HRESULT WINAPI opc_relationship_set_QueryInterface(IOpcRelationshipSet *iface, REFIID iid, void **out)
{
TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
@@ -363,7 +475,7 @@ static HRESULT WINAPI opc_relationship_set_CreateRelationship(IOpcRelationshipSe
FIXME("iface %p, id %s, type %s, target_uri %p, target_mode %d, relationship %p stub!\n", iface, debugstr_w(id),
debugstr_w(type), target_uri, target_mode, relationship);
- return E_NOTIMPL;
+ return opc_relationship_create(relationship);
}
static HRESULT WINAPI opc_relationship_set_DeleteRelationship(IOpcRelationshipSet *iface, const WCHAR *id)
--
2.18.0
More information about the wine-devel
mailing list