To do/think about:
* ewf_header_compress: is there a better way to determine the size of the uncompressed buffer
* header2: enhance UTF16 conversion code
* header2: enhance utf conversion routine
* all: add LVF support - ltree section
* all: make a more generic libewf_string (use this in libewf_header_values, ewf_header, ewf_ltree) also move ASCII and UTF
* all: make string functions safe to be char or uint8_t
* all: check for race conditions especially on change of data elements
* all: recovering corrupt EWF files (missing segment file, corrupt sections, etc.)
  - can the values in data be used to correct a corrupted volume ?
* all: redesign handle, refactor certain aspects to sub structs like chunk_cache
* all: more integration with autoconf/automake config.h
* all: add getoptlong
* read: always compare a data section with the volume/disk section for EWF-E01 - TODO add more values
* read: build in additional constraints
* read: correct for errors in the table or table2 section for EWF-E01
* read: warn when maximum offsets in table of S01 format is exceeded
* read: add check for next and done segment
  - realy the last segment in the file
  - offset pointing at them selves
  - correct size
* read: reduce multiple successive crc error entries to a single
* write: reduce multiple successive error2 entries to a single
* write: add additional data to file for different EWF formats
* write: redesign write and parameter functions to fallback to a default
* ewfacquire: make size input and output human friendly (support kM notation etc)
* ewfacquire: ask for media type
* ewfacquire: add time estimate
* ewfacquire: restrict error granularity and amount per sectors to encase5 format ?
* ewfacquire: warn if values exceed maximum segment count
* ewfinfo: add date format in ewfinfo to month in text - no interpretation differences possible
* ewfdebug: create a tool to analyse a single segment file
* ewfrecover: create a tool recover ewf files
* all: make a generic set function for byte swap

Further analysis of the EWF format:
* media type
* password hash
* 16 bytes in hash section (EWF-E01)
* values in EnCase5 header2 and ltree strings (EWF-L01 LVF)

Possible performance improvements:
* create a offset table per segment file - create it on demand - section list per segment table is done
* build offset table while reading ?

Next release:
* functionality test
* platform test
* byte swap test
* raw image test also > 4 Gb image

  - check all realloc and set values calls at the upper levels that memory is freed
    perhaps from surrounding code i.e. for the handle
  - recheck all realloc - do not overwrite in struct allocation pointers until sure
    memory is successfully reallocated
    grep [-][\>].\*realloc\( *
  - do the same check for wipe/memset functions
    grep [-][\>].\*memcpy\( *
    grep [-][\>].\*wipe\( *
    grep [-][\>].\*memset\( *
  - check for possible pointer loss
    grep [-][\>].\*=.\*set.\*\(  *

* note: realloc functions do not free the originally allocated memory on error
* note: beware of memset returning passed pointer when using + offset
* note: locate config.h at the external functions i.e. before including read etc.
* note: mtrace(), muntrace()
* note: atexit()
* note: what about __THROW ?
* note: strerror()

Known issues:
* error acquiring USB floppy with bad blocks under FreeBSD - no problem with internal floppy drive
  virtualisation could be part of the problem

Version: 20061008
* Changed program banner and version information

Version: 20061007
* Fix for missing header definitions for OpenBSD
* Fix for missing INTx_MAX definitions for OpenBSD
* Fix for compilation warnings for SunOS - moved libewf_common.h to be first include
* Bug in reallocating chunk cache - initial reallocation was removed by rewrite
* change chunk cache allocated_size to 32 bit value - also chunk size in read function

Version: 20061004
* Tested ewfacquire with disk with 0 sector error - success
* Bug in MacOS-X reading a floppy with bad block - read with -1 could alter current file offset (determined by lseek)
  Added lseek check to check and correct for offset drift

Version: 20061003
* fixed one-too-many read error retry
* fixed bug not correcting bytes_to_read in read error handling - this surfaced on MacOS-X (Linux read behavior is different)
* ewfacquire: minor adjustment in output - removed dot

Version: 20061002
* fixed error in libewf_section.h - this surfaced on MacOS X

Version: 20061001
* disabled lvf support
* fixed error in read error handling in write functionality - this surfaced under FreeBSD

Version: 20060929
* did some refactoring of write function

Version: 20060928
* did some refactoring of write function
* ewfacquire: print md5 hash when completed - added
  removed index build check from libewf_data_md5hash function - this function checks if hash is set ananyway

Version: 20060927
* minor adjustment to verbose logging configure options - fixed error with variable names containing '-'
* all: human readable size add .0 for single digit values - implemented
* fixed bug with missing config.h for sleuthkit integration
* fixed some formatting issues
* did some refactoring of write function
* defaulted handle values to unknowns
* added function to determine header length instead of strlen - this is more appropiate

Version: 20060926
* minor adjustment to verbose logging configure options
* added program version to output
* did some refactoring of write function - added more checks for write_count returns
* write: warn before hand if segment file amount exceeds limit - implemented
* all: human readable size add .[1-9] for single digit values - implemented

Version: 20060922
* worked on ltree
* fixed error in verbose output CRC value libewf_read_random - checked if bug resides in other CRC output - could not find any
* changed values in volume definition

Version: 20060916
* worked on code clean up and improved error handling
* ewf_verify now generates CRC error list for sectors (also for compressed chunks)
* verbose and debug prints are now optional (defaults are off)

Version: 20060912
* worked on code clean up and improved error handling
* worked on skip beyond media size in write

Version: 20060911
* worked on code clean up and improved error handling
* changed hardcoded max values to predifined macros

Version: 20060910
* worked on code clean up and improved error handling
* renamed file_read and file_write to read and write
* ewfaquire: add offset and size question
* write: add offset and size support in write function
* added lseek to common, removed off_t from code
* ewfacquire: added nice byte print for status
* ewfexport: added nice byte print for status

Version: 20060908
* worked on code clean up and improved error handling
* worked on ltree implementation
* added simple byte order detection to UTF16 to ASCII conversion
* added offset and size question to ewfexport
* added size and offset to read to and write from file descriptor functions
* read: look at libewf_section_volume_read: volume chunk count is 0 - compensating
  - check removed no longer required due to LVF support

Version: 20060906
* worked on code clean up and improved error handling
* ewf tooling returns the error status no exit
* worked on improving automated test scripts
* corrected user input inconsistency in ewfacquire
* fixed free bug with zlib_crc and calculated_crc in write
* fixed pointer bug with zlib_crc in write

Version: 20060905
* worked on code clean up and improved error handling
* added large file support to configure.in for converting raw images > 4 Gb to EWF files
* ewfacquire added total acquire time and bytes/second

Version: 20060904
* worked on code clean up and improved error handling
* fixed bug regarding setting chunk size in handle from volume - this got somehow removed due to clean up
* ewfacquire: add start and finish time

Version: 20060903
* worked on code clean up and improved error handling
* moved section reading and writing code to libewf_section
* fixed bug in libewf_read_random when offset is too large
* wraped basic library calls in preperation of thread safety of library calls
* added prefix to functions in libewf_common with common_
* enhanced error handling - no program exit but a nice return
* using typedefs instead of defines
* due to 20060505 fix, gave all value definitions a default value
* removed a large amount of unrequired includes

Version: 20060902
* worked on code clean up and improved error handling
* libewf_handle_cache_realloc removed from read volume section function
* endian functions are prepended with libewf_endian_
* the secondairy offset table in handle for S01 format will no longer be allocated for read
* started on error tollerance levels for recovery
* moved file descriptor check in last_offset calculation to do one check per section list
  - section list was altered to be used for a single segment file only - reduces memory requirements

Version: 20060831
* worked on code clean up and improved error handling
* created seperate structure for chunk cache

Version: 20060830
* worked on code clean up and improved error handling
* allow to set clean value in libewf_(re)alloc_cleared functions

Version: 20060829
* worked on code clean up and improved error handling
* worked on libewf_string - moved split code to it

Version: 20060828
* worked on code clean up and improved error handling
* introduced and fixed new bug - reminder do not free result from localtime()

Version: 20060826
* worked on code clean up and improved error handling
* fixed realloc calculation bug in file_read
* moved definitions from .h files
* changed headers in all files

Version: 20060824
* worked on code clean up and improved error handling
* move crc check from file_read into different EWF read methods?
  no embedding this check in the segment types makes it more difficult
  to generate an CRC error list for ewfinfo

Version: 20060823
* no need for fatal warnings if code becomes re-entrant after error
* added a wrapper of basic library calls
* worked on code clean up and improved error handling
* renamed notify.* to libewf_notify.* prevents name clashes
* ewf_crc function now use a dynamic allocated CRC - this helps with error propagation
* added big endian support to ascii to utf16 routine

Version: 20060822
* added byte swap (equivalent of dd conv=swab) functionality in both read and write
* changed sys/types.h to inttypes.h
  all: check if sys/types definitions still needed in ewf_*.h files ? - not under linux will do a cross platform test anyway
* started with implementing improved error handling and re-entry after error,
  combined with code clean up, better error control, revision of header to allow for one place to maintain acknowledgements

Version: 20060821
* read: added basic support for L01 files, which are basically EWF files
* renamed ewf_file_signature to evf_file_signature - closer to the truth
* ewfacquire: compensate for maximum S01 file size in ewf file size question - determine maximum
  - not relevant because there is a maximum of chunks within the file but the other data could grow to the 2 Gb

Version: 20060820
* ewfacquire: small change to confirmation

Version: 20060819
* lifted the 255 segment file limit on write, however it uses an (horrible) increment based naming scheme much like EnCase
  write: allow more than 255 segment files - completed
* write: worked on SMART (EWF-S01) support
* write: SMART (EWF-S01) - build in support for table2
* all: add SMART support - complete
* worked on - all: due to 20060505 fix give all value definitions a default value - looks nicer
* due to changes to the read and write logic the library was retested
* read: error in percentage in libewf_read_random - works on FC5
* table size limitation does not seem present in EWF-E01 only in EWF-S01
* use autoconf/automake cross compilation parameters for platform determination - completed

Version: 20060818
* read: worked on SMART (EWF-S01) support
* alternative read method was removed, the assumption it was based on is no longer valid
  read: remove alternative read method the assumption behind is fails for the SMART format - completed
* renamed alternative write method to wipe block on read error
  write: rename the alternative write method to wipe_block_on_error (or something) - completed
* read random: chunk based size check now is a buffer based size check
* removed handle->chunk_crc no longer needed
* for the EWF-S01 format the entries in table2 are appended to the offset table - have yet to test a file with a table2 section
* write: worked on SMART (EWF-S01) support

Version: 20060817
* read: worked on SMART (EWF-S01) support

Version: 20060816
* ewfacquire: add overview to confirm user input, otherwise restart input query - completed
* ewfacquire: make encase5 file option default - completed
* fixed incorrect order for values in header2 on write - also in documentation

Version: 20060812
* made the amount of read error retries flexible and user adjustable through ewfacquire
* new file size algorithm to fill up closer to max file size when compressing
  (write: change algorithm to fill files upto file size - completed)
* correction of "int result" in file_write to be C89 code compliant
* added empty block compression
  (write: always compress empty chunks - completed as an option)

Version: 20060809
* fixed size bug for large images on Cygwin - fix of 20060610 not sufficient for Cygwin
* fixed invalid value in printf volume read verbose messages
* added autoconf/automake structure

Version: 20060708
* renamed endian.h to libewf_endian.h for compatibility issues

Version: 20060617
* put conditions around debug code in eqfacquire

Version: 20060611
* fixed - one off bug in header value end of string

Version: 20060610
* ewfacquire test on multiple platforms
* added support for SMART format volume section - equals the original EWF volume section definition
* fixed - type casting error in data size
* fixed - missing header for encase1 format in write
* fixed - bug in writing encase4 and encase5 header2 in write - error in ascii to utf16 routine
* fixed - bug in writing encase4 and enacse5 header in write - logical formatting error
* write: timestamp is now generated only once
* write: fixed incorrect free in header values
* write: fixed memory corruption bug in ewfacquire - required explicit zero of string

Version: 20060605
* fix of data corruption bug - one off
* ewfacquire: sanitize input provided by user
* ewfinfo/eqwfacquire ? 1970 date when no case data is provided - bug in split function regarding first empty value
* removed file cache - no longer required

Version: 20060527
* started analysis of a data corruption bug

Version: 20060526
* fixed write bug when read is successful after error with small error granualirity
* fixed write bug with error granularity 1
* ewfacquire: add chunk size input possibility
* ewfacquire: add error granularity size input possibility
* ewfacquire: memory corruption bug in user input - repaced some code - looks OK now - but hard to reproduce
* fixed write bug with block size 128 error granularity 16 in test
* write: improve reading of bad sectors and writing a error2 section to file for encase5 file option

Version: 20060520
* fixed media size bug - old method of calculation was still in there :-(
* worked on ewfacquire read on error
* added alternative write method to test acquired images against existing tooling
* ewfaquire: able to produce exact media data as linen
* write: what if read error is in last chunk and it is smaller than chunk size !?

Version: 20060517
* removed duplicate include from notify.c

Version: 20060516
* added media size to ewfinfo
* worked on ewfacquire read on error

Version: 20060513
* minor adjustment in libewf.h - ewf_close renamed to libewf_close

Version: 20060505
* Fix for older compilers like gcc 2.95 - rewrite to older C statements

Version: 20060424
* added warning macro to allow overriding some fatal errors
* allow overriding invalid CRC's
* refactored crc check in ewf_section to file_read - for scope of handle and uniformity within the code
* further analysis of unknown values in hash section - also found difference in signature value Encase4 and Encase5

Version: 20060423
* Fix for Solaris in definitions.h

Version: 20060422
* Fixed missing PRI definitions on OpenBSD - now defines in definitions.h
* changed sprintf to snprintf
* added device size determination for OpenBSD
* fixed bug in header values parsing for empty first value empty
* added compression level definition
* ewfinfo: add compression media information in ewfinfo - Encase5 format only
* write: moved compression type functionality from ewfacquire into library

Version: 20060419
* Adjusted write method - to fix filesize problem
* Correction of verbose print of last chunk number
* the write function works only when a data section is at the start of the file - why ? not a bug in write
  but in read the first offset in the segment table was filled with 0 instead of 13 which is the size
  of the file header

Version: 20060418
* Tested on FreeBSD 6.0 needed to add include header in ewf_sectors.h
* Adjusted Make to be more generic and to work on FreeBSD 6.0

Version: 20060415
* changed u_int to uint
* removed LIBEWF_ types
* zlib uses a long which varies per 32 and 64 bit architecture using an intermediate variable
  fixes not able to read compressed images on a x86_64 architecure
* Memory corruption bug in segment table filename fixed

Version: 20060414
* Fixed previous offset size
* removed memcpy assignments
* type fixed malloc assignments
* removed (void *) from memset
* reduced the amount of int definions
* changed printf formaters
* added status indication to ewfexport using callback function in read_from_file_descriptor
* added quiet option to ewfexport and ewfacquire
* removed dependency on libiconv - created a naive utf16 to ascii conversion
* moved header string generation code to header_values
* added time string generation code to header_values
* added acquire options for compression and file type to ewfacquire
* code now partially fixed for x86_64 systems fixed malloc statement, printf sizes, and some type definitions
* additional changes to memcpy statements made
* Use header_values for write
* ewfacquire fix error print on correct fixed value
* ewfacquire fix for empty input values
* ewfacquire fix strange image file rights
* ewfacquire fix image filename weird characters - one byte off allocation problem in ewfacquire
* ewfacquire allow for a default value - for fixed values
* ewfacquire can now acquire devices on works on Mac OS-X/Darwin
* fix write crc error in chunk on mac os x
* ewfacquire add EWF file size input possibility - check upper bound 2Gb, lower bound 1440k
* fix write bug with small file size 1440k - for floppy image - this has to do if
  both the filesize and the ewf size are the same - write will adjust with one additional
  segment file

Version: 20060413
* Used LIBEWF_VERSION in executables
* Added file signature function to library for integration in The SleuthKit
* Added md5.h for allowing to do with different MD5 calculation code bases
  like the one integrated in the The SleuthKit

Version: 20060412
* Created separate file for header value logic - moved code from ewfinfo

Version: 20060411
Nearing release version, so started logging changes
* Removed memory leak with duplicate header assignment to handle
* Renamed ewfmd5sum to ewfverify - still have to enhance functionality
* Renamed ewfcat to ewfexport - still have to enhance functionality
* Added time parsing functionality to ewfinfo - date format is currently
  fixed in MM/DD/YYYY
* Enhanced password and compression header value output in ewfinfo

