Piotr Caban : propsys: Added InitVariantFromBuffer implementation.
Alexandre Julliard
julliard at winehq.org
Fri Sep 16 13:28:31 CDT 2011
Module: wine
Branch: master
Commit: f8dd85f246ee5f2a8a999b2b8287170c526cebc6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f8dd85f246ee5f2a8a999b2b8287170c526cebc6
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri Sep 16 11:20:37 2011 +0200
propsys: Added InitVariantFromBuffer implementation.
---
dlls/propsys/propsys.spec | 4 ++--
dlls/propsys/propvar.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec
index e738985..5bcb483 100644
--- a/dlls/propsys/propsys.spec
+++ b/dlls/propsys/propsys.spec
@@ -28,7 +28,7 @@
@ stub DllRegisterServer
@ stub DllUnregisterServer
@ stub InitPropVariantFromBooleanVector
-@ stub InitPropVariantFromBuffer
+@ stdcall InitPropVariantFromBuffer(ptr long ptr)
@ stub InitPropVariantFromCLSID
@ stub InitPropVariantFromDoubleVector
@ stub InitPropVariantFromFileTime
@@ -47,7 +47,7 @@
@ stub InitPropVariantFromUInt64Vector
@ stub InitPropVariantVectorFromPropVariant
@ stub InitVariantFromBooleanArray
-@ stub InitVariantFromBuffer
+@ stdcall InitVariantFromBuffer(ptr long ptr)
@ stub InitVariantFromDoubleArray
@ stub InitVariantFromFileTime
@ stub InitVariantFromFileTimeArray
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c
index d59173c..01a1d5f 100644
--- a/dlls/propsys/propvar.c
+++ b/dlls/propsys/propvar.c
@@ -132,3 +132,48 @@ HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar)
PROPVAR_GUIDToWSTR(guid, V_BSTR(pvar));
return S_OK;
}
+
+HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar)
+{
+ TRACE("(%p %u %p)\n", pv, cb, ppropvar);
+
+ ppropvar->u.caub.pElems = CoTaskMemAlloc(cb);
+ if(!ppropvar->u.caub.pElems)
+ return E_OUTOFMEMORY;
+
+ ppropvar->vt = VT_VECTOR|VT_UI1;
+ ppropvar->u.caub.cElems = cb;
+ memcpy(ppropvar->u.caub.pElems, pv, cb);
+ return S_OK;
+}
+
+HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar)
+{
+ SAFEARRAY *arr;
+ void *data;
+ HRESULT hres;
+
+ TRACE("(%p %u %p)\n", pv, cb, pvar);
+
+ arr = SafeArrayCreateVector(VT_UI1, 0, cb);
+ if(!arr)
+ return E_OUTOFMEMORY;
+
+ hres = SafeArrayAccessData(arr, &data);
+ if(FAILED(hres)) {
+ SafeArrayDestroy(arr);
+ return hres;
+ }
+
+ memcpy(data, pv, cb);
+
+ hres = SafeArrayUnaccessData(arr);
+ if(FAILED(hres)) {
+ SafeArrayDestroy(arr);
+ return hres;
+ }
+
+ V_VT(pvar) = VT_ARRAY|VT_UI1;
+ V_ARRAY(pvar) = arr;
+ return S_OK;
+}
More information about the wine-cvs
mailing list