- Added casts and made other changes to satisfy fussy signed/unsigned
- Fixed a problem in which volumes were not marked as ``cleanly
unmounted,'' causing unnecessary scavenging to occur when the volume
is mounted again.
- Fixed a problem where scavenging failed to mark all extents from the
final B*-tree node.
- Introduced a flags parameter to
HFS_OPT_2048 format option ensures 2048-byte
physical-block file boundaries, compatible with hybrid ISO 9660
HFS_OPT_NOCACHE mount option inhibits use of libhfs'
internal block cache, useful for RAM file systems or
systems/circumstances where the cache may decrease performance.
HFS_OPT_ZERO format/mount option forces all allocated
blocks to be zero-initialized before use, for systems/circumstances in
which blocks may otherwise contain random data. (This is primarily a
security feature with a performance cost.)
- Fixed a problem with the handling of catalog and extents clump sizes
(again; first fixed in 1.15b but re-introduced in 3.0b1, alas.)
- Modified configure once again to search for
tk.h header files.
- Fixed a problem with the B*-tree node splitting code. This could have
caused the libhfs routines to crash under some rare circumstances.
3.2.6 has been released.
- Added support for ``blessing'' the MacOS System Folder by means of a
new field in the hfsvolent struct. A new option to
hattrib can be used to set this field, as can a new
bless Tcl volume command.
- Modified configure to use existing Tcl/Tk configuration
information rather than reconstruct it.
- Fixed a minor potential problem where binhex translation might fail to
recognize the hqx header.
3.2.2 has been released.
- Fixed a problem determining medium sizes under some unusual
- Made some initial changes to support Sequoia.
- Fixed a problem related to partition locations on large media.
- Fixed a few problems with
suid.c on some systems.
- Fixed a problem with font selection in xhfs.
- Changed copyouts not to append
.txt to text files if the
filename already contains a period.
- Fixed a few other minor problems.
3.2 has been released.
- Introduced a new internal block cache; multiple consecutive volume
blocks are read and written with fewer system calls, and are cached
for efficiency. The result is an enormous performance boost on many
- Fixed three bugs:
- the alternate MDB was sometimes written to the wrong location on
- the Extents Overflow file could become corrupted under some
circumstances in which a heavily fragmented file is removed; and
- it was possible for the volume allocation routine to become caught
in an infinite loop.
- Character set translation (MacOS Standard Roman <=> ISO-8859-1
aka Latin-1) now occurs when copying text files, in addition to
- Introduced several libhfs API changes:
hfs_create() now returns an open file reference like
hfs_format() accepts a list of bad blocks which are
to be spared;
hfs_format() now require
the given partition number to exist, or allow
specify the entire medium; and
- new routines
hfs_nparts() allow new partition maps and HFS
partitions to be created and counted.
- The entire package is now configured via a GNU `configure'
script. Details for the new, simplified installation procedure can be
found in the distributed `README' file.
- Many other minor improvements.
3.1 has been released.
- Modified all programs to be setuid-aware. Setuid privileges are only
engaged when opening devices as HFS volumes; this can be useful to
limit access to and/or help protect the structural integrity of HFS
volumes, for example by installing the hfsutils programs setgid.
non-beta release, version 2.0!
- Fixed a problem which prevented large volumes from being properly
hfs_format(). This should also allow the
library to correctly manipulate large volumes in certain other cases.
- Adapted the code to work with Tcl 7.6 and Tk 4.2.
- Added an HFS globbing interface to Tcl, and extended the
hfs shell to use it.
- Modified globbing routine to ignore Finder-invisible files.
- Rewrote hls and hdir; many UNIX-like options
are now available.
- Updated the general documentation.
- Continued development of hfsck.
1.19b has been released.
- Resolved many signed/unsigned argument passing conflicts throughout
the code. It should now compile cleanly even on very strict systems.
- Changed the interface for
hfs_write() to accept a
void * buffer
pointer rather than demanding
- Made volume file locking optional for systems that don't support it.
- Included a few other portability fixes for AIX and
1.18b has been released.
- Completed the implementation for hattrib; HFS file
attributes (type, creator, invisible/locked) can now be changed from
the command line.
- Fixed an off-by-one error in computing catalog record key lengths.
- Fixed a problem with backslash-quoted braces during globbing.
- Improved Makefile handling.
- Regularized the handling of the volume-unmounted flag.
- Streamlined the internal and external interface header files.
- Added a parid field to the hfsdirent
- Updated libhfs documentation.
- Implemented a better error message reporting format involving
1.17b has been released.
- Improved the robustness of the HFS path resolution routine.
hfs_rename() to better detect the validity of
- Changed mount-time scavenging only to mark bits in the volume bitmap,
not clear them. This reduces the risk of causing further damage to a
corrupt disk, leaving serious recovery to more advanced tools.
- Added file locking to
hfs_mount() to prevent concurrent
processes from potentially creating inconsistencies in a volume.
- Added a new argument to
hfs_mount() for specifying mount
flags. This now allows a volume to be explicitly mounted read-only,
read-write, or don't care (whichever is available).
- Improved detection and handling of multiple same-device mounts by a
- Improved error message reporting for all programs.
- Fixed a problem where hrenaming a volume caused it to become
inaccessible until it was hmounted again.
1.16b has been released.
- The buffer size for native HFS-to-HFS copies has been increased to
- A problem verifying the existence of directory threads has been fixed.
- A problem with the handling of catalog and extents clump sizes has
1.15b has been released.
- The command-line programs now support filename globbing.
- File threads are now managed properly when the associated file is
deleted, moved, or renamed. However, there is no mechanism yet to
explicitly create or remove threads, or to use them in catalog
- If a volume is mounted that was not cleanly unmounted, the
volume bitmap for that volume is now reconstructed from the catalog
and extents files.
- Directories may now be deleted recursively using xhfs.
- BinHex and MacBinary header fork size validation limitations have been
- Volumes are now flushed automatically by xhfs every 30
seconds to reduce risk of accidental data loss.
- Begun work on hfsck, a program to verify and correct HFS
- Begun work on librsrc, a library for manipulating the
resource forks of HFS files.
1.14b has been released.
- Two bad extent record key sorting bugs have been fixed; these could
have caused serious problems on certain fragmented volumes.
- A problem related to MacOS default file clump size semantics has been
- Recursive directory copies in xhfs have been implemented.
- Files and directories may now be renamed with a mere change of case.
- Multiple files may now be moved with hrename.
- A UNIX pathname of "-" in hcopy may now be used to mean
stdin or stdout when used as the source or
destination target, respectively.
1.13b has been released.
- A fix has been implemented to allow certain miscreant partitioned
media to be recognized and mounted.
- The buffer sizes for file transfers have been increased, resulting
in drastic speed improvements for some systems.
-a option (automatic transfer mode selection) for
hcopy has been implemented. This is also the default.
- HFS timestamps are now interpreted as being relative to the current
- Still no globbing or file attribute munging (other than via
libhfs) yet, sorry.
1.12b has been released.
- UNIX-to-HFS BinHex transfers have been implemented. All transfer
modes are now fully implemented.
- New libhfs routines have been added to manipulate
file and directory attributes (timestamps, type/creator, flags).
- A bug in HFS filename sorting (which affects the search routines)
has been fixed.
- Preliminary work for filename globbing and a new hattrib
command has started but is not yet finished in this release.
- The installation procedure has been made simpler still.
1.11b has been released.
- A severe bug has been fixed: it was possible for directories with
names longer than 21 characters to get corrupted.
- Catalog moves and renames have been implemented. A new
hrename command has been added.
- Some minor xhfs enhancements have been made. Files
and directories can now be renamed using the interface.
- Documentation for libhfs has been updated.
1.10b has been released.
- The code for libhfs has been modularized. This is
important to begin development on a fsck-like program
and other tools.
- The code has been made more portable; it should now run without
problems on any machine regardless of the size or endianness of
the host's native types.
1.9b has been released.
- All transfer modes with the exception of UNIX-to-HFS BinHex have now
been implemented. (BinHex files can still be copied as text.)
- The hcat command has been replaced with a generic
hcopy which supports all of the implemented transfer
modes. Files can be copied both to and from HFS volumes.
- A new humount command causes a volume to be forgotten
(removed from $HOME/.hcwd).
- Even more UI enhancements have been made to xhfs.
- The Tcl interface has been made more robust.
- A bug in the MacBinary II encoding CRC algorithm has been fixed.
1.8b has been released.
- Many more UI enhancements have been made to xhfs. It is
now possible to copy files from UNIX to HFS using either text
or raw translation under xhfs.
1.7b has been released.
- A few small bugs have been fixed and a few enhancements have been
made to the library; invisible files are now flagged.
- Several UI enhancements have been made to xhfs, and a
few minor enhancements and documentation updates have been made to
1.6b has been released.
- All B*-tree manipulations have been fully implemented.
- The library routines which implement file writing have been completed,
although none of the supplied programs make use of them yet.
- Two new commands hdel and hrmdir have
been added to delete files and directories, respectively.
1.5b has been released.
- Multiple mounts of the same volume are now handled intelligently.
- All open files are now closed automatically when a volume is
- Installation of the Tcl and Tk tools has now been made optional.
1.4b has been released.
- B*-tree file growth has been implemented. The catalog and extents
overflow files can grow as large as needed, to the size of the entire
- An hmkdir program has been added to create new HFS
- An option to create new directories has been added to the X interface.
1.3b has been released.
- B*-tree insertion has been implemented; the hfs shell
program can now create directories with mkdir until the
catalog tree gets full.
1.2b has been released.
- Partial writability has been implemented. New volumes can be cleanly
initialized with hformat.
- New folders can be created, with some severe limitations.
- Full read-only volume access has been implemented.
- The graphical front-end implements MacBinary II and BinHex encoding of
HFS-to-UNIX file transfers, as well as text and raw translations.
- The Tcl and C libraries contain interfaces for the full set of
expected HFS operations.
Back to HFS Utilities