[SHELL32] Fix some NULL-pointers validation.
[reactos.git] / dll / win32 / shell32 / CIDLDataObj.cpp
index 4b1a83a..a28aed1 100644 (file)
@@ -129,7 +129,7 @@ HRESULT WINAPI IEnumFORMATETCImpl::Clone(LPENUMFORMATETC* ppenum)
 
 HRESULT IEnumFORMATETC_Constructor(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **ppFormat)
 {
-    return ShellObjectCreatorInit<IEnumFORMATETCImpl>(cfmt, afmt, IID_IEnumFORMATETC, ppFormat);
+    return ShellObjectCreatorInit<IEnumFORMATETCImpl>(cfmt, afmt, IID_PPV_ARG(IEnumFORMATETC, ppFormat));
 }
 
 
@@ -147,7 +147,7 @@ class CIDLDataObj :
 {
 private:
     LPITEMIDLIST    pidl;
-    LPITEMIDLIST *    apidl;
+    PIDLIST_RELATIVE *apidl;
     UINT        cidl;
     DWORD        dropeffect;
 
@@ -160,7 +160,7 @@ private:
 public:
     CIDLDataObj();
     ~CIDLDataObj();
-    HRESULT WINAPI Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidlx, UINT cidlx);
+    HRESULT WINAPI Initialize(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidlx, UINT cidlx);
 
     ///////////
     virtual HRESULT WINAPI GetData(LPFORMATETC pformatetcIn, STGMEDIUM *pmedium);
@@ -204,7 +204,7 @@ CIDLDataObj::~CIDLDataObj()
     ILFree(pidl);
 }
 
-HRESULT WINAPI CIDLDataObj::Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidlx, UINT cidlx)
+HRESULT WINAPI CIDLDataObj::Initialize(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidlx, UINT cidlx)
 {
     pidl = ILClone(pMyPidl);
     apidl = _ILCopyaPidl(apidlx, cidlx);
@@ -225,6 +225,21 @@ HRESULT WINAPI CIDLDataObj::Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LP
     return S_OK;
 }
 
+static HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags)
+{
+    DWORD * pdwFlag;
+    HGLOBAL hGlobal;
+
+    TRACE("(0x%08x)\n", dwFlags);
+
+    hGlobal = GlobalAlloc(GHND|GMEM_SHARE, sizeof(DWORD));
+    if(!hGlobal) return hGlobal;
+        pdwFlag = (DWORD*)GlobalLock(hGlobal);
+    *pdwFlag = dwFlags;
+    GlobalUnlock(hGlobal);
+    return hGlobal;
+}
+
 /**************************************************************************
 * IDataObject_fnGetData
 */
@@ -379,12 +394,12 @@ HRESULT WINAPI CIDLDataObj::SetAsyncMode(BOOL fDoOpAsync)
 
 HRESULT WINAPI CIDLDataObj::StartOperation(IBindCtx *pbcReserved)
 {
-    FIXME("(%p)->()\n", this);
+    TRACE("(%p)->()\n", this);
     return E_NOTIMPL;
 }
 HRESULT WINAPI CIDLDataObj::EndOperation(HRESULT hResult, IBindCtx *pbcReserved, DWORD dwEffects)
 {
-    FIXME("(%p)->()\n", this);
+    TRACE("(%p)->()\n", this);
     return E_NOTIMPL;
 }
 
@@ -393,9 +408,11 @@ HRESULT WINAPI CIDLDataObj::EndOperation(HRESULT hResult, IBindCtx *pbcReserved,
 /**************************************************************************
 *  IDataObject_Constructor
 */
-HRESULT IDataObject_Constructor(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidl, UINT cidl, IDataObject **dataObject)
+HRESULT IDataObject_Constructor(HWND hwndOwner, PCIDLIST_ABSOLUTE pMyPidl, PCUIDLIST_RELATIVE_ARRAY apidl, UINT cidl, IDataObject **dataObject)
 {
-    return ShellObjectCreatorInit<CIDLDataObj>(hwndOwner, pMyPidl, apidl, cidl, IID_IDataObject, dataObject);
+    if (!dataObject)
+        return E_INVALIDARG;
+    return ShellObjectCreatorInit<CIDLDataObj>(hwndOwner, pMyPidl, apidl, cidl, IID_PPV_ARG(IDataObject, dataObject));
 }
 
 /*************************************************************************
@@ -403,7 +420,7 @@ HRESULT IDataObject_Constructor(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMID
  *
  */
 
-HRESULT WINAPI SHCreateDataObject(LPCITEMIDLIST pidlFolder, UINT cidl, LPCITEMIDLIST* apidl, IDataObject *pdtInner, REFIID riid, void **ppv)
+HRESULT WINAPI SHCreateDataObject(PCIDLIST_ABSOLUTE pidlFolder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IDataObject *pdtInner, REFIID riid, void **ppv)
 {
     if (IsEqualIID(riid, IID_IDataObject))
     {