TODO
* fsntfsinfo: print extents/data runs of $DATA stream?
* fsntfsmount: escape control characters

* test if format version 1.2 is supported and updated README

* refactor $I30 index to file entry
** refactor libfsntfs_mft_entry_has_directory_entries_index

* Ntfs compressed stream add uncompressed size check
* add raw (no valid size) data stream support
* check data size of WOF reparse point
* add has WOF compressed data stream function (for dfVFS)

* complete read/write lock support
** refactor volume and file entry to use file system
** file entry
*** libfsntfs_file_entry_get_name_attribute_index
*** libfsntfs_file_entry_get_security_descriptor_size
*** libfsntfs_file_entry_get_security_descriptor
*** continue with libfsntfs_file_entry_get_sub_file_entry_by_index
** MFT metadata file
** specific attribute values functions
** USN journal

* MFT entry
** preserve attribute list data MFT entries?
** libfsntfs_attribute add function to indicate partial attribute (has attribute_list_entry but no mft_attribute)

* fsntfsinfo complete bodyfile support
** fix libfsntfs_file_entry_get_security_descriptor_size: unable to retrieve security descriptor from index for identifier: 0.
** add support for tsk metadata address calculation? inside MFT attribute?

* fsntfsinfo -F add support for ADS notation

* API changes
** rename libfsntfs_volume_get_number_of_file_entries to libfsntfs_volume_get_number_of_mft_entries

* change libfsntfs_mft_attribute_get_utf[8,16]_name[_size] to return 0 if not set

* add debug compare of long and short names

* refactor index to better handle get entry by identifier
** make index value cache a passthrough for index node cache
** use tree for get entry by filename
** use tree for get entry by security identifier
** remove the need for a local cache in libfsntfs_index_read_sub_nodes, use cache value lock instead

* rename libfsntfs_internal_attribute_get_data to libfsntfs_internal_attribute_get_resident_data
* libfsntfs_attribute add read / seek functions
* change calls to libfsntfs_mft_entry_get_index_by_utf8_name to utf16 for optimization
* change calls to libfsntfs_mft_entry_get_data_attribute_by_utf8_name to utf16 for optimization
* enforce LIBFSNTFS_FILE_ENTRY_FLAGS_MFT_ONLY when trying to read data runs

* libfsntfs_volume_get_root_directory return 0 if MFT entry 5 does not exists

* Check if mft_entry should be cloned before passing to
  libfsntfs_file_entry_initialize in case it is cached out
  otherwise remove it from file_entry

* tests: pass mft_metadata_file different input files
* look into handling directories with high number of entries
* libfsntfs/pyfsntfs attribute
  - expose raw attribute data?
* USN change journal
  - add support for values in $Max
* resident data
  - handle valid data size
* enforce LIBFSNTFS_FILE_ENTRY_FLAGS_MFT_ONLY when trying to read data runs
* fix or remove TODO_CASE_INSENSITIVE

* compressed data
  - handle decompression errors e.g.
    compression tuple offset value out of bounds.
  - have means to map sparse ranges outside compressed blocks
  - handle valid data size
* create fsntfsexport tool to export file entry data
* handle pre 3.1 attribute names?
* check file entry life times
* set file entry name, if get by index and number of filenames is 1

* cached indexes?
* data runs block
  - add a check to see if data run sizes add up
* volume
  - complete libfsntfs_volume_has_bitlocker_drvie_encryption
  - complete libfsntfs_volume_has_volume_shadow_snapshots
* file entry
  - add API get file name by attribute index functions?
  - add API get parent file_reference name by attribute index functions?
  - add API function for owner
  - add API function for security identifier
  - only retrieve file name from the directory entry?
    or make clear in function documentation that first
    non-short filename is the fallback?
  - add support to retrieve name of the root entry if directory entry is missing
* pyfsntfs
  - add attribute type enum
* pyfsntfs file entry
  - expose more MFT entry values through API and pyfsntfs
  - add is empty function
  - add has_reparse_point function
  - add has_symbolic_link function
  - add is_corrupt function?
  - how to handle file-like object functions for non-data file entry
* pyfsntfs file entry/data stream
  - add extents iterator?
* libfsntfs/pyfsntfs file entry
  - expose default data stream
  - add support for short file name
  - fallback to short file name if no long
* libfsntfs_mft_entry_read_element_data set MFT only flag using element flags
* libfsntfs_attribute_read_from_mft handle attribute size out of bounds
* mft metadata file parsing mark file entry as in complete if data is stored
  outside the $MFT
* change MFT entry flags value checks to named definitions
* attribute data parsing
  - add SSIZE_MAX check for attribute->data_size before (size_t) cast

* cached approach of reading attributes ?

* fix issue on win2k image
  - stack overflow infinite loop
  - determine MFT entry index based on offset
    do not rely on value in structure

* MFT entry create get data segment function for internal usage

* how to handle named index roots e.g. $ObjId:$O, $Quota:$O
* fix issue with bounded MFT entry cache
* support MFT entry 0 consisting of multiple $DATA attributes
  - add segment support to ntfs attribute data reference

* file_entry: clone directory entry ?
* what about ADS support ?
  - todo read from ads
* change libfsntfs_attribute_reference_append_attribute into insert and sort
  attribute ranges

* add function to retrieve MFT entry by index
* check if check_signature function uses the right offset
* refactor: libfsnt_array_append_entry in index ?

* move get mft entry to file entry initialize ?
  - clone mft entry in file entry initialize (for now the mft entry cache
  contains a slot for every entry)

* move volume header from io handle to separate object ?

* $MFT scan
  - mark ignored attribute list
  - mark ignored data stream
  - mark ignored index
  - handle corrupt MFT entries (e.g. missing FILE signature) (+/-)
  - allow to read data runs but do not allow to read data
* $UsnJrnl:$J parsing
  - move UsnJrnl parsing into library ?
  - add support for $UsnJrnl:$J file parsing

* API
  - expose logged utility stream attribute

Format:
* index
  - group equivalent index data values
* boot block
  - remove value restriction add sanity check
* add support for attributes:
  - logged utillity stream (LOGGED_UTILITY_STREAM) (partial)
* pre NTFS 3.0 attribute types
  - volume version
* filenames
  - ignoring short filenames for now?
* ntfs3g indicates volume is hibernated, could this be stored in the volume flags?

Tools:
* fsntfsinfo
  - print ADS
  - move UsnJrnl to separate tool?
  - fix remnant data in buffer and remove work around
  - sanitize control characters in filenames
  - add detection of BDE and VSS
  - add support for $LogFile
  - print $DATA attribute size

Error tolerance:
* Support partial images/file systems

Tests:
* file with resident data
* file with non-resident data
* file with sparse data
* file with compressed data
* file with valid data size < data size
* file with ADS
* directory with ADS

Performance:
* compact attribute union data/file reference (use type to distinguish between them)

Debug:
* print volume information flags description

Deployment
* write man pages

20141011
* see `git log' for more recent change log
* updated dependencies
* changes for project site move

20141004
* removed README.macosx

20140810
* worked on exposing the attributes

20140809
* worked on data streams support
* worked on exposing the attributes

20140808
* worked on data streams support

20140803
* bug fix in Python bindings

20140628
* Worked on format support

20140530
* Worked on Python bindings

20140529
* updated dependencies
* Worked on Python bindings

20140417
* small changes

20140318
* worked on non-resident attribute list support

20140207
* worked on libfdata refactor

20140206
* worked on libfdata refactor

20140205
* worked on libfdata refactor

20140204
* worked on libfdata refactor

20140203
* worked on libfdata refactor

20140119
* worked on libfdata refactor

20140118
* 2014 update
* updated dependencies
* worked on libfdata refactor

20131109
* updated dependencies

20130915
* code clean up

20130914
* updated dependencies
* added libcthreads build support

20130224
* updated dependencies
* 2013 update

20120929
* updated dependencies

20120821
* improve NTFS version 3.0 support

20120820
* applied update
* improved reading MFT attribute lists and data MFT entries

20120526
* worked on MFT read and seek data functions

20120520
* 2012 update
* updated dependencies
* added libfusn
* fsntfsinfo:
  - added info handle

20111125
* code clean up
* added support for empty volume name

20111124
* removed libvshadow
* updated configure.ac and m4 scripts
* added include/codepage.h
* updated common, array type
* updated libcstring, libsystem, libuna, libfdata, libfdatetime, libfguid,
  libfwnt
* added libfcache
* code clean up

20110510
* update libvshadow

20110509
* dist fixes

20110508
* updated configure.ac
* updated libcstring, libsystem, libuna, libbfio, libfdata, libfguid

20110309
* small changes

20110308
* small changes

20110306
* worked on support for MFT consisting of multiple data runs

20110305
* updated configure, common, array type, libcstring, liberror, libnotify,
  libsystem, libuna, libbfio, libfdata, libfdatetime, libfguid, libfwnt
* 2011 update

20101216
* updated Makefile

20101214
* updated configure/Makefile

20101209
* added missing MFT entry flags debug output
* code clean up
* added initial gettext support
* updated common, libfdatetime

20101203
* updated common, array type, liberror, libnotify, libsystem, libuna, libbfio,
  libfdata

20101129
* worked on txf data

20101128
* worked on txf data

20101127
* updated libfdatetime
* moved abort to IO handle
* worked on txf data

20101126
* worked on support for multiple index allocation attributes

20101125
* worked on support for multiple index allocation attributes
* updated libuna, libbfio, libfdata

20101124
* updated configure, libcstring, liberror, libbfio
* worked on support for an attribute list

20101113
* textual changes

20101112
* renamed library to libfsntfs

20101110
* worked on winsxs support

20101109
* worked on logged utility stream
* updated include/error.h
* updated libfdata, liberror, libbfio, libnotify, libsystem
* added support for directory index that only consists of index root attribute
* fixed bug in fsntinfo
* added support for directory index that has root and empty allocation index
  attributes

20100912
* worked on reading attribute list
* updated libbfio

20100911
* improved handling data runs

20100910
* worked on reading directory entries

20100909
* worked on reading directory entries

20100908
* worked on file entry functions
* worked on reading directory entries
* added debug print of file name attribute namespace description

20100907
* worked on reading directory entries

20100906
* worked on reading indexes

20100905
* worked on reading indexes
* worked on data runs

20100904
* worked on attributes
* worked on reading indexes
* worked on fixup values

20100903
* worked on mft attribute
* updated libbfio, libfdata
* worked on file entry API functions
* added libfguid for $OBJECT_ID attribute
* worked on attributes

20100828
* worked on reading a MFT entry and attributes

20100827
* worked on reading a MFT entry and attributes
* added debug print of file attribute flag description
* added debug print of mft attribute type description

20100826
* worked on reading a MFT entry and attributes

20100825
* initial version

