Module: wine Branch: master Commit: f434ab1f2aa3b0c330c44f135c8ffce039d7016f URL: http://source.winehq.org/git/wine.git/?a=commit;h=f434ab1f2aa3b0c330c44f135c...
Author: Vincent Povirk vincent@codeweavers.com Date: Wed Dec 2 12:35:53 2009 -0600
ole32: Unify the logic for overriding the root storage filename in Stat.
This is needed so that the new transacted type will be able to easily support this logic.
---
dlls/ole32/stg_stream.c | 4 +--- dlls/ole32/storage32.c | 39 +++++++++------------------------------ dlls/ole32/storage32.h | 8 ++++---- 3 files changed, 14 insertions(+), 37 deletions(-)
diff --git a/dlls/ole32/stg_stream.c b/dlls/ole32/stg_stream.c index bf88c64..5355594 100644 --- a/dlls/ole32/stg_stream.c +++ b/dlls/ole32/stg_stream.c @@ -858,9 +858,7 @@ static HRESULT WINAPI StgStreamImpl_Stat(
if (readSuccessful) { - StorageImpl *root = This->parentStorage->ancestorStorage; - - StorageUtl_CopyDirEntryToSTATSTG(root, + StorageUtl_CopyDirEntryToSTATSTG(This->parentStorage, pstatstg, ¤tEntry, grfStatFlag); diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 971f44a..8f9683f 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -704,7 +704,7 @@ static HRESULT WINAPI StorageBaseImpl_Stat( if (readSuccessful) { StorageUtl_CopyDirEntryToSTATSTG( - This->ancestorStorage, + This, pstatstg, ¤tEntry, grfStatFlag); @@ -1841,30 +1841,6 @@ static HRESULT WINAPI StorageBaseImpl_DestroyElement( }
-/************************************************************************ - * StorageImpl_Stat (IStorage) - * - * This method will retrieve information about this storage object. - * - * See Windows documentation for more details on IStorage methods. - */ -static HRESULT WINAPI StorageImpl_Stat( IStorage* iface, - STATSTG* pstatstg, /* [out] */ - DWORD grfStatFlag) /* [in] */ -{ - StorageImpl* const This = (StorageImpl*)iface; - HRESULT result = StorageBaseImpl_Stat( iface, pstatstg, grfStatFlag ); - - if ( SUCCEEDED(result) && ((grfStatFlag & STATFLAG_NONAME) == 0) && This->pwcsName ) - { - CoTaskMemFree(pstatstg->pwcsName); - pstatstg->pwcsName = CoTaskMemAlloc((lstrlenW(This->pwcsName)+1)*sizeof(WCHAR)); - strcpyW(pstatstg->pwcsName, This->pwcsName); - } - - return result; -} - /****************************************************************************** * Internal stream list handlers */ @@ -2240,7 +2216,7 @@ static const IStorageVtbl Storage32Impl_Vtbl = StorageBaseImpl_SetElementTimes, StorageBaseImpl_SetClass, StorageBaseImpl_SetStateBits, - StorageImpl_Stat + StorageBaseImpl_Stat };
static HRESULT StorageImpl_Construct( @@ -2295,6 +2271,9 @@ static HRESULT StorageImpl_Construct( goto end; } strcpyW(This->pwcsName, pwcsName); + + memcpy(This->base.filename, pwcsName, DIRENTRY_NAME_BUFFER_LEN-1); + This->base.filename[DIRENTRY_NAME_BUFFER_LEN-1] = 0; }
/* @@ -3786,7 +3765,7 @@ static HRESULT WINAPI IEnumSTATSTGImpl_Next( /* * Copy the information to the return buffer. */ - StorageUtl_CopyDirEntryToSTATSTG(This->parentStorage, + StorageUtl_CopyDirEntryToSTATSTG(&This->parentStorage->base, currentReturnStruct, ¤tEntry, STATFLAG_DEFAULT); @@ -4218,7 +4197,7 @@ void StorageUtl_WriteGUID(BYTE* buffer, ULONG offset, const GUID* value) }
void StorageUtl_CopyDirEntryToSTATSTG( - StorageImpl* storage, + StorageBaseImpl* storage, STATSTG* destination, const DirEntry* source, int statFlags) @@ -5998,8 +5977,8 @@ HRESULT WINAPI StgOpenStorage(
/* prepare the file name string given in lieu of the root property name */ GetFullPathNameW(pwcsName, MAX_PATH, fullname, NULL); - memcpy(newStorage->filename, fullname, DIRENTRY_NAME_BUFFER_LEN); - newStorage->filename[DIRENTRY_NAME_BUFFER_LEN-1] = '\0'; + memcpy(newStorage->base.filename, fullname, DIRENTRY_NAME_BUFFER_LEN); + newStorage->base.filename[DIRENTRY_NAME_BUFFER_LEN-1] = '\0';
/* * Get an "out" pointer for the caller. diff --git a/dlls/ole32/storage32.h b/dlls/ole32/storage32.h index 59a8fb9..20de0eb 100644 --- a/dlls/ole32/storage32.h +++ b/dlls/ole32/storage32.h @@ -236,6 +236,9 @@ struct StorageBaseImpl */ DWORD stateBits;
+ /* If set, this overrides the root storage name returned by IStorage_Stat */ + WCHAR filename[DIRENTRY_NAME_BUFFER_LEN]; + BOOL create; /* Was the storage created or opened. The behaviour of STGM_SIMPLE depends on this */ }; @@ -264,9 +267,6 @@ struct StorageImpl HANDLE hFile; /* Physical support for the Docfile */ LPOLESTR pwcsName; /* Full path of the document file */
- /* FIXME: should this be in Storage32BaseImpl ? */ - WCHAR filename[DIRENTRY_NAME_BUFFER_LEN]; - /* * File header */ @@ -429,7 +429,7 @@ void StorageUtl_WriteULargeInteger(BYTE* buffer, ULONG offset, const ULARGE_INTEGER *value); void StorageUtl_ReadGUID(const BYTE* buffer, ULONG offset, GUID* value); void StorageUtl_WriteGUID(BYTE* buffer, ULONG offset, const GUID* value); -void StorageUtl_CopyDirEntryToSTATSTG(StorageImpl *storage,STATSTG* destination, +void StorageUtl_CopyDirEntryToSTATSTG(StorageBaseImpl *storage,STATSTG* destination, const DirEntry* source, int statFlags);
/****************************************************************************