Commit 70c038dc authored by Michael Stefaniuc's avatar Michael Stefaniuc Committed by Alexandre Julliard

ole32: COM cleanup in filemoniker.c.

parent 42df50ab
...@@ -42,24 +42,21 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole); ...@@ -42,24 +42,21 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
/* filemoniker data structure */ /* filemoniker data structure */
typedef struct FileMonikerImpl{ typedef struct FileMonikerImpl{
IMoniker IMoniker_iface;
const IMonikerVtbl* lpvtbl1; /* VTable relative to the IMoniker interface.*/ IROTData IROTData_iface;
LONG ref;
/* The ROT (RunningObjectTable implementation) uses the IROTData interface to test whether
* two monikers are equal. That's whay IROTData interface is implemented by monikers.
*/
const IROTDataVtbl* lpvtbl2; /* VTable relative to the IROTData interface.*/
LONG ref; /* reference counter for this object */
LPOLESTR filePathName; /* path string identified by this filemoniker */ LPOLESTR filePathName; /* path string identified by this filemoniker */
IUnknown *pMarshal; /* custom marshaler */ IUnknown *pMarshal; /* custom marshaler */
} FileMonikerImpl; } FileMonikerImpl;
static inline IMoniker *impl_from_IROTData( IROTData *iface ) static inline FileMonikerImpl *impl_from_IMoniker(IMoniker *iface)
{ {
return (IMoniker *)((char*)iface - FIELD_OFFSET(FileMonikerImpl, lpvtbl2)); return CONTAINING_RECORD(iface, FileMonikerImpl, IMoniker_iface);
}
static inline FileMonikerImpl *impl_from_IROTData(IROTData *iface)
{
return CONTAINING_RECORD(iface, FileMonikerImpl, IROTData_iface);
} }
/* Local function used by filemoniker implementation */ /* Local function used by filemoniker implementation */
...@@ -72,7 +69,7 @@ static HRESULT FileMonikerImpl_Destroy(FileMonikerImpl* iface); ...@@ -72,7 +69,7 @@ static HRESULT FileMonikerImpl_Destroy(FileMonikerImpl* iface);
static HRESULT WINAPI static HRESULT WINAPI
FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject); TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
...@@ -92,7 +89,7 @@ FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) ...@@ -92,7 +89,7 @@ FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
*ppvObject = iface; *ppvObject = iface;
else if (IsEqualIID(&IID_IROTData, riid)) else if (IsEqualIID(&IID_IROTData, riid))
*ppvObject = &This->lpvtbl2; *ppvObject = &This->IROTData_iface;
else if (IsEqualIID(&IID_IMarshal, riid)) else if (IsEqualIID(&IID_IMarshal, riid))
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
...@@ -119,7 +116,7 @@ FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject) ...@@ -119,7 +116,7 @@ FileMonikerImpl_QueryInterface(IMoniker* iface,REFIID riid,void** ppvObject)
static ULONG WINAPI static ULONG WINAPI
FileMonikerImpl_AddRef(IMoniker* iface) FileMonikerImpl_AddRef(IMoniker* iface)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
TRACE("(%p)\n",iface); TRACE("(%p)\n",iface);
...@@ -132,7 +129,7 @@ FileMonikerImpl_AddRef(IMoniker* iface) ...@@ -132,7 +129,7 @@ FileMonikerImpl_AddRef(IMoniker* iface)
static ULONG WINAPI static ULONG WINAPI
FileMonikerImpl_Release(IMoniker* iface) FileMonikerImpl_Release(IMoniker* iface)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
ULONG ref; ULONG ref;
TRACE("(%p)\n",iface); TRACE("(%p)\n",iface);
...@@ -186,6 +183,7 @@ FileMonikerImpl_IsDirty(IMoniker* iface) ...@@ -186,6 +183,7 @@ FileMonikerImpl_IsDirty(IMoniker* iface)
static HRESULT WINAPI static HRESULT WINAPI
FileMonikerImpl_Load(IMoniker* iface, IStream* pStm) FileMonikerImpl_Load(IMoniker* iface, IStream* pStm)
{ {
FileMonikerImpl *This = impl_from_IMoniker(iface);
HRESULT res; HRESULT res;
CHAR* filePathA = NULL; CHAR* filePathA = NULL;
WCHAR* filePathW = NULL; WCHAR* filePathW = NULL;
...@@ -194,7 +192,6 @@ FileMonikerImpl_Load(IMoniker* iface, IStream* pStm) ...@@ -194,7 +192,6 @@ FileMonikerImpl_Load(IMoniker* iface, IStream* pStm)
DWORD dwbuffer, bytesA, bytesW, len; DWORD dwbuffer, bytesA, bytesW, len;
int i; int i;
FileMonikerImpl *This = (FileMonikerImpl *)iface;
TRACE("(%p,%p)\n",iface,pStm); TRACE("(%p,%p)\n",iface,pStm);
...@@ -347,8 +344,7 @@ FileMonikerImpl_Load(IMoniker* iface, IStream* pStm) ...@@ -347,8 +344,7 @@ FileMonikerImpl_Load(IMoniker* iface, IStream* pStm)
static HRESULT WINAPI static HRESULT WINAPI
FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty) FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
HRESULT res; HRESULT res;
LPOLESTR filePathW=This->filePathName; LPOLESTR filePathW=This->filePathName;
CHAR* filePathA; CHAR* filePathA;
...@@ -447,7 +443,7 @@ FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty) ...@@ -447,7 +443,7 @@ FileMonikerImpl_Save(IMoniker* iface, IStream* pStm, BOOL fClearDirty)
static HRESULT WINAPI static HRESULT WINAPI
FileMonikerImpl_GetSizeMax(IMoniker* iface, ULARGE_INTEGER* pcbSize) FileMonikerImpl_GetSizeMax(IMoniker* iface, ULARGE_INTEGER* pcbSize)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
TRACE("(%p,%p)\n",iface,pcbSize); TRACE("(%p,%p)\n",iface,pcbSize);
...@@ -484,6 +480,7 @@ static HRESULT WINAPI ...@@ -484,6 +480,7 @@ static HRESULT WINAPI
FileMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, FileMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft,
REFIID riid, VOID** ppvResult) REFIID riid, VOID** ppvResult)
{ {
FileMonikerImpl *This = impl_from_IMoniker(iface);
HRESULT res=E_FAIL; HRESULT res=E_FAIL;
CLSID clsID; CLSID clsID;
IUnknown* pObj=0; IUnknown* pObj=0;
...@@ -492,8 +489,6 @@ FileMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft ...@@ -492,8 +489,6 @@ FileMonikerImpl_BindToObject(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft
IClassFactory *pcf=0; IClassFactory *pcf=0;
IClassActivator *pca=0; IClassActivator *pca=0;
FileMonikerImpl *This = (FileMonikerImpl *)iface;
*ppvResult=0; *ppvResult=0;
TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult); TRACE("(%p,%p,%p,%s,%p)\n",iface,pbc,pmkToLeft,debugstr_guid(riid),ppvResult);
...@@ -784,7 +779,7 @@ FileMonikerImpl_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoniker ...@@ -784,7 +779,7 @@ FileMonikerImpl_Enum(IMoniker* iface,BOOL fForward, IEnumMoniker** ppenumMoniker
static HRESULT WINAPI static HRESULT WINAPI
FileMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker) FileMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
CLSID clsid; CLSID clsid;
LPOLESTR filePath; LPOLESTR filePath;
IBindCtx* bind; IBindCtx* bind;
...@@ -820,8 +815,7 @@ FileMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker) ...@@ -820,8 +815,7 @@ FileMonikerImpl_IsEqual(IMoniker* iface,IMoniker* pmkOtherMoniker)
static HRESULT WINAPI static HRESULT WINAPI
FileMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash) FileMonikerImpl_Hash(IMoniker* iface,DWORD* pdwHash)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
int h = 0,i,skip,len; int h = 0,i,skip,len;
int off = 0; int off = 0;
LPOLESTR val; LPOLESTR val;
...@@ -886,7 +880,7 @@ static HRESULT WINAPI ...@@ -886,7 +880,7 @@ static HRESULT WINAPI
FileMonikerImpl_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc, FileMonikerImpl_GetTimeOfLastChange(IMoniker* iface, IBindCtx* pbc,
IMoniker* pmkToLeft, FILETIME* pFileTime) IMoniker* pmkToLeft, FILETIME* pFileTime)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
IRunningObjectTable* rot; IRunningObjectTable* rot;
HRESULT res; HRESULT res;
WIN32_FILE_ATTRIBUTE_DATA info; WIN32_FILE_ATTRIBUTE_DATA info;
...@@ -1195,8 +1189,7 @@ static HRESULT WINAPI ...@@ -1195,8 +1189,7 @@ static HRESULT WINAPI
FileMonikerImpl_GetDisplayName(IMoniker* iface, IBindCtx* pbc, FileMonikerImpl_GetDisplayName(IMoniker* iface, IBindCtx* pbc,
IMoniker* pmkToLeft, LPOLESTR *ppszDisplayName) IMoniker* pmkToLeft, LPOLESTR *ppszDisplayName)
{ {
FileMonikerImpl *This = (FileMonikerImpl *)iface; FileMonikerImpl *This = impl_from_IMoniker(iface);
int len=lstrlenW(This->filePathName); int len=lstrlenW(This->filePathName);
TRACE("(%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,ppszDisplayName); TRACE("(%p,%p,%p,%p)\n",iface,pbc,pmkToLeft,ppszDisplayName);
...@@ -1252,11 +1245,11 @@ static HRESULT WINAPI ...@@ -1252,11 +1245,11 @@ static HRESULT WINAPI
FileMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObject) FileMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObject)
{ {
IMoniker *This = impl_from_IROTData(iface); FileMonikerImpl *This = impl_from_IROTData(iface);
TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject); TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppvObject);
return FileMonikerImpl_QueryInterface(This, riid, ppvObject); return FileMonikerImpl_QueryInterface(&This->IMoniker_iface, riid, ppvObject);
} }
/*********************************************************************** /***********************************************************************
...@@ -1265,11 +1258,11 @@ FileMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObje ...@@ -1265,11 +1258,11 @@ FileMonikerROTDataImpl_QueryInterface(IROTData *iface,REFIID riid,VOID** ppvObje
static ULONG WINAPI static ULONG WINAPI
FileMonikerROTDataImpl_AddRef(IROTData *iface) FileMonikerROTDataImpl_AddRef(IROTData *iface)
{ {
IMoniker *This = impl_from_IROTData(iface); FileMonikerImpl *This = impl_from_IROTData(iface);
TRACE("(%p)\n",This); TRACE("(%p)\n",This);
return IMoniker_AddRef(This); return IMoniker_AddRef(&This->IMoniker_iface);
} }
/*********************************************************************** /***********************************************************************
...@@ -1278,11 +1271,11 @@ FileMonikerROTDataImpl_AddRef(IROTData *iface) ...@@ -1278,11 +1271,11 @@ FileMonikerROTDataImpl_AddRef(IROTData *iface)
static ULONG WINAPI static ULONG WINAPI
FileMonikerROTDataImpl_Release(IROTData* iface) FileMonikerROTDataImpl_Release(IROTData* iface)
{ {
IMoniker *This = impl_from_IROTData(iface); FileMonikerImpl *This = impl_from_IROTData(iface);
TRACE("(%p)\n",This); TRACE("(%p)\n",This);
return FileMonikerImpl_Release(This); return FileMonikerImpl_Release(&This->IMoniker_iface);
} }
/****************************************************************************** /******************************************************************************
...@@ -1292,9 +1285,8 @@ static HRESULT WINAPI ...@@ -1292,9 +1285,8 @@ static HRESULT WINAPI
FileMonikerROTDataImpl_GetComparisonData(IROTData* iface, BYTE* pbData, FileMonikerROTDataImpl_GetComparisonData(IROTData* iface, BYTE* pbData,
ULONG cbMax, ULONG* pcbData) ULONG cbMax, ULONG* pcbData)
{ {
IMoniker *This = impl_from_IROTData(iface); FileMonikerImpl *This = impl_from_IROTData(iface);
FileMonikerImpl *This1 = (FileMonikerImpl *)This; int len = strlenW(This->filePathName)+1;
int len = (strlenW(This1->filePathName)+1);
int i; int i;
LPWSTR pszFileName; LPWSTR pszFileName;
...@@ -1307,7 +1299,7 @@ FileMonikerROTDataImpl_GetComparisonData(IROTData* iface, BYTE* pbData, ...@@ -1307,7 +1299,7 @@ FileMonikerROTDataImpl_GetComparisonData(IROTData* iface, BYTE* pbData,
memcpy(pbData, &CLSID_FileMoniker, sizeof(CLSID)); memcpy(pbData, &CLSID_FileMoniker, sizeof(CLSID));
pszFileName = (LPWSTR)(pbData+sizeof(CLSID)); pszFileName = (LPWSTR)(pbData+sizeof(CLSID));
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
pszFileName[i] = toupperW(This1->filePathName[i]); pszFileName[i] = toupperW(This->filePathName[i]);
return S_OK; return S_OK;
} }
...@@ -1367,8 +1359,8 @@ static HRESULT FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR lpszPa ...@@ -1367,8 +1359,8 @@ static HRESULT FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR lpszPa
TRACE("(%p,%s)\n",This,debugstr_w(lpszPathName)); TRACE("(%p,%s)\n",This,debugstr_w(lpszPathName));
/* Initialize the virtual function table. */ /* Initialize the virtual function table. */
This->lpvtbl1 = &VT_FileMonikerImpl; This->IMoniker_iface.lpVtbl = &VT_FileMonikerImpl;
This->lpvtbl2 = &VT_ROTDataImpl; This->IROTData_iface.lpVtbl = &VT_ROTDataImpl;
This->ref = 0; This->ref = 0;
This->pMarshal = NULL; This->pMarshal = NULL;
...@@ -1427,7 +1419,7 @@ static HRESULT FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR lpszPa ...@@ -1427,7 +1419,7 @@ static HRESULT FileMonikerImpl_Construct(FileMonikerImpl* This, LPCOLESTR lpszPa
/****************************************************************************** /******************************************************************************
* CreateFileMoniker (OLE32.@) * CreateFileMoniker (OLE32.@)
******************************************************************************/ ******************************************************************************/
HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER * ppmk) HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, IMoniker **ppmk)
{ {
FileMonikerImpl* newFileMoniker; FileMonikerImpl* newFileMoniker;
HRESULT hr; HRESULT hr;
...@@ -1450,7 +1442,7 @@ HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER * ppmk) ...@@ -1450,7 +1442,7 @@ HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER * ppmk)
hr = FileMonikerImpl_Construct(newFileMoniker,lpszPathName); hr = FileMonikerImpl_Construct(newFileMoniker,lpszPathName);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
hr = IMoniker_QueryInterface((IMoniker*)newFileMoniker,&IID_IMoniker,(void**)ppmk); hr = IMoniker_QueryInterface(&newFileMoniker->IMoniker_iface,&IID_IMoniker,(void**)ppmk);
else else
HeapFree(GetProcessHeap(),0,newFileMoniker); HeapFree(GetProcessHeap(),0,newFileMoniker);
...@@ -1466,7 +1458,7 @@ static inline WCHAR *memrpbrkW(const WCHAR *ptr, size_t n, const WCHAR *accept) ...@@ -1466,7 +1458,7 @@ static inline WCHAR *memrpbrkW(const WCHAR *ptr, size_t n, const WCHAR *accept)
} }
HRESULT FileMoniker_CreateFromDisplayName(LPBC pbc, LPCOLESTR szDisplayName, HRESULT FileMoniker_CreateFromDisplayName(LPBC pbc, LPCOLESTR szDisplayName,
LPDWORD pchEaten, LPMONIKER *ppmk) LPDWORD pchEaten, IMoniker **ppmk)
{ {
LPCWSTR end; LPCWSTR end;
static const WCHAR wszSeparators[] = {':','\\','/','!',0}; static const WCHAR wszSeparators[] = {':','\\','/','!',0};
...@@ -1600,7 +1592,7 @@ static HRESULT WINAPI FileMonikerCF_CreateInstance(LPCLASSFACTORY iface, ...@@ -1600,7 +1592,7 @@ static HRESULT WINAPI FileMonikerCF_CreateInstance(LPCLASSFACTORY iface,
hr = FileMonikerImpl_Construct(newFileMoniker, wszEmpty); hr = FileMonikerImpl_Construct(newFileMoniker, wszEmpty);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
hr = IMoniker_QueryInterface((IMoniker*)newFileMoniker, riid, ppv); hr = IMoniker_QueryInterface(&newFileMoniker->IMoniker_iface, riid, ppv);
if (FAILED(hr)) if (FAILED(hr))
HeapFree(GetProcessHeap(),0,newFileMoniker); HeapFree(GetProcessHeap(),0,newFileMoniker);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment