ntfs-3g/ChangeLog

826 lines
44 KiB
Plaintext

xx/xx/2005 - 2.0.0-WIP
- Add start_vcn parameter to ntfs_get_size_for_mapping_pairs() and
ntfs_mapping_pairs_build() and adapt all callers.
- Bump library version due to source level API change above.
- Add ntfs_debug() and ntfs_error() to make kernel<->userspace porting
easier.
- ntfsinfo: Added dumping of index records from $INDEX_ROOT and
$INDEX_ALLOCATION. (Yura)
- ntfsinfo: Changed message for resident $INDEX_ALLOCATION to print
error, because $INDEX_ALLOCATION can't be resident. (Yura)
- ntfscp: Not longer update $FILE_NAME attributes, because Windows
doesn't update them unless a rename operation occur. (Yura)
- ntfsinfo: dump attribute list entries in verbose mode and display
attribute instance of all attributes. (Yura)
- new API: attrlist.[ch]::ntfs_attrlist_entry_add add entry to
attribute list. (Yura)
- ntfs_inode_sync: write out dirty attribute list from cache to
disk. (Yura)
- Add stop_vcn parameter to ntfs_mapping_pairs_build() and adapt
all callers. This allows filling an attribute extent with mapping
pairs and then continuing in a different extent once the first extent
is full. (Yura)
- Remove vol->nr_mft_records and update all users. (Anton)
- Add new API to mft.[hc]::ntfs_mft_record_{alloc,free}(). (Anton)
- Sync inodes before closing attributes or the umount fails. (Anton)
- Close extent inodes in ntfs_inode_close() when closing a base inode
and fix handling of ->extent_nis for base inodes. (Anton)
- Add ntfsmftalloc utility to the extra utilities to help test the mft
record allocator. (Anton)
- Fix ntfs_attr_record_resize() to cope with a newsize < 8. This means
you can call ntfs_attr_record_resize() with newsize = 0 to delete an
attribute record from its mft record but you would still need to
update the attribute list attribute if present. (Anton)
- Add the useful offsetof() macro to ntfs/support.h which returns the
offset of a structure element. (Anton)
- New API: attrib.[ch]::ntfs_make_room_for_attr (it is ported from
mkntfs). (Yura)
- New API: attrib.[ch]::ntfs_non_resident_attr_record_add() and
attrib.[ch]::ntfs_attr_record_rm(). This is low-level functions to
manipulate attribute extents. (Yura)
- Improvement to ntfs_non_resident_attr_expand: now it can expand multi
extent attributes and allocate new MFT records if mapping mapirs
doesn't fit current. (Yura)
- Implement attrlist.[ch]::ntfs_attrlist_entry_rm(). (Yura)
- Attribute handling functions always update highest_vcn, if it was
modified. (Yura)
- Add new API unistr.[hc]::ntfs_ucsndup(). (Anton)
- Make libntfs/attrib.c::ntfs_attr_open() make a copy of the attribute
name unless it is one of the internal names. (Anton)
- New API: attrib.[ch]::ntfs_resident_attr_record_add. (Yura)
- New API: inode.[ch]::ntfs_inode_add_attrlist. (Yura)
- New API: attrlist.[ch]::ntfs_attrlist_need. (Yura)
- ntfsclone: save by using our, not NTFS cluster allocation bitmap.
This gives more control in the future what to save. (Szaka)
- New helper: attrlist.h::ntfs_attrlist_mark_dirty. (Yura)
- New API: attrib.[ch]::ntfs_attr_update_mapping_pairs and made
ntfs_non_resident_attr_{shrink,expand} use it, thus attribute resize
functions is almost completed, but still very experemental and maybe
dangerous. (Yura)
- Fix stupid bug in ntfs_attr_reinit_search_ctx() introduced during
changes to ntfs_external_attr_find(). This is because
ntfs_attr_lookup() intentionally does not clear ctx->al_entry but
does clear ctx->base_ntfs_ino which in turn means that
ntfs_attr_reinit_search_ctx() does not clear ctx->al_entry. Now,
ntfs_attr_reinit_search_ctx() always clears ctx->al_entry.
- Rename scpu_to_le{16,32,64}() to cpu_to_sle{16,32,64}() to match the
kernel.
- ntfsclone: honor bad clusters list ($BadClus:$Bad), known bad sectors
aren't tried to be saved anymore. (Szaka)
- Add new API attrib.[ch]::ntfs_attr_record_move_to and make
ntfs_resident_attr_resize use it. (Yura)
- Improve ntfs_resident_attr_resize to try make attributes non-resident
when such convert is reasonable. (Yura)
- New API attrib.[ch]::ntfs_attr_record_move_away(). (Yura)
- New API inode.[ch]::ntfs_inode_attach_all_extents . (Yura)
- New API inode.[ch]::ntfs_inode_free_space. (Yura)
- Improved layout.h::ATTR_RECORD to have {non_,}resident_end and
compressed_end fields. Use offsetof(ATTR_RECORD, *_end) to get size
of accordable attribute. (Yura)
- Make ntfs_attr_update_mapping_pairs and ntfs_inode_add_attrlist use
ntfs_inode_free_space when there is no enough space for attribute
list. (Yura)
- Remove inode.h::NIno{Clear,Set,}AttrListNonResident and attr_list_rl
field from inode.h::_ntfs_inode struct. Adapt all users. (Yura)
- Add --attibute, --attr-name and --inode options to ntfscp. (Yura)
- ntfscp is moved from extra to standard program set. (Yura)
- Add new high level API inode.[ch]::ntfs_inode_add_attr and make ntfscp
use it when requested attribute isn't exist. (Yura)
- Add new high level API inode.[ch]::ntfs_inode_rm_attr. (Yura)
- Extend ntfs_attr_pwrite to cope with extending the attribute size
and with instantiating holes. (Yura)
- Add new API's ntfs_rl_sparse and ntfs_rl_get_copmressed_size. (Yura)
- ntfsinfo: Dump flags names for $STANDARD_INFORMATION and $FILE_NAME
attributes. (Yura)
- Move NAttr{Sparse,Compressed,Encrypted} to inode struct preserving
the previous interface. (Yura, with fixes from Anton)
- Rename/move inode.[hc]::ntfs_inode_{add,rm}_attr() to
attrib.[hc]::ntfs_attr_{add,rm}(), respectively. (Anton)
- Update sparse/compressed/encrypted bits in STANDARD_INFORMATION
during inode sync. (Yura)
- Rename NTFS_SECTOR_SIZE to NTFS_BLOCK_SIZE to keep in sync with
kernel driver. (Yura)
- Port logfile checking routines from the kernel to the library and
integrate them with mount process. (Yura)
- ntfscp: Added SIGINT (Ctrl+C) handler, improved error handling in
sync failed case. (Yura)
- Fix a nasty runlist merge bug when merging two holes. (Anton)
- ntfsfix: empty journal and mark volume dirty for chkdsk if ntfs_mount
failed. This makes read-write mounting of NTFS metadata images
possible by ntfsprogs and the kernel driver what were created by
versions of ntfsclone previous than 2.0.0. (Szaka)
- ntfsclone: added a new option, --ignore-fs-check. It can be used
only with the --metadata option. The clusters causing the
inconsistency are saved too. (Szaka)
- ntfsclone: added a new option, --rescue. It ignores read errors so
disks having bad sectors (dying disks) can be rescued efficiently,
with minimal stress on them. (Szaka)
- ntfsfix: fix invalid mft records in $MFTMirr. (Szaka)
- Added a trigger script to the BK repository that will send an email
to linux-ntfs-cvs@lists.sourceforge.net mailing list when someone
pushes successfully to the ntfsprogs repository on bkbits.net. This
is done on the server side and is thus independent of whether the
client doing the push has got a correct email setup. (Yura, Anton)
- ntfsclone: make --metadata work with the new $Logfile checking code.
Save at least the first 16 KiB of $Logfile (the two RSTR records
should always be included if present). Save also records used for
checking empty $Logfile. (Szaka)
- ntfscp: add ability to specify directory as destination file. (Yura)
- ntfsresize: fix segfault during filesystem check if NTFS was corrupted
in a way that clusters were referenced outside of the volume. (Szaka)
- Major rewrite of libntfs/win32_io.c and in particular seek, read, and
write related code. As part of this perform run-time detection of
presence of SetFilePointerEx() and if not present emulate it.
- ntfsclone: --rescue works at the lowest, sector and not cluster level
thus more data can be rescued. The contents of the unreadable sectors
are filled by character '?' and the beginning of such sectors are
marked by "BadSectoR\0". (Krishna Mohan Gundu, Szaka)
- ntfsclone: fixed an off-by-one error during --metadata in function
wipe_data(). (Szaka)
- Detect and refuse to mount hibernated Windows during ntfs_mount() if
the volume is tried to be opened read-write. (Szaka)
- Move back from BitKeeper to CVS on SF.net and fix executable
permissions that got lost during the move. (Anton)
- ntfsresize: fix segfault during filesystem check if NTFS $Bitmap file
size was larger than it should have been. (Szaka)
- mkntfs: Don't mark NTFS dirty if the backup boot sector could be
successfully created. (Szaka)
- mkntfs: Add new option -T which fakes the time to be 00:00:00 UTC,
Jan 1, 1970 instead of the current system time.
- Port collate.[ch] from kernel to library and implement
ntfs_collate_file_name. Thus we have new API's: ntfs_collate and
ntfs_is_collation_rule_supported. (Yura)
- Port index.[ch] from kernel to library. New API's: ntfs_index_lookup,
ntfs_index_ctx_{get,put}, ntfs_index_entry_mark_dirty. (Yura)
- Implement FILE_NAME attributes update in index during inode sync and
enable code that set/clean sparse bit. Also add new inode state bit
FileNameDirty to indicate that FILE_NAME attributes need update.
At least after attribute resize we leave absolutely consist
volume. (Yura)
04/09/2004 - 1.9.4 - Urgent bug fixes.
- Rewrite win32_io.c to allow device level write support. (Yuval)
- Make ntfscp update file size in $FILE_NAME(0x30) attribute. (Yura)
- Fix ntfsclone crash when --restore-image was used for block device
outputs. (Masaru Kawashima, Szaka)
03/09/2004 - 1.9.3 - Lots of fixes and enhancements all over the place.
- Fix access of MFT_RECORD->bytes_in_use to use le32_to_cpu() instead
of le16_to_cpu() in libntfs/volume.c. (Pete Curran)
- Rename uchar_t to ntfschar everywhere since uchar_t is already
defined on Solaris to be an unsigned 1-byte character and it is also
defined like this in POSIX.
- Do not use the ++ operator on a variable when it is being passed as a
parameter to a macro in libntfs/unistr.c. (Pete Curran)
- Fix out of source tree build of utilities by changing $top_srcdir to
$top_builddir in the references to the build library in the makefile
template ntfsprogs/Makefile.am. (Yuval)
- Dump general info about an inode in ntfsinfo. (Yuval)
- Add detection for <sys/byteorder.h> and make endianness detection
work on Solaris 2.6 (Yuval) and Solaris 9 (Anton).
- Emulate bswap_{16,32,64}() if not available/we cannot find them.
This has the advantage that the problems on FreeBSD running on big
endian, 64-bit machine will just disappear as we will emulate the
calls even though they exist with a different name (bswap16(), etc
instead of bswap_16(), etc). (Anton)
- Undelete: add ability to recover ranges of inodes. (Holger Ohmacht)
- Lots of updates to ntfsinfo, see "bk changes". (Yuval)
- Fix crash in ntfsinfo for non-resident Security Info. (Yura)
- ntfswipe - wipe file tails and directory indexes (Yura)
- Bugfix in ntfs_rl_pread,pwrite for pos > 0. (Yura)
- Added special image format support in ntfsclone. (Per Olofsson)
- Major win32_io.c update implementing ->ioctl, ->sync, ->stat, and
->write. NOTE: This might break djgpp compatibility. (Yuval)
- Added truncate option to ntfsundelete. (mabs)
- Bugfix in ntfs_attr_size_bounds_check that caused it always fail,
if no maximum limit for attribute size. (Yura)
- Add new function attrib.c::ntfs_non_resident_attr_expand,
thus we can expand non resident attributes. (Yura)
- Add a @start_vcn parameter to
lcnalloc.[ch]::ntfs_cluster_alloc. (Yura)
- Add ntfscp utility, at present it can only overwrite files. It can
increment/decrease file size if $ATTRIBUTE_LIST not present. (Yura)
- Added new API lcnalloc.[ch]::ntfs_cluster_free_from_rl, and made
ntfs_cluster_alloc use it. (Yura)
- Bugfix in ntfs_cluster_alloc for count = 0. (Yura)
- Bugfix in ntfs_attr_map{_whole_,_}runlist: make it not fail if runlist
already mapped. (Yura)
- ntfsls: Add a -R recursive option. (Giang, Carmelo)
- Make ntfslabel pay attention to --no-action. (Yuval)
- Several bugfixes in ntfs_cluster_alloc. (Anton)
- Make all of libntfs only output anything if configured with
--enable-debug. The only exception is ntfs_boot_sector_is_ntfs()
which now uses a new function Sprintf(), provided by debug.h which
can be #ifdef-ed out if people want it to be truly silent. (Anton)
- Fix memory leaks in libntfs/attrib.c, ntfsprogs/mkntfs.c and
ntfsprogs/ntfsundelete.c. (Christophe)
- Change libntfs/attrib.c::ntfs_attr_make_non_resident() to only
allocate clusters and attempt to write out data if the attribute size
is not zero. (Anton)
- Fix libntfs/attrib.c::ntfs_non_resident_attr_expand() to use
libntfs/attrib.c::ntfs_attr_map_whole_runlist() instead of
libntfs/attrib.c::ntfs_attr_map_runlist(). (Anton)
- Change libntfs/runlist.c::ntfs_get_size_for_mapping_pairs() and
libntfs/runlist.c::ntfs_mapping_pairs_build() to treat a NULL runlist
to mean empty runlist. (Anton)
- ntfsresize: some refactoring towards being able to reuse code (Szaka)
11/05/2004 - 1.9.2 - Decompression bug fixes, ntfsinfo enhancements, updates.
- Hopefully fix the autogen.sh problems using the --force and touch
config.h.in sledge hammers. (Anton)
- Fix the incorrect ntfsclone usage example in the man page. (Szaka)
- Fix compiler warnings in win32_io.c. (Yuval)
- Move constant bswap macros out of the ifdefs in endians.h so they are
always available. (Yuval)
- Add conditional include of sys/param.h in endians.h which provides
endianness support on Cygwin. (Yuval)
- ntfsclone --metadata also saves at least the first 8 KiB of the
$LogFile. (Szaka)
- Fix incorrect getopt_long() usage: converted argv[optind-1] to optarg
so utilities won't do bogus and unexpected things. (Szaka)
- Add new API security.[hc]::ntfs_sid_is_valid(), ntfs_sid_to_mbs(),
and ntfs_sid_to_mbs_size(). (Anton)
- Big enhancement of ntfsinfo. (Yuval, Anton)
- Split mkntfs into multiple functions. (Yuval)
- Compiler warning fixes in utilities related to GEN_PRINTF() and other
things, e.g. printf() and static related. (Yuval)
- Make ntfsclone and ntfsresize endiansafe. (Anton)
- Remove global variable rl from mkntfs as it was used only in one
place. (Yuval, Anton)
- Work around mbstowcs() bug in DJGPP and update workaround for bug in
mbsrtowcs() on Cygwin. (Lode, Christophe, Anton)
- Add SetFilePointerEx() emulation to win32_io.c. (Lode)
- Add inode selection by path/filename to ntfsinfo. (Yuval)
- Fix a bug where we would not always detect that we have reached the
end of a compression block because we were ending at minus one byte
which is effectively the same as being at the end. The fix is to
check whether the uncompressed buffer has been fully filled and if so
we assume we have reached the end of the compression block. A big
thank you to Marcin Gibuła for the bug report, the assistance in
tracking down the bug and testing the fix. (Anton)
- Fix a bug where we forgot to reset the data_size and initialized_size
in two error code paths in ntfs_compressed_attr_pread(). (Anton)
- Fix a bug where an uncompressed block could be misdetected as a
compressed one if it was made up of multiple runs. (Anton)
05/04/2004 - 1.9.1 - Make mkntfs create bootable volumes and fixes/updates.
- Update with SuSE 9.1 beta 1 versions of GNU build system.
- Fix warnings on powerpc architecture where it would seem char is
unsigned so comparisons with -1 cause a warning that comparison is
always true/wrong. (Thanks to Ender for reporting.)
- Modify meaning of ntfs_volume->nr_mft_records to be the number of
initialized mft records, not total mft records. This makes far more
sense and in fact reflects how nr_mft_records is being used in both
libntfs and the utilities.
- Add new API bitmap.h::ntfs_bitmap_{set,clear}_bit().
- Fix layout.h STANDARD_INFORMATION and FILE_ATTR_FLAGS typedefs by
adding the packed attribute where it was missing causing havoc due
to 64 bit alignment. (Yuval Fledel)
- Fix validation of STANDARD_INFORMATION attribute size in ntfsinfo.c
and remove relevant FIXME comments. (Yuval Fledel)
- Add new API security.[hc]::ntfs_guid_is_zero() and ntfs_guid_to_mbs().
- Implement dumping of object id in ntfsinfo. (Yuval Fledel, me)
- Copy MFT_RECORD typedef to MFT_RECORD_OLD and modify MFT_RECORD to
contain the NTFS 3.1+ specific fields. Also, update mkntfs and
ntfsclone appropriately.
- Add new API mft.[hc]::ntfs_mft_record_{layout,format}() and make
mkntfs use it.
- Add new API device.[hc]::ntfs_device_partition_start_sector_get() and
make mkntfs use it.
- Provide a new command line option "-p" to mkntfs to allow the user to
specify the partition start sector manually.
- Fix mkntfs and ntfsclone to include sys/ioctl.h.
- Define the ioctls we use in ntfsclone if they are not defined, as it
is done in device.c.
- Do not specify maintainer mode or enable compiler warnings in
autogen.sh.
- Create new config option --enable-warnings and make that enable all
the compiler warnings (this used to be done in maintainer mode).
- Remove AM_MAINTAINER_MODE from configure.ac.
- Support the case where $Volume does not have a $VOLUME_NAME
attribute in ntfs_device_mount() and let ntfslabel create the
attribute when it is not present.
- Remove the FIXME in ntfs_attr_lookup() and complete the
implementation of ntfs_external_attr_find() so it now returns the
attribute list attribute position at which the attribute should be
inserted in @ctx->al_entry (see descritpion for ntfs_attr_lookup() in
attrib.c for details).
- Check the mount state of the output device in ntfsclone.
- Correct a too strong sanity check in ntfsclone that prevented
cloning from larger device to a smaller one but the NTFS image
could have fit fully.
- Added a few (hopefully) better explanatory messages to ntfsresize.
- Add new API device.[hc]::ntfs_device_heads_get() and make mkntfs use
it.
- Provide a new command line option "-H" to mkntfs to allow the user to
specify the number of heads manually.
- Add new API device.[hc]::ntfs_device_sectors_per_track_get() and make
mkntfs use it.
- Provide a new command line option "-S" to mkntfs to allow the user to
specify the number of sectors per track manually.
- Remove dumplog utility as it was unnecessary and duplicated the
functionality of ntfsdump_logfile.
- Cleanup ntfsdump_logfile utility to use more libntfs APIs and other
cleanups.
- Remove some compiler warnings that appeared with the latest gcc
update from SUSE 9.1 beta 3.
- Sanitize/update logfile.h somewhat and adapt ntfsdump_logfile.
- Move declaration of a variable in utils.c to beginning of block.
Thanks to Alexei Alexandrov for the bug report and patch.
- Add the ability to read the logfile from a supplied file using the
command line option -f to ntfsdump_logfile.
- Updated ntfsclone manual. (Szaka)
- Added some diagnostic and explanatory messages to ntfsclone. (Szaka)
- Mostly rewrite ntfsinfo. (Yuval Fledel and some fixes by me)
11/03/2004 - 1.9.0 - Added ntfsresize relocation support and a lot of cleanups.
- In include/ntfs/*.h Wrap all #include "config.h" by #ifdef
HAVE_CONFIG_H. (Suggested by Christophe.)
- Update doc/CodingStyle. (Suggested by Szaka.)
- Fix mkntfs for large volumes where the number of clusters would
exceed the maximum of 32 bits and mkntfs would segfault. Now we
increase the cluster size until the number of clusters no longer
exceeds 32 bits or the maximum cluster size is reached. We then
exit with an appropriate error message. (Thanks to Szaka for the
bug report.)
- Modify layout.h and logfile.h expanding/naming annonymous structs
and unions (much like I did earlier in the kernel driver) so that
the -fms-extensions switch is no longer required. Also, removed
the -fms-extensions switch and associated autodetection from
./configure.ac. (Yuval Fledel with small fixes from me)
- Update the build system: autogen.sh now uses autoreconf; run
autoupdate && autoreconf --force and fixup the fallout damage; rename
INCLUDES to AM_CPPFLAGS; add $srcdir to getgccver invocation.
- Rename private to priv_data in ntfs_device_alloc() to avoid name
space clashes with C++. (Yuval Fledel, modified fix by me)
- Rename 'opt' struct member stdout to std_out in ntfsclone.c because
stdout is a macro on Cygwin and compilation fails. (Yuval Fledel)
- Make ntfs_attrs_walk() use AT_UNUSED and CASE_SENSITIVE instead of
zero when calling ntfs_lookup() for type checking correctness. (Yuval
Fledel)
- In attribute lookup code in libntfs/attrib.c, check type against
AT_UNUSED and not zero.
- Add AC_CANONICAL_HOST([]) to configure.ac and before AC_PROG_CC add
manual provision of CC=gcc, AR=ar, and LD=ld if they are not set and
the target is *-*-*djgpp. (Requested by Christophe Grenier)
- Provide our own byteswap constant versions in endians.h so we avoid
the mess that some architectures define only some of them.
- Use head -n 1 instead of -1 in getgccver script. (From SUSE LINUX)
- Fix typo in ntfsinfo.c. (From SUSE LINUX)
- Make the device fd in unix_io.c be stored in malloc()ed space pointed
to by the d_private pointer instead of inside the d_private pointer
itself. Makes the warnings on 64 bit architectures go away.
- Fix all occurences of printf with %ll length modifiers but 64 bit
arguments to typecast the arguments to (unsigned) long long to avoid
the warnings when compiling on 64 bit architectures.
- Use AC_GNU_SOURCE in configure.ac instead of doing it manually.
- Fix lots of typos in the documentation. (David Martínez Moreno)
- Update config.sub and config.guess to latest ones. (David Martínez
Moreno)
- Change Linux-NTFS to ntfsprogs everywhere when talking about the
package rather than the project (especially man pages affected).
- Add relocation support to ntfsresize. Note, this modifies the
command line options a little as well as the returned output so
applications using ntfsresize might need modifications before they
will work with the updated ntfsresize. (Szaka)
27/02/2004 - 1.8.5 - Springclean of the build process, cleanups, bug fixes.
- Fixup ntfsinfo a little bit and give its manpage a small update to
reflect reality a little better.
- Fix BLKGETSIZE usage; parameter is unsigned long not long. (Szaka)
- Use BLKGETSIZE64 when available which allows use of devices bigger
than 2TiB.
- Enable GNU extensions if present. This means that you need to
include config.h before any other non-ntfs header files.
- Use AC_SYS_LARGEFILE in configure.ac instead of manually defining
_FILE_OFFSET_BITS=64 in CFLAGS. This means that you need to include
config.h before any other non-ntfs header files.
- Update all source to include config.h before any other non-ntfs
header files.
- Move include files from ntfsprogs/include to ntfsprogs/include/ntfs
and adapt build system. (Feature requested by Christophe Grenier.)
- Fix potential buffer overflow bug in ntfsprogs/mkntfs.c::stoucs().
Thanks to Andras Erdei.
- Small cleanup of ./configure.ac to show better formatted option help
text and other little bits.
- Add --disable-default-device-io-ops option to ./configure which makes
for a smaller libntfs but results in ntfs_mount() always returning
error with errno set to ENOTSUP. You need to use ntfs_device_mount()
instead. This only makes sense with "make libs" and when an
application linking statically against libntfs provides its own
device io operations. (Feature requested by Christophe Grenier.)
- Fix a duplicated free() in mkntfs. (Andras Erdei)
- Fix option display in mkntfs. (Andras Erdei)
23/01/2004 - 1.8.4 - Memory leak fixes.
- Fix memory leaks in libntfs/dir.c::ntfs_inode_lookup_by_name(),
libntfs/dir.c::ntfs_readdir() and libntfs/attrib.c::ntfs_attr_open().
Thanks to Christophe Grenier and valgrind for finding them.
19/01/2004 - 1.8.3 - Lots of small fixes.
- Update ntfsinfo (Matthew J. Fanto, me)
- Add new API attrib.[hc]:ntfs_compressed_attr_pread(). NOTE: You want
to use ntfs_attr_pread() instead which will transparently read the
compressed attribute and return the decompressed data.
- Improve mkntfs linux/major.h use so should work on newer glibc.
- Fix silly bug in ntfs_attr_size_bounds_check() where unbounded
attributes were handled completely wrong. (Thanks to Szaka for
spotting this.)
- Fix wrong print modified %L intead of %ll everywhere. (Szaka, me)
- More Cygwin fixes. (Lode Leroy)
- Switch build files to ones generated by current SuSE 9.0 (i.e. I ran
./autogen.sh on SuSE 9.0 as I will be using SuSE as my desktop from
now on).
07/01/2004 - 1.8.2 - Make ntfsprogs work on FreeBSD.
- Add compatibility for building on FreeBSD. (Christophe Grenier)
- Add new compile target "make libs" which only compiles libntfs.
- Compile fixes for DJGPP. (Chrisophe Grenier, me)
- Note: DJGPP only works with "make libs". not "make" due to absence
of getopt.h, getopt_long(), snprintf(), and snprintf(). getopt() does
exist (in unistd.h) so we could switch to that if we wanted.
- Enable lots of compiler warnings in maintainer mode and fix all
warnings from libntfs.
- Fix memory deallocation bug in mft.c spotted by the additional
warnings.
06/01/2004 - 1.8.1 - Important bug fix and various enhancements.
- Add new API function attrib.[hc]:ntfs_attr_map_whole_runlist().
- Add new API function runlist.[hc]:ntfs_rl_pread().
- Fix bug in run list encoding functions that hit sparse and compressed
files with holes. (Szabolcs Szakacsits)
- Add compatibility for building with DJGPP under DOS. (Christophe
Grenier, slightly modified by me)
19/11/2003 - 1.8.0 - Final fixes and tidy ups.
- Cleanup build system wrt CFLAGS handling placing it all in one place
in configure.ac and removing everything related from the Makefile.am
files.
- Fix all compiler warnings (Richard Russon, me)
- Make libntfs more portable by removing the dependency on
asm/byteorder.h and using <endian.h> and <byteswap.h> instead. Also
adapting our endians.h appropriately. (Richard Russon)
- Fix nasty buffer overflow bug in ntfs_get_attribute_value() which we
use to get the attribute list attribute. This is the same bug that
was biting us in the ntfs driver 2.1.4 and was fixed in 2.1.5.
Windows XP creates files where an attribute's data size is more than
one run list run shorter than the allocated size which causes us to
crash out as we assumed this would never happen.
- Various other small cleanups and fixes.
10/11/2003 - 1.8.0beta2 - More features!
- Merge ntfsprogs-gnomevfs written by Jan Kratochvil.
23/10/2003 - 1.8.0beta - The Long Overdue(TM) release.
- Further work on attribute resizing.
- Fix two logic inversion bugs in dir.c. Thanks to Russ Christensen for
finding the first one.
- Fix attempt to release I30 internal constant. (Russ Christensen)
- Fix off-by-one error in disk_io.c::ntfs_cluster_{read,write}(). (Ian
Jackson)
- Add -fms-extensions when compiling with gcc-3.2+.
- Update for newer autoconf/automake.
- Abstract low level device operations (include/device,h and
libntfs/device.c) and adapt utilities to changes.
- Added ntfsclone utility written by Szabolcs Szakacsits.
- Added ntfsls utility written by Lode Leroy.
- Fix bugs in dir.c::ntfs_readdir() where we try to close ia_na when
it is NULL.
- Return errno ENOTDIR from dir.c::ntfs_readdir() when called with a
file inode.
- Fix a silly bug in attrib.c::ntfs_external_attr_find() which caused
us to always return the same attribute during an enumeration as soon
as the end of the attributes to be enumerated was reached thus
causing the program doing the enumeration to hang in a tight loop.
NOTE: There is still work to do as ctx->al_entry is set to NULL
instead of to the position in the attribute list at which to insert.
- Added man pages for the new utilities (Richard Russon and me).
- Lots of extensions and cleanups to ntfsls.
- Move common bits from disk_io.c into device.c and rename the Unix io
specific code that remains to unix_io.c to complement win32_io.c.
- Integrate win32_io.c into the build process so win32_io ops are used
when compiling under Cygwin and standard Unix style io ops are used
otherwise.
- Add new utility ntfscat (Richard Russon) and a corresponding man page.
- Other assorted bugfixes and developments (see NEWS and bk changes).
13/02/2003 - 1.7.1 - Urgent bug fixes.
- Urgent bug fixes in ntfsresize (Szabolcs Szakacsits):
- compare_bitmaps(): fix another bug reporting the correct cluster
mismatch
- walk_inodes(): fix leaking ntfs_inode in certain cases
- delete redundant and unused MFT_RECORD *mrec from ntfs_resize_t
- Urgent bug fixes in libntfs (thanks to Szaka for bug reports):
- attrib.c::ntfs_external_attr_find(): broken error detection
- mft.c::ntfs_mft_records_write(): stupid buffer overflow bug (ouch!)
12/02/2003 - 1.7.0 - Small bug fixes and updates.
- Bug fixes in mapping pairs array generation in libntfs.
- Bug fixes and updates in ntfsresize. (Szabolcs Szakacsits)
- Tidyups and standardisations. (Richard Russon)
18/01/2003 - 1.7.0beta - Library rewrite and many new tools.
- Highlights of this release are the now hopefully stable API sported
by an almost completely rewritten library and the new utilities;
ntfsresize, ntfsundelete, and ntfslabel.
Note this is a beta release so it may not be free of bugs.
- New tool ntfslabel written by Matthew Fanto with a few cleanups from
me to make it fit in with e2label better.
- Add man page for ntfslabel.
- New tool, ntfsundelete, written by Richard Russon.
- New tool, ntfsresize, written by Szakacsits Szabolcs.
- Extend ntfs_mount() to also read in the volume label.
- Silence verbosity of output from ntfs_mount(). It is now only output
if ./configure was run with --enable-debug.
- Remove a LOT of dead code. Massive cleanup.
- Add full attribute search context and allocation/init/deallocation
functions (see attrib.c).
- Remove find_first_attr(). Just use ntfs_attr_get_search_ctx() +
ntfs_attr_find() which has the same effect.
- Rewrite disk_io.[ch] and mft.[ch] defining new access API:
disk_io.[ch] provide: ntfs_p{read,write}(),
ntfs_mst_p{read,write}(), and
ntfs_cluster_{read,write}().
mft.[ch] provide: ntfs_mft_record_{read,write}(),
ntfs_mft_records_{read,write}(), and
ntfs_mft_record_get_data_size().
- When writing mft records using the mft.c::ntfs_mft_record{s,}_write()
interface, the mft mirror is now updated automatically.
- Add -Wall to compiler options.
- Fix minor error code path bugs in mkntfs.c that showed up with -Wall.
- Fix all compiler warnings that showed up with -Wall.
- Add new API function, provided by mft.[ch]: ntfs_file_record_read().
- Add new API calls provided by unistr.[ch]:
ntfs_ucstombs() and ntfs_mbstoucs().
- Define API for mst.[ch] providing:
ntfs_mst_post_read_fixup(),
ntfs_mst_pre_write_fixup(), and
ntfs_mst_post_write_fixup().
- Define API for bootsect.[ch] providing:
ntfs_boot_sector_is_ntfs().
- Add beginning of new API with new files inode.[ch] providing:
ntfs_inode_{open,close)(), and
ntfs_extent_inode_open().
- Note the inode related API is subject to change.
- Start defining API provided by attrib.[ch]:
ntfs_attr_search_ctx typedef,
ntfs_attr_{get,put,reinit}_search_ctx(), and
ntfs_attr_lookup().
- Add a TODO.libntfs laying down my personal roadmap for the library.
- Remove ntfs_attr_find() from API, everyone must use ntfs_attr_lookup()
instead.
- Rename all attribute name constants from $blah to AT_blah.
- Rename all system file constants from FILE_$blah to FILE_blah.
- Port ntfs_attr_lookup() stuff from ntfs tng driver.
- Implement loading of extent inodes. They are attached on open to the
base inode and are cached there until the base inode is closed.
- Cleanup/streamline include file dependencies.
- Port attribute list merging code from ntfs tng driver. API to follow.
- Allocate a ntfs_volume in mkntfs and start initializing it instead
of using the opt global structure. Necessary so can call the
modified ntfs_mapping_pairs_decompress() from mkntfs.c.
- Add libntfs/debug.c providing:
ntfs_debug_runlist_dump().
- Add new API call ntfs_check_if_mounted() to volume.[ch]. (Matthew
Fanto, me)
- Do folding assisting cleanups. (Richard Russon, me)
- Add new API call ntfs_boot_sector_is_ntfs() provided by bootsect.[hc].
- Define and write more API calls provided by attrib.[ch]:
ntfs_attr_map_runlist(),
ntfs_attr_vcn_to_lcn(),
ntfs_attr_find_vcn(),
ntfs_attr_init(),
ntfs_attr_{open,close}(),
ntfs_attr_size_bounds_check(),
ntfs_attr_can_be_non_resident().
- Add new field mftmirr_size to ntfs_volume structure and initialize
it to the number of mft records stored in the mft mirror in
ntfs_mount().
- Add new fields mftmirr_ni and mftmirr_na to ntfs_volume structure and
initialize them in ntfs_mount to the $MFTMirr inode and $DATA
attribute. Ditto for mft_ni ($MFT inode), mft_na ($MFT/$DATA),
mftbmp_na ($MFT/$BITMAP), lcnbmp_ni ($Bitmap inode), and
lcnbmp_na ($Bitmap/$DATA). Remove previous fields replaced by these.
- Rename a few fields in ntfs_volume structure to make them shorter,
e.g. now have nr_mft_records and nr_clusters.
- Add new API for doing I/O on both normal and multi sector transfer
protected ntfs attributes described by the ntfs_attr structure,
provided by attrib.[hc] (note writing is still restricted to
overwrite only):
ntfs_attr_p{read,write}(), and
ntfs_attr_mst_p{read,write}().
- Fix detection of read-only mounts in volume.c::ntfs_mntent_check().
- Start modularising ntfs_mount():
- Split off the boot sector parsing code and move it to
bootsect.c::ntfs_boot_sector_parse().
- Move $MFT loading and parsing code to separate function
volume.c::ntfs_mft_load().
- Move $MFTMirr loading and parsing code to
volume.c::ntfs_mftmirr_load().
- Move all startup code (loading and parsing of bootsector,
$MFT, and $MFTMirr) to volume.c::ntfs_volume_startup().
- Update ntfsfix to above modularisation.
- Add detection of read-write mounted devices to ntfsfix and refuse to
operate on them.
- POSIXify libntfs/disk_io.c. All functions now return partial reads
and writes and deal with end of file properly. Affected functions:
ntfs_p{read,write}(),
ntfs_mst_p{read,write}(), and
ntfs_cluster_{read,write}().
- Change ntfsfix to take into account the automatic mft mirror updates.
- Add new API provided by new files dir.[ch]:
ntfs_inode_lookup_by_name(), and
ntfs_readdir().
- We now use u8, u16, u32, u64, s8, s16, s32, and s64 types and we
typedef them ourselves from the C99 standard uint8_t, etc types which
IMO are braindamaged.
- Better gcc detection in 'configure.in'. (Szakacsits Szabolcs)
Tested with: egcs-1.0.3 (egcs-2.90.29), egcs-1.1.2 (egcs-2.91.66),
gcc 2.95.3, 2.96 (from RH 7.1 and 7.3), and 3.0.4.
- Enable enumeration of attributes using ntfs_attr_lookup() which is
requested by passing a type of AT_UNUSED (or simply zero) to
ntfs_attr_lookup(). (Based on initial patch by Szakacsits Szabolcs.)
- Fix two minor buglets in ntfs_external_attr_find() where we would
continue the search when we detect a mismatched type and/or name
instead of aborting and returning error EIO to flag the corruption.
- Add new syntactic sugar API provided by attrib.h:
ntfs_attrs_walk(). (Szakacsits Szabolcs)
- Add new API for compressing runlists into mapping pairs arrays
provided by runlist.[hc] (some adapted from mkntfs.c):
ntfs_rl_vcn_to_lcn(),
ntfs_rl_pwrite(),
ntfs_runlists_merge(),
ntfs_mapping_pairs_decompress(),
ntfs_get_nr_significant_bytes(),
ntfs_get_size_for_mapping_pairs(),
ntfs_write_significant_bytes(),
ntfs_mapping_pairs_build(), and
ntfs_rl_truncate(). -- WIP
- Convert mkntfs.c to the above API.
- Implement attrib.[hc]::ntfs_rl_pwrite() as a low level scatter write
function analogous in functionality to mkntfs.c::ntfs_rlwrite() but
with arguments more like ntfs_attr_pwrite() to allow for more
flexible use.
- Don't use string concatenation with __FUNCTION__ as gcc-3.x don't
like it.
- Move runlist functions to runlist.[hc]. (Richard Russon)
- Add new API to volume.[hc] and use it (Szakacsits Szabolcs):
ntfs_version_is_supported(),
NTFS_V{1_[12],2_x,3_[01]}() macros,
ntfs_logfile_reset(), and
ntfs_volume_set_flags().
- Change size autodetection of non-block device files in mkntfs to use
the stat returned file size rather than the block allocation count to
cope with pre-created sparse files.
- Remove GPL message text from usage information in mkntfs.
- The word is "runlist", not "run_list", "run list", or "run-list".
- Prefix all functions with "ntfs_" and make the names of the form
"ntfs_object_action()". Keep this for all future functions!
- Change unistr.c::ntfs_names_are_equal() to return TRUE when both
names have zero length. Thanks to Leonard Norrgard for spotting this.
- Fix bug in ntfs_external_attr_find(). (Szakacsits Szabolcs)
- Fix stupid logic inversion bug in ntfs_extent_inode_open(). Same bug
was fixed in the NTFS kernel driver over six months ago but the fix
was never taken over to libntfs. (Szakacsits Szabolcs)
- Fix stupid bug in ntfs_ucsncmp(). Spotted by Leonard Norrgard.
- Fix bug where the call to ntfs_attr_{put,reinit}_search_ctx() would
free the extent inode attached to the search context but leave it
attached to the base inode, so this would lead to memory corruption
and worse problems. Thanks to Szakacsits Szabolcs for spotting this.
We now don't close extent inodes any more at all and just leave it
to the closing of the base inode to dispose of all the extent inodes.
- Add sanity check to ntfs_inode_close() to detect attempts at closing
extent inodes.
- Don't free extent inodes in attrib.c! (Szakacsits Szabolcs)
- Return the attribute list attribute when enumerating attributes, too.
Thanks to Szakacsits Szabolcs for pointing this problem out.
- New API function provided by unistr.[hc] and use it in mkntfs:
ntfs_ucsnlen().
- New API function provided by attrib.[hc] and use it in mkntfs:
ntfs_resident_attr_value_resize(),
ntfs_attr_truncate(). -- WIP
- New API functions provided by inode.[hc]:
ntfs_inode_mark_dirty(),
ntfs_inode_sync().
- Change ntfs_inode_close() to write out dirty inodes and inode extents.
- New API functions provided by lcnalloc.[hc]:
ntfs_cluster_{alloc,free}(). -- WIP
- New API function provided by bitmap.[hc]:
ntfs_bitmap_{set,clear}_run(). -- WIP
- Extend the volume.h::ntfs_volume structure with variables required by
the cluster and mft allocators and set them up in
volume.c::ntfs_volume_startup().
- ntfs_umount() now also does an fdatasync() on the device before
closing it.
- Added new utility ntfstruncate, primarily to be able to test the
new ntfs_attr_truncate() function, it is not compiled by default.
Note, the library can currently only make attributes smaller and it
only works on uncompressed, unencrypted inodes which do not contain
attribute lists, i.e. on simple files, but that was quite a lot of
new code in itself which needs a lot of testing!
- Fix library to never issue writes on volumes that have been mounted
read-only.
- New API provided by mft.[hc]:
ntfs_mft_record_{alloc,free}(). -- WIP
12/03/2002 - 1.6.0 - More mkntfs options and cleanups.
Fix typo in usage information of mkntfs. Thanks to Richard Russon for
spotting it.
Change version number in mkntfs and ntfsfix to match the linux-ntfs
release version number.
Added two new options to mkntfs; -I, which disables content indexing
on the volume and -C, which enables compression on the volume.
01/02/2002 - Attempt to fix compile warnings on powerpc.
Attempt to fix compile warnings on powerpc. It seems powerpc uses
char == unsigned char which was breaking some signed comparisons.
26/01/2002 - 1.5.1 - Fix two buglets in ntfsfix and more compilation fixes.
Fix two silly buglets in ntfsfix, where we were calling is_baad_record
instead of is_baad_recordp. Silly me... Thanks to David Martinez Moreno
for reporting the compilation warnings on ia64 which led me to find the
bug.
Fix compilation problems in logfile.h on big endian arches. Hopefully,
now will really compile on all arches.
10/01/2002 - 1.5.0 - Fix bug in $LogFile size calculation.
Fix bug in $LogFile size calculation where we would take the size to
be zero on partitions between 200 and 400MiB in size.
Add requirement for linux-ntfs to linux-ntfs-devel.
15/12/2001 - Remove atomic ops and add compiler version check.
Hopefully this will preempt "it doesn't compile for me" messages from
people with gcc < 2.96.
Change bail out error check for seek to backup boot sector to a warning
since SuSE 7.2 + loads of stuff and 2.5.1-pre11 returns EINVAL instead
of ENOSPC.
Remove atomic code as it isn't defined on non-i386 arches.
06/12/2001 - Change ntfs_mount to accept second argument for mount flags.
ntfs_mount() now supports mount flags as per "man 2 mount". Currently
only the MS_RDONLY flag is supported/implemented. This breaks
compatibility with older libntfs versions and hence the major version
number of the library has been increased.
Adapt utilities to make use of new ntfs_mount syntax.
17/11/2001 - Add description of compression algorithm.
09/11/2001 - 1.4.0 - Major fix in mkntfs, small update to ntfsfix and others.
Update ntfsfix to support Windows XP NTFS volumes (NTFS 3.1).
Update layout.h with more information.
(Re)enable shared libraries.
Changes to mkntfs:
- Correct handling of directories on volumes with cluster sizes
above 4096 bytes.
- Lower minimum size of NTFS partitions to 1MiB, scaling down the
logfile size as necessary.
- Support a wider range of input parameters. Now should have all
valid combinations covered.
- Update man page.
- Implement better determination of device size.
- Various bug fixes.
22/08/2001 - 1.2.2 - Small fix in mkntfs and minor updates.
Small fix in mkntfs for small volumes with non-standard sector sizes,
where the default values would result in a sector size smaller than the
sector size and mkntfs would refuse to run because of this. The man
page was updated accordingly.
Minor updates/clarifications to include/layout.h.
02/08/2001 - 1.2.1 - Added ntfsfix man page and minor cleanup.
David Martínez Moreno <david.martinez@rediris.es> donated a man page
for ntfsfix as well as spelling mistake fixes all over the place.
26/07/2001 - 1.2.0 - Important bug fixes to mkntfs.
Bug fixes for cluster sizes > 4kb involving corrections to mft mirror
size and contents, mft data attribute position and mft bitmap size.
Some of those were nasty so this is a major improvement. Hopefully these
were the last bugs.
25/07/2001 - 1.0.2 - Small cleanup of the distribution.
Move mkntfs to sbin (was put in bin before).
Small bugfix to mkntfs man page.
24/07/2001 - 1.0.1 - Small cleanup of the distribution.
Confirmed that at least gcc-2.96 is needed to compile linux-ntfs.
Removed ldm.c from linux-ntfs. It will reappear as ldminfo.c in a new
package, probably linux-ldm.
Taken out some file from the distribution, but they are still present
in CVS. This is because they are not really useful except if you are
a developer wanting to play about.
10/06/2001 - 1.0.0 - mkntfs release and bugfixes to ntfslib and the others.
Also, released ldm which dumps the ldm database on Win2k/XP dynamic
disks.
A man page for mkntfs is also installed by make install so man 8 mkntfs
can be used to show the recognised command line options.
Building of shared libraries is disabled by default as it breaks on
some systems.
Probably need at least gcc-2.95 or something like that from now on.
02/02/2001 - Started ChangeLog.