mirror of
https://github.com/reactos/wine.git
synced 2024-12-03 17:31:15 +00:00
ole32: Simplify RenameElement by using the same entry in the file.
This commit is contained in:
parent
274a1d11c1
commit
87ed7d9b8b
@ -686,10 +686,6 @@ end:
|
|||||||
* This method will rename the specified element.
|
* This method will rename the specified element.
|
||||||
*
|
*
|
||||||
* See Windows documentation for more details on IStorage methods.
|
* See Windows documentation for more details on IStorage methods.
|
||||||
*
|
|
||||||
* Implementation notes: The method used to rename consists of creating a clone
|
|
||||||
* of the deleted StgProperty object setting it with the new name and to
|
|
||||||
* perform a DestroyElement of the old StgProperty.
|
|
||||||
*/
|
*/
|
||||||
static HRESULT WINAPI StorageBaseImpl_RenameElement(
|
static HRESULT WINAPI StorageBaseImpl_RenameElement(
|
||||||
IStorage* iface,
|
IStorage* iface,
|
||||||
@ -726,81 +722,19 @@ static HRESULT WINAPI StorageBaseImpl_RenameElement(
|
|||||||
|
|
||||||
if (foundPropertyIndex != PROPERTY_NULL)
|
if (foundPropertyIndex != PROPERTY_NULL)
|
||||||
{
|
{
|
||||||
StgProperty renamedProperty;
|
/* Remove the element from its current position in the tree */
|
||||||
ULONG renamedPropertyIndex;
|
removeFromTree(This->ancestorStorage, This->rootPropertySetIndex,
|
||||||
|
foundPropertyIndex);
|
||||||
|
|
||||||
/*
|
/* Change the name of the element */
|
||||||
* Setup a new property for the renamed property
|
strcpyW(currentProperty.name, pwcsNewName);
|
||||||
*/
|
|
||||||
renamedProperty.sizeOfNameString =
|
|
||||||
( lstrlenW(pwcsNewName)+1 ) * sizeof(WCHAR);
|
|
||||||
|
|
||||||
if (renamedProperty.sizeOfNameString > PROPERTY_NAME_BUFFER_LEN)
|
StorageImpl_WriteProperty(This->ancestorStorage, foundPropertyIndex,
|
||||||
return STG_E_INVALIDNAME;
|
¤tProperty);
|
||||||
|
|
||||||
strcpyW(renamedProperty.name, pwcsNewName);
|
|
||||||
|
|
||||||
renamedProperty.propertyType = currentProperty.propertyType;
|
|
||||||
renamedProperty.startingBlock = currentProperty.startingBlock;
|
|
||||||
renamedProperty.size.u.LowPart = currentProperty.size.u.LowPart;
|
|
||||||
renamedProperty.size.u.HighPart = currentProperty.size.u.HighPart;
|
|
||||||
|
|
||||||
renamedProperty.leftChild = PROPERTY_NULL;
|
|
||||||
renamedProperty.rightChild = PROPERTY_NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bring the dirProperty link in case it is a storage and in which
|
|
||||||
* case the renamed storage elements don't require to be reorganized.
|
|
||||||
*/
|
|
||||||
renamedProperty.dirProperty = currentProperty.dirProperty;
|
|
||||||
|
|
||||||
/* call CoFileTime to get the current time
|
|
||||||
renamedProperty.ctime
|
|
||||||
renamedProperty.mtime
|
|
||||||
renamedProperty.propertyUniqueID
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Save the new property into a new property spot
|
|
||||||
*/
|
|
||||||
createDirEntry(This->ancestorStorage, &renamedProperty, &renamedPropertyIndex);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Find a spot in the property chain for our newly created property.
|
|
||||||
*/
|
|
||||||
insertIntoTree(
|
|
||||||
This->ancestorStorage,
|
|
||||||
This->rootPropertySetIndex,
|
|
||||||
renamedPropertyIndex);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* At this point the renamed property has been inserted in the tree,
|
|
||||||
* now, before Destroying the old property we must zero its dirProperty
|
|
||||||
* otherwise the DestroyProperty below will zap it all and we do not want
|
|
||||||
* this to happen.
|
|
||||||
* Also, we fake that the old property is a storage so the DestroyProperty
|
|
||||||
* will not do a SetSize(0) on the stream data.
|
|
||||||
*
|
|
||||||
* This means that we need to tweak the StgProperty if it is a stream or a
|
|
||||||
* non empty storage.
|
|
||||||
*/
|
|
||||||
StorageImpl_ReadProperty(This->ancestorStorage,
|
|
||||||
foundPropertyIndex,
|
|
||||||
¤tProperty);
|
|
||||||
|
|
||||||
currentProperty.dirProperty = PROPERTY_NULL;
|
|
||||||
currentProperty.propertyType = PROPTYPE_STORAGE;
|
|
||||||
StorageImpl_WriteProperty(
|
|
||||||
This->ancestorStorage,
|
|
||||||
foundPropertyIndex,
|
|
||||||
¤tProperty);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Invoke Destroy to get rid of the ole property and automatically redo
|
|
||||||
* the linking of its previous and next members...
|
|
||||||
*/
|
|
||||||
IStorage_DestroyElement(iface, pwcsOldName);
|
|
||||||
|
|
||||||
|
/* Insert the element in a new position in the tree */
|
||||||
|
insertIntoTree(This->ancestorStorage, This->rootPropertySetIndex,
|
||||||
|
foundPropertyIndex);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user