Commit Graph

2076 Commits

Author SHA1 Message Date
Nikolay Sivov 2f61e19156 ole32: Fix assumption about HRESULT failure code value. 2010-07-21 17:38:37 +02:00
Nikolay Sivov 5185409144 ole32: Remove redundant variables. 2010-07-21 17:38:37 +02:00
Alexandre Julliard b86d515ed6 dlls: Remove explicit imports of kernel32 and ntdll. 2010-07-21 17:38:36 +02:00
Vincent Povirk 5116b979b2 ole32: Flush the ILockBytes object of a storage on commit and final release.
Some ILockBytes objects will not really write changes until their Flush
method is called. Also, further optimizations to the storage implementation
will involve caching writes, which will have to be flushed at times.
2010-07-19 14:38:16 +02:00
Vincent Povirk b7dbfcbd48 ole32: Remove an unused variable. 2010-07-19 14:38:16 +02:00
Vincent Povirk d0e6e4aa82 ole32: Use ILockBytes_Stat to get the filename of a storage. 2010-07-19 14:38:16 +02:00
Vincent Povirk 14f8f9d5b5 ole32: Remove the BigBlockFile abstraction and always use an ILockBytes. 2010-07-19 14:38:16 +02:00
Vincent Povirk 4171499411 ole32: Don't map storage files in memory. 2010-07-19 14:38:16 +02:00
Vincent Povirk 7f3c92b2a0 ole32: Update storage header saving code based on the latest MS spec.
These fields are needed for the MS storage implementation to load
files that were created by Wine with a block size of 4096.
2010-07-19 14:38:16 +02:00
Vincent Povirk 9c95761d9e ole32: Always check the size of the small block root chain.
In some storage files, the size of this stream is not a multiple of the big
block size. This means that we may need to enlarge the stream even when we
don't really have to allocate more space for it.
2010-05-28 16:22:24 +02:00
Vincent Povirk d64ee9ff11 ole32: Fix seeking backwards in hglobalstream. 2010-05-27 14:46:43 +02:00
Vincent Povirk ff4292c229 ole32/tests: Add more IStream_Seek tests for hglobalstream. 2010-05-27 14:46:42 +02:00
Michael Stefaniuc 162e420f0e ole32: Avoid potential NULL pointer dereferences in a TRACE. 2010-05-26 10:11:05 +02:00
Alexandre Julliard 78d1686b90 ole32: Implement the IAdviseSink call_as proxies and stubs.
Based on a patch by Rob Shearman.
2010-05-25 12:49:19 +02:00
Juan Lang c94b2687d2 ole32: Only read known format ids when attempting to read summary information. 2010-05-25 12:02:47 +02:00
Juan Lang b4c3a04165 ole32/tests: Test creating an IPropertySetStorage with an unknown format id. 2010-05-25 12:02:37 +02:00
Andrew Nguyen 07325c7d7c ole32/tests: Add tests for output parameters in MkParseDisplayName. 2010-05-21 18:58:05 +02:00
Andrew Nguyen 7bdf023e69 ole32: Validate pointer parameters in MkParseDisplayName. 2010-05-21 18:58:05 +02:00
Nikolay Sivov 2c80e14eec ole32: Use window property to store registered drop target. 2010-05-18 08:53:08 +02:00
Vincent Povirk 57ddceea34 ole32: Use a temporary variable in TransactedSnapshotImpl_EnsureReadEntry.
CreateStubEntry can change the value of This->entries, in which case the
assignment can go to the wrong place. So instead, assign to a temporary
variable, and copy the data back after all CreateStubEntry calls are finished.
2010-05-13 11:51:07 +02:00
Marcus Meissner bf1e9a2e93 ole32: Fixed 2 uninitialized variable use (Coverity). 2010-05-10 10:03:43 +02:00
Vincent Povirk dbf123ba0d ole32: Fix reads past the end of streams. 2010-05-07 12:46:50 +02:00
Vincent Povirk 4ad114cfae ole32: Use the cached information in BlockChainStream_GetCount. 2010-05-07 12:46:39 +02:00
Vincent Povirk e40afcb2b6 ole32: Always move unmodified streams instead of copying on commit. 2010-05-06 17:55:43 +02:00
Vincent Povirk d07a4868a1 ole32: Rewrite transacted storage to be more lazy.
When creating a new transacted storage object (or reverting an
existing one), rather than copy the original storage, we simply create
a "stub directory entry" for the root. As stub entries are accessed,
we fill in their data from the parent and create new stubs for any
linked entries. The streams have copy on write semantics - reads are
from the original entry until a change is made, then we make a copy in
the scratch file.

When committing transacted storages, we have to create a new tree with
the new data so that the storage entry can be modified in one step,
but unmodified sections of the tree can now be shared between the new
tree and the old. An entry can be shared if it and all entries
reachable from it are unmodified. In the trivial case where nothing
has been modified, we don't have to make a new tree at all.
2010-05-06 17:55:34 +02:00
Nikolay Sivov 56fdbc226e ole32/ole2: Use W calls for registry access. 2010-05-06 14:22:23 +02:00
Vincent Povirk 42550953a6 ole32: Store the location of all blocks in a big block chain in memory.
A big block chain is a linked list, and we pretty much need random
access to them. This should theoretically make accessing a random
point in the chain O(log2 n) instead of O(n) (with disk access scaling
based on the size of the read/write, not its location). It
theoretically takes O(n) memory based on the size, but it can do
better if the chain isn't very fragmented (which I believe will
generally be the case for long chains). It also involves fetching all
the big block locations when we open the chain, but we already do that
anyway (and it should be faster to read it all in one go than
piecemeal).
2010-05-05 10:41:57 +02:00
Vincent Povirk 93cc582a8d ole32: Remove some assumptions about the internals of BlockChainStream. 2010-05-05 10:41:26 +02:00
Nikolay Sivov 286c5f8816 ole32/marshal: Compare with S_OK instead of keeping in mind that it's zero. 2010-05-03 15:43:01 +02:00
Gerald Pfeifer c6f74e386b ole32: Fix return value for CoRevokeMallocSpy. 2010-05-03 15:40:20 +02:00
Gerald Pfeifer 889900f020 ole32: Fix return value of DefaultHandler_SetClientSite. 2010-05-03 15:40:13 +02:00
Nikolay Sivov f3ab3d971a ole32/ole2: If no effect action selected use ::DragLeave() instead of ::Drop(). 2010-05-03 13:58:59 +02:00
Nikolay Sivov 9c44ed8a6b ole32/ole2: After IDropTarget::DragEnter() failure target doesn't count as valid. 2010-05-03 13:58:54 +02:00
Nikolay Sivov 071d16d624 ole32/tests: Additional test for RevokeDragDrop with destroyed window. 2010-05-03 13:58:41 +02:00
Nikolay Sivov 5426320d82 ole32/ole2: Fix simple parameter handling for DoDragDrop(). 2010-05-03 13:58:38 +02:00
Nikolay Sivov a37dfe3584 ole32/tests: Move tests to a separate function. 2010-05-03 13:58:34 +02:00
Andrew Eikum c22d776e74 ole32: Only fail on missing Implemented Categories key if we actually have categories to check. 2010-05-03 13:56:41 +02:00
Nikolay Sivov 5ac7b165e6 ole32: Use LoadCursorW instead of -A version. 2010-04-28 07:30:55 -05:00
Nikolay Sivov 16bd9d53b9 ole32: Avoid uninitialized value to be potentialy passed to UnhookWindowsHookEx. 2010-04-28 07:29:37 -05:00
Nikolay Sivov d819f13911 ole32: Use -W versions of window/message calls. 2010-04-28 07:28:52 -05:00
Gerald Pfeifer 1e3aba6e7c ole32: Remove variable res which is not really used from CompositeMonikerImpl_Reduce. 2010-04-26 09:03:09 -05:00
Vincent Povirk 0b149df987 ole32: Create storage files with 4096-byte blocks when asked. 2010-04-13 11:30:48 +02:00
Alexandre Julliard 38b6f4dfff ole32/tests: Avoid using a pointer difference in a trace. 2010-04-09 16:14:16 +02:00
Alexandre Julliard 9b471fbd14 ole32: Fix the free threaded marshaller data for 64-bit pointers. 2010-04-07 13:09:49 +02:00
Alexandre Julliard a8ffa9bace ole32: Don't use in-memory structure layouts to build the wire data, define wire-specific structures instead. 2010-04-06 18:07:59 +02:00
Konstantin Kondratyuk eab89da812 ole32: Add missed initialization of virtual function table. 2010-03-29 15:50:22 +02:00
Alexandre Julliard a8e2f4327f ole32: Always start the 64-bit version of rpcss.exe on Wow64. 2010-03-29 15:50:09 +02:00
Mikhail Maroukhine f930c87fd6 objbase.h: CLSIDFromString: Add constness to the parameters declaration in accordance with MSDN. 2010-03-29 12:11:02 +02:00
Vincent Povirk 49a817c064 ole32: Check the small block size limit of storage files.
This value is stored in the storage file header. We currently hard-code it to
0x1000. I don't expect to see files in the wild with other values, but
according to MS this is a valid configuration. For now, just fail if we see
another value.

I've also upgraded the message for unexpected values in storage file headers
to a fixme, since they are valid according to MS.
2010-03-22 10:47:58 +01:00
Vincent Povirk 975c820fce ole32: Don't register an IMallocSpy object when the ole trace is used.
There's no need for this. Any useful information we could get out of it
is availble from the olemalloc channel, and it means that the ole channel
changes behavior in a way that's visible to programs.
2010-03-22 10:47:47 +01:00
Vincent Povirk e05b8416b8 ole32: Track the lowest possibly-free small block in storage files.
This makes creating small block chains O(n) instead of O(n**2) because we
don't have to keep rechecking the first blocks in the file.
2010-03-22 10:47:42 +01:00
Nikolay Sivov 0498534b6b ole32: Remove useless parameter check. 2010-03-17 16:35:47 +01:00
Nikolay Sivov 825a635692 ole32: Turn FIXME to TRACE for CoGetTreatAsClass. 2010-03-16 17:04:15 +01:00
Alexandre Julliard bef5645eb1 makefiles: Remove the no longer needed explicit separators for dependencies. 2010-03-16 13:28:19 +01:00
Vincent Povirk 93c2256cff ole32: Allow storage files with a block size of 4096 to open. 2010-03-15 13:46:59 +01:00
Vincent Povirk 5ceb003a24 ole32: Remove knowledge of block sizes from the BigBlockFile object.
We can't determine the correct block size until we read the header, and we
can't create the BigBlockFile until we know the correct block size. To
solve this dilemma, have StorageImpl calculate the file size it needs instead
of asking the BigBlockFile to "ensure a big block exists".
2010-03-15 13:46:48 +01:00
Vincent Povirk 926669741e ole32: Remove the NUM_BLOCKS_PER_DEPOT_BLOCK define.
This should always be calculated based on the big block size.
2010-03-15 13:46:31 +01:00
Vincent Povirk 7b43123762 ole32: Remove the BIG_BLOCK_SIZE define.
Big block sizes can be 512 or 4096, so we define arrays that are large
enough in either case.
2010-03-15 13:46:19 +01:00
Vincent Povirk b90ab46a82 ole32: Remove the unused BlockBits structures from BigBlockFile objects. 2010-03-15 13:46:07 +01:00
Vincent Povirk 4b7e7bd77f ole32: Fix the big block offset calculation.
Use the actual big block size from the open storage file. Also, remove a
special case that was only used for reading/writing the header.
2010-03-15 13:45:55 +01:00
Vincent Povirk f3db25fc25 ole32: Don't treat the header as a big block in StorageImpl_SaveFileHeader. 2010-03-15 13:45:36 +01:00
Vincent Povirk 7f3211f383 ole32: Don't treat the header as a big block in StorageImpl_LoadFileHeader.
The header is always 512 bytes, regardless of the big block size.
2010-03-15 13:45:30 +01:00
Vincent Povirk 8d58a91fa3 ole32: Allow CopyTo to succeed in spite of already open source streams. 2010-03-15 13:17:34 +01:00
Alexandre Julliard a456e641db ole32/tests: Avoid sizeof in traces. 2010-03-05 15:17:57 +01:00
Vincent Povirk 3733789aa9 ole32: Add tests for CopyTo in recursive situations. 2010-03-04 12:29:21 +01:00
Vincent Povirk 11abad24dd ole32: Add a test showing IStorage_CopyTo ignores open objects in the source. 2010-03-03 11:49:27 +01:00
Vincent Povirk 24ff704835 ole32: Clear the sibling links when reinserting a renamed element. 2010-03-02 16:44:12 +01:00
Reece Dunn 0ed4c6df24 ole32: IMoniker_IsRunning returns E_INVALIDARG when bindctx is NULL. 2010-03-02 11:12:37 +01:00
Reece Dunn f08206b31f ole32: Fix the HGLOBAL stream Seek implementation. 2010-02-25 12:10:40 +01:00
Reece Dunn 4cd390ca4e ole32/tests: Improve the HGLOBAL stream tests for Seek. 2010-02-25 12:10:35 +01:00
Alexandre Julliard 6164ce2d82 makefiles: Use the standard C_SRCS variable as the list of test files.
This enables it to be auto-updated by make_makefiles.
2010-02-22 10:47:11 +01:00
Vincent Povirk d420a858da ole32: Add error checking to StorageBaseImpl_CreateStorage. 2010-02-15 12:20:01 +01:00
Vincent Povirk 1fab6e3515 ole32: Add error checking to StorageBaseImpl_CreateStream. 2010-02-15 12:20:00 +01:00
Vincent Povirk 35b800dc92 ole32: Only warn about storage share mode once. 2010-02-12 11:54:36 +01:00
Vincent Povirk da250c9afe ole32: IStorage_Revert has no effect for non-transacted storages. 2010-01-25 12:58:22 +01:00
Rob Shearman c3af2dd752 ole32: Rearrange declarations in itemmoniker.c to avoid unnecessary forward declarations. 2010-01-22 12:18:46 +01:00
Andrew Eikum 7fe78c14e9 ole32: Downgrade StgIsStorageFile debug info from WARN to TRACE. 2010-01-07 09:25:51 +01:00
Vincent Povirk 0debd2fef4 ole32: Remove fixme for transacted mode. 2010-01-04 11:41:28 +01:00
Alexandre Julliard 2bc9ba758e ole32: Fix some pointer cast warnings on 64-bit. 2009-12-31 12:12:16 +01:00
Alexander Kochetkov 56bc0515c2 ole32/storage32: Fix return value for invalid access mode in OpenStream. 2009-12-30 16:13:57 +01:00
Rob Shearman 88219db8ab ole32: Handle SetClipboardData failing in OLE clipboard functions. 2009-12-30 13:36:50 +01:00
Rob Shearman 36bfaea96d ole32: Fix stream reference leak in test_ReadClassStm. 2009-12-30 13:36:46 +01:00
Rob Shearman b7d86b54d9 ole32: Release the data object and free the cached enum data upon OleUninitialize. 2009-12-30 13:36:42 +01:00
Vincent Povirk ffc4a49bcb ole32: Always allow changes to read-only transacted storages.
The only time the write permissions of transacted storages matter is when
committing.
2009-12-28 11:54:49 +01:00
Paul Vriens 25d15c68dc ole32/tests: Fix a test failure on several platforms. 2009-12-22 13:48:24 +01:00
Vincent Povirk b3511ebb70 ole32: Reread the stream entry after setting the size in StreamWriteAt.
In simple mode, StreamWriteAt would assume that StreamSetSize uses the size
it asks for, but in some cases the size would be pushed above the small block
limit. StreamWriteAt would then attempt to write using a small block chain,
even though a big block chain was created.
2009-12-21 15:01:24 +01:00
Vincent Povirk fc50ff07d6 ole32: Store the most recent item name in IEnumSTATSTG instead of a stack. 2009-12-21 15:01:24 +01:00
Vincent Povirk 4492850200 ole32: Make IEnumSTATSTG functions fail when the parent is invalid. 2009-12-21 15:01:23 +01:00
Vincent Povirk 2010e0fb28 ole32: Add some tests for IEnumSTATSTG. 2009-12-21 15:01:23 +01:00
Vincent Povirk 4f0dfb51b3 ole32: Fix memory leaks in the storage test. 2009-12-18 11:44:04 +01:00
Vincent Povirk 5d9fd1b716 ole32: Compare upper character values directly in entryNameCmp.
The sort function used by native is not entirely consistent with lstrcmpiW,
even on Windows.
2009-12-18 11:43:34 +01:00
Juan Lang 776ee9ee81 ole32: Fix a memory leak. 2009-12-18 11:39:08 +01:00
Vincent Povirk 393c5af205 ole32: Add a cache for block chain streams in StorageImpl. 2009-12-16 12:24:27 +01:00
Huw Davies c6d4df8b1c ole32: Fix several memory leaks in the tests.
Found by Valgrind.
2009-12-16 12:24:19 +01:00
Vincent Povirk 3ac34f7416 ole32: Properly free temporary objects when StorageBaseImpl_CopyTo fails. 2009-12-14 12:06:35 +01:00
Vincent Povirk 6afe24c38d ole32: Remove an unnecessary special case in StorageBaseImpl_CopyTo.
Opening a storage when it has already been opened now fails with
STG_E_ACCESSDENIED. If we attempt to copy a storage to its own child, this
will happen during the copy.
2009-12-14 12:06:25 +01:00
Vincent Povirk 0ad48797f8 ole32: Fix a memory leak in StorageBaseImpl_CopyTo.
Spotted by valgrind.
2009-12-14 12:06:17 +01:00
Vincent Povirk 3ff33e9303 ole32: Implement Revert for transacted storage objects. 2009-12-11 12:16:26 +01:00
Vincent Povirk 226363f5df ole32: Implement transacted storage. 2009-12-11 12:16:26 +01:00
Vincent Povirk d799f7e189 ole32: Add a stub transacted storage type.
TransactedSnapshotImpl acts as a proxy between the user and the storage
interfaces that modify the file directly (or another transacted storage).
Currently, it does not change the operations.
2009-12-11 12:16:26 +01:00
Vincent Povirk 42142200d5 ole32: Add Invalidate to the storage vtable. 2009-12-11 12:16:26 +01:00
Vincent Povirk 75fe621192 ole32: Create internal storage objects with a refcount of 1.
For consistency with StorageImpl_Construct.
2009-12-11 12:16:25 +01:00
Paul Vriens 49d40d80f4 ole32/tests: Don't crash on Win9x/WinMe by using more A-functions. 2009-12-10 12:39:52 +01:00
Vincent Povirk 8b3ff9d179 ole32: Remove the ancestorStorage attribute. 2009-12-10 11:51:39 +01:00
Vincent Povirk 5d39c31bff ole32: Make IEnumSTATSTGImpl reference the parent storage. 2009-12-10 11:51:29 +01:00
Vincent Povirk 43184aaf52 ole32: Make findElement take a StorageBaseImpl. 2009-12-10 11:51:21 +01:00
Vincent Povirk 55b3a6e59f ole32: Don't use ancestorStorage to decide if a storage is transacted. 2009-12-10 11:51:10 +01:00
Vincent Povirk 1a12141d86 ole32: Add a test for modifying read-only substorage objects. 2009-12-10 11:51:01 +01:00
Huw Davies 09db528847 ole32: Release the error info strings.
Found by Valgrind.
2009-12-09 16:50:36 +01:00
Alexandre Julliard 44a9bae9f8 ole32: Fix some pointer cast warnings on 64-bit. 2009-12-09 12:04:01 +01:00
Vincent Povirk df0ef756b3 ole32: Add an attribute to StorageBaseImpl to track its reverted status. 2009-12-09 12:03:40 +01:00
Vincent Povirk 5b79c5a5e4 ole32: Store the parent of internal storage objects. 2009-12-09 12:03:30 +01:00
Vincent Povirk 8518323e07 ole32: Don't track the stream size in storage stream objects.
We can't do this safely when there are multiple objects for a single stream.
2009-12-09 12:03:18 +01:00
Vincent Povirk 6d06c43e53 ole32: Use the storage vtable to resize streams. 2009-12-09 12:03:10 +01:00
Vincent Povirk 1d4c698ef3 ole32: Use the storage vtable to write to streams. 2009-12-09 12:02:59 +01:00
Vincent Povirk 62e54bacba ole32: Use the storage vtable to read streams. 2009-12-08 12:35:33 +01:00
Vincent Povirk ee39a21d2b ole32: Add DestroyDirEntry to the storage vtable. 2009-12-08 12:35:17 +01:00
Vincent Povirk f43e013f73 ole32: Take a StorageBaseImpl in removeFromTree. 2009-12-08 12:35:08 +01:00
Vincent Povirk 0425ed1d38 ole32: Take a StorageBaseImpl in insertIntoTree. 2009-12-08 12:35:00 +01:00
Vincent Povirk 9300a92ccc ole32: Change the base IStorage filename to a pointer type.
The maximum size of the name returned by Stat() on a top-level storage has
nothing to do with DIRENTRY_NAME_BUFFER_LEN. Windows can return longer names
and probably has a limit of MAX_PATH. Also, Stat always returns an absolute
pathname, so we don't need a special case in StgOpenStorage.
2009-12-08 12:34:47 +01:00
Nathan Gallaher de239d86fd ole32: Fix invalid memory access in storage32. 2009-12-07 14:53:31 +01:00
Vincent Povirk f3d194b391 ole32: Add ReadDirEntry to the storage vtable. 2009-12-07 09:49:05 +01:00
Vincent Povirk 176cdfc75e ole32: Add WriteDirEntry to the storage vtable. 2009-12-07 09:49:05 +01:00
Vincent Povirk 8a332db2c5 ole32: Change ReadDirEntry return type to HRESULT. 2009-12-07 09:49:05 +01:00
Vincent Povirk df13a1d1fe ole32: Change WriteDirEntry return type to HRESULT. 2009-12-07 09:49:05 +01:00
Vincent Povirk 382ffed003 ole32: Make CreateDirEntry a virtual method. 2009-12-07 09:49:05 +01:00
Rob Shearman 2b74e774f9 ole32: Add tests for HGLOBAL stream ignoring the HighPart of the offset for seeks. 2009-12-07 09:32:11 +01:00
Rob Shearman 4ad631286a ole32: Initialise all of position variables in test_save_load_filemoniker.
Initialise all 8-bytes instead of just the lower 4-bytes. This test
isn't designed to be testing whether the Seek method of the object
return by CreateStreamOnHGlobal uses the high part of the positions
passed in.
2009-12-07 09:32:08 +01:00
Vincent Povirk cc98619ca4 ole32: Add an internal vtable to StorageBaseImpl objects. 2009-12-04 14:34:59 +01:00
Vincent Povirk f434ab1f2a 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.
2009-12-04 14:34:59 +01:00
Vincent Povirk 5456724fd7 ole32: Move the create attribute from StorageImpl to StorageBaseImpl.
This is to avoid accessing the top-level StorageImpl directly.
2009-12-04 14:34:58 +01:00
Vincent Povirk b6dc718c44 ole32: Check the current storage for STGM_SIMPLE rather than ancestorStorage.
Since simple mode does not support substorages, we know these are the same.
2009-12-04 14:34:58 +01:00
Vincent Povirk cf5e6c571a ole32: Forbid substorages of simple mode storages. 2009-12-04 14:34:58 +01:00
Rob Shearman 552c91106d ole32: Fix test failure on win2000+.
These OSs have different behaviour w.r.t. quotes in path names and
don't ignore the rest of the path outside of the quotes.
2009-12-01 15:10:37 +01:00
Rob Shearman 510ed24f9a ole32: Cope with double quotes in paths for libraries to be loaded from the registry. 2009-11-30 12:48:05 +01:00
Rob Shearman 2226b678e3 ole32: Fix the length of data written and read for VT_CF types in property storage code. 2009-11-29 16:40:26 +01:00
Rob Shearman add909a021 ole32: Release the storage object in DataCache_Destroy. 2009-11-29 16:40:12 +01:00
Rob Shearman db33e8fdd9 ole32: Fix off-by-one error in FileMonikerImpl_DecomposePath.
strgtable needs to be an array of the same size as str, including the
nul-terminator.
2009-11-29 16:39:45 +01:00
Rob Shearman 6592c25bc7 ole32: Fix circular reference count in default handler objects.
This is caused by caching a pointer and reference to the data cache's
IPersistStorage interface without managing reference counts
appropriately.
2009-11-24 15:54:56 +01:00
Rob Shearman 4b1d527b15 ole32: Fix a typo in PropertyStorage_WritePropertyToStream that caused the wrong data to be written to the stream.
The field pClipData is a pointer to the data to be written, not the start of it.
2009-11-24 15:54:41 +01:00
Vincent Povirk 9da3365e84 ole32: Allocate the StorageImpl in StorageImpl_Construct.
This makes cleanup after errors much easier, as we can just use the regular
destructor.
2009-11-24 10:55:59 +01:00
Vincent Povirk 6c3961f0c4 ole32: Copy the storage filename at stat time, not read time. 2009-11-24 10:55:45 +01:00
Rob Shearman 9943facb26 ole32: Fix error code returned by CoGetClassObject/CoCreateInstance in CLSCTX_REMOTE_SERVER case. 2009-11-24 10:52:07 +01:00
Rob Shearman 8554ce5b18 ole32: Add tests for errors returned by CoCreateInstance for classes that are not registered. 2009-11-24 10:52:02 +01:00
Marcus Meissner 000e1e0ce0 ole32: Some missing error checking in FileMonikerImpl_CommonPrefixWith (Coverity). 2009-11-24 10:51:42 +01:00
Rob Shearman 24cccbf4d1 ole32: Add inproc handler object creation support for CoCreateInstance. 2009-11-24 10:46:12 +01:00
Rob Shearman a7b621bd9b ole32: Fix behaviour of CoLockObjectExternal with fLastUnlockReleases as FALSE.
The parameter controls whether weak references are ignored, not
whether the last stub_manager_int_release should be called when the
total reference count goes to zero.
2009-11-24 10:46:06 +01:00
Rob Shearman bcf0be6a99 ole32: Add test for CoLockObjectExternal with fLastUnlockReleases as FALSE. 2009-11-24 10:46:00 +01:00
Rob Shearman d963e97f32 ole32: Objects registered as local servers don't need to support IClassFactory. 2009-11-20 16:38:56 +01:00
Rob Shearman 377159c4a7 ole32: Fix size of memory allocation in FileMonikerImpl_DecomposePath. 2009-11-20 16:38:46 +01:00
Rob Shearman d1db29e801 ole32: Fix buffer overrun in CLIPFORMAT_UserMarshal.
The string in format is nul-terminated so use memcpy to copy it into
the buffer and don't try to nul-terminate it manually which causes a
write outside of the allocated buffer length.

Fix a similar off-by-one error in CLIPFORMAT_UserUnmarshal too. This
time it is only reading from beyond the buffer.
2009-11-20 16:38:39 +01:00
Vincent Povirk 669af158da ole32: Invalidate open storage objects that are deleted. 2009-11-20 11:15:53 +01:00
Vincent Povirk 8569d547b9 ole32: Forbid renaming an open storage. 2009-11-20 11:15:44 +01:00
Vincent Povirk c62a4ad841 ole32: Forbid opening the same storage twice. 2009-11-20 11:15:35 +01:00
Vincent Povirk d3c0a3a829 ole32: Invalidate open storage objects that outlive their parent. 2009-11-20 11:15:27 +01:00
Vincent Povirk 3cd2a80eda ole32: Add test for freeing the parent of a storage. 2009-11-20 11:15:21 +01:00
Vincent Povirk 52100e9620 ole32: Do not allow renaming streams that are open. 2009-11-19 11:46:57 +01:00
Vincent Povirk 371f6a4818 ole32: Do not allow the same stream to be opened twice. 2009-11-19 11:46:49 +01:00
Vincent Povirk 53128d522b ole32: Use safe list iteration when searching for streams to invalidate. 2009-11-19 11:46:41 +01:00
Vincent Povirk 9d0c4c971d ole32: Always invalidate stream objects when deleting the stream. 2009-11-19 11:46:32 +01:00
Vincent Povirk a2c405fa15 ole32: Add a test for freeing the parent of an open stream. 2009-11-19 11:46:18 +01:00
Vincent Povirk 55604eb36c ole32: Invalidate child streams when a non-top-level storage is freed. 2009-11-19 11:46:07 +01:00
Vincent Povirk e77e9e45aa ole32: Add a DirRef type for references to directory entries. 2009-11-18 11:03:58 +01:00
Vincent Povirk d3dbc8b1e6 ole32: Rename property variables in storage stream implementation. 2009-11-18 11:03:30 +01:00
Rob Shearman 932544d34c ole32: OleInitialize should return S_OK if it is called for the first time on a thread independently of CoInitializeEx. 2009-11-17 15:14:53 +01:00
Vincent Povirk aca5cc52e1 ole32: Rename property variables in SmallBlockChainStream methods. 2009-11-17 12:04:41 +01:00
Vincent Povirk 8f2d0f8887 ole32: Rename property variables in BlockChainStream methods. 2009-11-17 12:04:34 +01:00
Vincent Povirk 3aa8cdec7b ole32: Rename property variables in StorageInternalImpl_Construct. 2009-11-17 12:04:27 +01:00
Vincent Povirk f8ca09c0b8 ole32: Rename property variables in IEnumSTATSTGImpl methods. 2009-11-17 12:04:21 +01:00
Vincent Povirk 54781b657f ole32: Rename property variables in block chain conversion functions. 2009-11-17 12:04:14 +01:00
Vincent Povirk d21d690ac5 ole32: Rename property variables in internal StorageImpl methods. 2009-11-17 12:04:07 +01:00
Vincent Povirk 26acdb3efd ole32: Rename property variables in StorageImpl_Construct. 2009-11-17 12:04:00 +01:00
Vincent Povirk f1861166bb ole32: Rename property variables in internal storage functions. 2009-11-17 12:03:52 +01:00
Vincent Povirk b984e46b86 ole32: Rename property variables in the StorageBaseImpl methods. 2009-11-17 12:03:42 +01:00
Vincent Povirk de3ed0bb50 ole32: Rename firstPropertyNode to storageDirEntry. 2009-11-17 12:03:32 +01:00
Vincent Povirk 42e8dfa2cb ole32: Rename propertyNameCmp to entryNameCmp. 2009-11-16 11:33:54 +01:00
Vincent Povirk a9ad3fed29 ole32: Rename property variables in insertIntoTree. 2009-11-16 11:33:47 +01:00
Vincent Povirk 14647d7ca9 ole32: Rename deleteSt*Property to deleteSt*Contents.
We now only delete the node contents in these functions.
2009-11-16 11:33:41 +01:00
Vincent Povirk 390e2711f6 ole32: Rename rootPropertyName to rootEntryName. 2009-11-16 11:33:30 +01:00
Vincent Povirk 93db14e79a ole32: Rename SmallBlockChainStream.ownerPropertyIndex to ownerDirEntry. 2009-11-16 11:33:22 +01:00
Vincent Povirk 848caa5168 ole32: Rename BlockChainStream.ownerPropertyIndex to ownerDirEntry. 2009-11-16 11:33:15 +01:00
Vincent Povirk df960e27c4 ole32: Rename stream.ownerProperty to dirEntry. 2009-11-16 11:33:06 +01:00
Vincent Povirk 4ba13cb9a7 ole32: Rename rootPropertySetIndex to storageDirEntry.
Not only is it not related to property set storages, it's also not the root
of the tree that's used to search for elements.
2009-11-16 11:32:58 +01:00
Vincent Povirk cf1242e03b ole32: Rename propertyUniqueID to clsid. 2009-11-16 11:32:47 +01:00
Vincent Povirk 2203264bfa ole32: Rename propertyType to stgType. 2009-11-16 11:32:39 +01:00
Vincent Povirk 5838bcf801 ole32: Rename PROPERTY_RELATION constants to DIRENTRY_RELATION. 2009-11-13 11:52:24 +01:00
Vincent Povirk 5969bde0b1 ole32: Rename dirProperty to dirRootEntry. 2009-11-13 11:52:24 +01:00
Vincent Povirk 8a8471a765 ole32: Rename PROPSET_BLOCK_SIZE to RAW_DIRENTRY_SIZE. 2009-11-13 11:52:23 +01:00
Vincent Povirk 74d0503026 ole32: Rename PROPERTY_NAME_*_LEN to DIRENTRY_NAME_*_LEN. 2009-11-13 11:52:23 +01:00
Vincent Povirk 86759988f1 ole32: Rename PROPERTY_NULL to DIRENTRY_NULL. 2009-11-13 11:52:23 +01:00
Vincent Povirk 1bd2617c7a ole32: Rename StorageUtl_CopyPropertyToSTATSTG. 2009-11-12 13:08:15 +01:00
Vincent Povirk 42a4b11e2d ole32: Rename StorageImpl_WriteProperty to StorageImpl_WriteDirEntry. 2009-11-12 13:08:08 +01:00
Vincent Povirk b3c30b1f4a ole32: Rename StorageImpl_ReadProperty to StorageImpl_ReadDirEntry. 2009-11-12 13:08:00 +01:00
Vincent Povirk 39e894f4f6 ole32: Rename the StgProperty structure to DirEntry.
The term "property" is misleading (ole32 has an unrelated feature
called a "property set storage"), and I haven't seen it used anywhere
outside the Wine code. The term "directory entry" matches the MS
documentation and more accurately describes their use in the file.
2009-11-12 13:07:49 +01:00
Vincent Povirk b1baa05e28 ole32: Remove the term "property type", it's just an STGTY.
According to the MS spec, the types in compound storage files are simply
STGTY values, with an extra value named STGTY_ROOT for the root storage.
2009-11-12 13:07:27 +01:00
Hans Leidekker e265d534e4 ole32: Return success from OleLockRunning when the object does not support IRunnableObject. 2009-11-11 11:50:50 +01:00
Vincent Povirk bc3fa10773 ole32: Add tests for IStorage_RenameElement. 2009-11-11 10:55:07 +01:00
Vincent Povirk 87ed7d9b8b ole32: Simplify RenameElement by using the same entry in the file. 2009-11-11 10:54:59 +01:00
Vincent Povirk 274a1d11c1 ole32: Adjust updatePropertyChain signature and name to match removeFromTree. 2009-11-11 10:54:42 +01:00
Rob Shearman 0228008bb8 widl: Allow pointers, type-qualifiers and other more complicated constructions in sizeof and cast expressions. 2009-11-09 20:42:57 +01:00
Vincent Povirk 29c5ba5a77 ole32: Add and use a destroyDirEntry function for deleting directory entries.
We need this so we can free any related resources in memory.
2009-11-03 21:31:10 +01:00
Vincent Povirk bdc4755d7d ole32: Remove uses of This->base.ancestorStorage in removeFromTree. 2009-11-03 21:30:55 +01:00
Vincent Povirk 4e4810f2c5 ole32: Remove uses of This->base.ancestorStorage in createDirEntry. 2009-11-03 21:30:49 +01:00
Vincent Povirk 7973904d56 ole32: Rename StorageImpl_SetStateBits to StorageBaseImpl_SetStateBits. 2009-11-03 21:30:39 +01:00
Vincent Povirk 17236668c9 ole32: Rename StorageImpl_SetElementTimes to StorageBaseImpl_SetElementTimes. 2009-11-03 21:30:34 +01:00
Vincent Povirk fd2f35a872 ole32: Rename StorageImpl_DestroyElement to StorageBaseImpl_DestroyElement. 2009-11-03 21:30:27 +01:00
Vincent Povirk c4aed16590 ole32: Rename StorageImpl_MoveElementTo to StorageBaseImpl_MoveElementTo. 2009-11-03 21:30:21 +01:00
Vincent Povirk a5f87a4731 ole32: Rename StorageImpl_CopyTo to StorageBaseImpl_CopyTo. 2009-10-30 11:28:22 +01:00
Vincent Povirk 39e35cd7b4 ole32: Don't call internal functions from OLECONVERT_WriteOLE20ToBuffer. 2009-10-30 11:28:14 +01:00
Vincent Povirk 6a36025713 ole32: Don't call internal functions from OLECONVERT_GetOLE20FromOLE10. 2009-10-30 11:28:07 +01:00
Vincent Povirk 4f6e2453e9 ole32: Rename StorageImpl_CreateStorage to StorageBaseImpl_CreateStorage.
We don't just use the function for StorageImpl.
2009-10-30 11:27:43 +01:00
Vincent Povirk f82924ffb9 ole32: Take a StorageBaseImpl in updatePropertyChain.
The function is not always called with a top-level storage object, and the
signature should reflect that.
2009-10-30 11:27:29 +01:00
Vincent Povirk 13b9666443 ole32: Convert adjustPropertyChain into real binary tree removal.
Finding the parent of a node in a binary tree is a detail that should
be handled inside the function.
2009-10-30 11:27:07 +01:00
Vincent Povirk fd993b7d9d ole32: Remove directory entries from the tree before we free them.
The directory entry should still be valid as long as it's in the tree.
2009-10-30 11:26:50 +01:00
Vincent Povirk 37f3f3d92a ole32: Write the new data in getFreeProperty and rename the function.
This is to avoid calling WriteProperty with an index to a directory entry
that has not yet been reserved in the file. We reserve the entry by writing
the new data to it.
2009-10-29 15:48:12 +01:00
Vincent Povirk 20dd1886d5 ole32: Split the data conversion functions out of WriteProperty. 2009-10-29 15:47:55 +01:00
Vincent Povirk ac9d77cd10 ole32: Use the raw directory entry functions in getFreeProperty.
The meaning of the "index" argument in Read/WriteProperty will likely
change in the future, but getFreeProperty must work with real indexes
into the file's real directory stream.
2009-10-29 15:47:44 +01:00
Vincent Povirk e71c696b51 ole32: Move the low-level functionality of WriteProperty to a new function. 2009-10-29 15:47:30 +01:00
Vincent Povirk 56622de951 ole32: Move the low-level functionality of ReadProperty to a new function. 2009-10-29 15:47:20 +01:00
Vincent Povirk 5d550cdc45 ole32: Further simplify adjustPropertyChain and fold in findPlaceholder.
The logic is unchanged from the original version.
2009-10-29 15:47:03 +01:00
Vincent Povirk a7e69339dc ole32: Reduce duplicated code in adjustPropertyChain.
Most of the work is the same regardless of relation type, so bring
those parts out of the relation type test.
2009-10-29 15:46:16 +01:00
Vincent Povirk 911e923fbc ole32: Don't use IEnumSTATSTGImpl to search for a parent directory entry.
Use a binary search to find the parent of a storage object being deleted.
We currently use IEnumSTATSTGImpl to do a linear search, which is
unnecessary.
2009-10-28 11:12:24 +01:00
Vincent Povirk 0359a47d0d ole32: Fix the LEFTCHILD and RIGHTCHILD offset defines. 2009-10-28 11:10:59 +01:00
Alexandre Julliard 0beaa44d7d ole32: Specify the full application path when starting rpcss.exe. 2009-10-27 11:20:34 +01:00
Vincent Povirk ee6856d874 ole32: Don't use IEnumSTATSTG to search for elements of storages.
We use it to do a linear search of a binary tree, which is overkill.
Replace it with a simple binary search.
2009-10-26 11:17:35 +01:00
Vincent Povirk dce1ec06c8 ole32: Rename previous/nextProperty to left/rightChild.
These fields are used to build a binary tree of elements in a storage. This
should make the usage clearer.
2009-10-26 11:17:23 +01:00
Vincent Povirk 224ddb50f3 ole32: Clarify the timestamp fields in StgProperty.
According to the MS spec, these are FILETIME structures containing creation
and modification times.
2009-10-26 11:17:13 +01:00
Alexandre Julliard f7bd47f78b ole32/tests: Set returned pointer to NULL in CreateInstance (Valgrind). 2009-10-22 13:04:36 +02:00
Paul Vriens 5f52d86cc2 oleaut32/tests: Remove a temp file. 2009-10-20 14:39:37 +02:00
Vincent Povirk 657c832765 ole32: Add test showing storage objects can't be opened twice. 2009-10-14 11:23:07 +02:00
Andrew Eikum 7e7ed92b5d ole32/tests: Add tests for IStorage::CopyTo with IID exclusions. 2009-10-12 12:13:14 +02:00
Andrew Eikum 7b475390e4 ole32: Use rgiidExclude in StorageImpl::CopyTo. 2009-10-12 12:13:11 +02:00
Andrew Eikum 29fc53b632 ole32/tests: Add tests for IStorage::CopyTo with SNB exlusions. 2009-10-06 11:57:44 +02:00
Andrew Eikum 8672289c6e ole32: Use snbExclude in StorageImpl::CopyTo. 2009-10-06 11:57:37 +02:00
Andrew Eikum 60d8547e61 ole32/tests: Add tests for IStorage::CopyTo. 2009-10-06 11:57:29 +02:00
Nikolay Sivov 5b723235d8 ole32: Check source pointer in StringFromGUID2. 2009-10-06 11:57:20 +02:00
Vincent Povirk b41822b1dc ole32: Remove useless comments. 2009-10-05 13:46:00 +02:00
Vincent Povirk 536aa9be99 ole32/tests: Add test for non-root transacted storage objects. 2009-10-05 13:46:00 +02:00
Vincent Povirk 3c9067de9f ole32/tests: Add test for IStorage::Revert. 2009-10-05 13:46:00 +02:00
Vincent Povirk d6e020fdb8 ole32/tests: Test substorages of transacted storage objects. 2009-10-05 13:46:00 +02:00
Vincent Povirk 40433554d5 ole32: We do need to implement Commit/Revert for non-root storage. 2009-10-05 13:45:59 +02:00
Jörg Höhle 08df19b405 ole32/tests: Guard ReleaseStgMedium with SUCCEEDED. 2009-09-30 14:31:57 +02:00
Markus Stockhausen abdebcdbbe ole32/storage32: Fix for reference counters in nested storage. 2009-09-26 16:05:45 +02:00
Alexandre Julliard f5ed7868ee ole32: Don't register interfaces that belong to actxprxy. 2009-09-11 12:44:15 +02:00
Huw Davies 9b38ffe6c6 ole32: The server principal name can be the constant COLE_DEFAULT_PRINCIPAL. 2009-09-08 13:51:18 +02:00
Andrew Eikum 968126c231 ole32: Don't fail when constants are 'incorrect'. 2009-09-08 12:11:10 +02:00
Austin English f8daa90284 ole32: Fix build on Power PC. 2009-09-01 12:52:11 +02:00
Eric Pouech 09adcee263 ole32: Fix various missing Release calls on monikers. 2009-08-29 17:11:31 +02:00
Eric Pouech 35d6217def Remove a couple of superfluous casts. 2009-08-29 17:11:26 +02:00
Andrew Eikum a0d262c545 ole32: Overwrite previous CompObj instead of failing. 2009-08-28 11:54:30 +02:00