• Vincent Povirk's avatar
    ole32: Rewrite transacted storage to be more lazy. · d07a4868
    Vincent Povirk authored
    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.
    d07a4868
Name
Last commit
Last update
dlls Loading commit data...
documentation Loading commit data...
fonts Loading commit data...
include Loading commit data...
libs Loading commit data...
loader Loading commit data...
programs Loading commit data...
server Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
ANNOUNCE Loading commit data...
AUTHORS Loading commit data...
COPYING.LIB Loading commit data...
LICENSE Loading commit data...
LICENSE.OLD Loading commit data...
Make.rules.in Loading commit data...
Makefile.in Loading commit data...
Maketest.rules.in Loading commit data...
README Loading commit data...
VERSION Loading commit data...
aclocal.m4 Loading commit data...
configure Loading commit data...
configure.ac Loading commit data...