version 0.002; 2014-03-25
* new function shash_tidy() to make data file rollover happen at a
convenient time
* in many error messages, state more specifically and consistently
what kind of action has failed
* in documentation, consistently describe the content of a shared hash
as "content" rather than "contents"
version 0.001; 2014-03-23
* bugfix: avoid overflowing a directory entry buffer on OSes where
struct dirent is not a suitable size for a buffer
* bugfix: avoid overflowing a filename buffer when time exceeds the
32-bit range (a year 2038 problem) or PIDs are larger than 32 bits
* ensure reliable behaviour across fork(2), by not holding on to
allocated data file space between write operations
* create all data files with the same permission bits as the master
file, so that the permissions set when the shash was created stick,
and the umask at the time of shash operations doesn't matter
* attempt to give all data files the same group and owner as the master
file, so that permissions behave as consistently as possible
* new exported constant shash_referential_handle to indicate whether
shared hash handles constitute first-class references to the
underlying files
* detect non-octet string values for key and value parameters reliably
and early, consistently signalling the error
* detect non-string values for filename parameters, signalling the error
* process get magic on each parameter exactly once per hash operation
(though users of the tied interface are at the mercy of the tying
infrastructure, which doesn't have such clean behaviour)
* when attempting to clean a shash directory, if listing the directory
fails, report the error, rather than silently abandoning the cleaning
attempt
* when attempting to generate a new data file, if the size is so large
as to cast to a negative off_t value, detect it early and report
EFBIG, rather than going ahead to create the file and detect the
error at ftruncate(2) time
* if ftruncate(2) reports that a requested file size is too big using
errno EINVAL, report it as the more enlightening EFBIG
* when attempting to iterate a shash directory, if opening the directory
fails, detect it and report the real error, rather than going ahead
to fdopendir(3) and detecting its EBADF
* when reporting an error including the name of a shash, to match
user expectations use the characters of the filename scalar that
was supplied upon opening, even though the octets of the scalar's
internal representation are what are actually used as the filename
* automatically detect and adapt to the machine architecture's line
and page size, to improve performance on architectures other than
IA32/AMD64
* port to pre-5.14 Perls, back to 5.6
* automatically use the -lrt library on systems where it is required
in order to get access to clock_gettime(2)
* cope on systems where openat(2) et al are not available, either not
defined by the headers, or defined but not functioning
* cope on systems where clock_gettime(2) is not available, either not
defined by the headers, or defined but not functioning
* cope on systems where O_CLOEXEC is not available, either not defined
by the headers, or defined but not honoured (or not accepted) by
the kernel
* when iterating a shash directory, open a new file descriptor rather
than duplicate the existing one, avoiding portability problems with
F_DUPFD_CLOEXEC
* use symbolic constants for file permission bits, for portability to
systems where they have non-traditional values
* cope on systems where the headers don't define MAP_FAILED
* check at compile time that the word data type is of exactly the
required size
* on Perls that support it, hook into B::Deparse to make the custom
ops deparse nicely
* many new tests
* document the effects of file-level operations on shared hash
directories
* document the tied(%shash) operator as part of the tied interface
* clarify documentation about permitted keys and values
* in documentation, mention serialisation and refer to Sereal
* perform string equality comparisons more efficiently by specific
code separate from ordering comparisons
* use more efficient variants of Perl API functions where available
* use the Perl-version-dependent matching data type to save
PL_tmps_floor, rather than an invariant sufficiently-large type
* declare C functions as inline where it'll help for compilers that
need the hint
* make some printf operations cheaper by taking advantage of Perl's
requirement that the C int type is at least 32 bits
* shuffle C struct members for better packing on 32-bit systems
* small clarifications to design document
* slight refactoring of C code
* avoid some C compiler warnings
version 0.000; 2014-02-27
* initial released version