Merge branch 'new_extract'
authorEric Biggers <ebiggers3@gmail.com>
Mon, 19 May 2014 17:05:11 +0000 (12:05 -0500)
committerEric Biggers <ebiggers3@gmail.com>
Thu, 22 May 2014 01:38:50 +0000 (20:38 -0500)
commitcc7b6ee47d4037ae8fa11b4c2d5154091d543704
treeca36ed9aa33e034e613e199809ad5e1fc607277b
parenta0bee8fd4aed91f2ec4da35077dad47582a12a72
Merge branch 'new_extract'

This rewrites much of the extraction code to give more freedom to
extraction backends about how they extract the files.  This has
advantages for all three backends:

UNIX:  Now does a lot fewer path lookups and should exhibit better data
locality.  Final "set timestamps" pass only processes directories, since
nondirectory timestamps are set before that point.

NTFS-3g:  Now completely based on inode numbers; no paths are ever
created, unless a printable path is needed for an error message.  Got rid
of final "set attributes" and "set timestamps" passes, since all
attributes and timestamps are set before that point.

Windows:  Now uses NT paths relative to the target directory, performs
fewer path lookups, extracts encrypted files without individually reading
ranges from the WIM (expensive for ESD files), and a few other changes.
A lot of code previously in the generic file extract.c actually could be
moved here.

Also, there are no longer any temporary files needed.  All three backends
simply write all the instances of each stream at the same time, which is
more efficient.

Still TODO:
- New format for UNIX data
- Add fallbacks for when number of open files gets too high
- Add fallback for huge encrypted files
- If possible add hardlink and symlink modes back, however these
  are pretty useless.
24 files changed:
NEWS
configure.ac
doc/man1/imagex-apply.1.in
include/wimlib.h
include/wimlib/apply.h
include/wimlib/dentry.h
include/wimlib/inode.h
include/wimlib/lookup_table.h
include/wimlib/reparse.h
include/wimlib/wimboot.h
include/wimlib/win32_common.h
include/wimlib_tchar.h
programs/imagex.c
src/extract.c
src/lookup_table.c
src/ntfs-3g_apply.c
src/reparse.c
src/unix_apply.c
src/update_image.c
src/wimboot.c
src/win32_apply.c
src/win32_common.c
tests/test-imagex
tests/win32-tree-cmp.c