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 and 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 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.