20251025:
- updated config.sub, config.guess, and instal-sh
- added MacOS support (submitted by Grady McBride)
- update for configure script
- added condition variables based infra structure for MacOS

20250809:
- fix cmake build issue
- fix some warnings on intentionally ignored return values

20250429:
- get number of available pages on NetBSD via sysctl
- use SYSCONFDIR instead of 'PREFIX "/etc"'
- clang configure fix for tapedrive emulation
- minor code updates

20241007:
- build fix for -Wincompatible-pointer-types
- configure script update to autoconf version 2.71

20240929:
- updated default buffer calculation for more sane defaults
- minor updates for debug messages

20240818:
- fix port range check (Peter Pentchev)
- fix ipv6 only mode
- enhanced incoming host check to work with IP, hostname, FQHN
- enhanced ipv6 hostname parsing

20240707:
- fix IPv4 address printing
- listen on IPv6 and IPv4 if possible
- add debug messages for defaults on address family
- build fix for systems without getaddrinfo
- gracefully handle empty address infos

20240107:
- corrections for documentation and help output
  (patch by Andreas Hartmann)
- added environment variables for auto-loader command

20231216:
- changed from `which` to `command` for Debian forward compatibility

20230301:
- Fix breaking connections on WAN links: retry on EAGAIN
  (fix by Nico Schümann)

20220418:
- fix handling of filesystem full on stdout

20211018:
- fixes related to TCP timeout handling
- enhancement: support setting config file via env var MBUFFERRC
- documentation update

20211004:
- make TCPTimeout=0 disable the TCP timeout
- changed default TCP timeout from 10s to 100s
- TCP timeout now can be give with suffixes ms,s,min,h
- documented option for TCP timeout

20210829:
- enhancement: accept IPv6 addresses in square bracket format
- enhancement: more detailed warning message for connect failures
- work around Solaris default old mercurial and incompatible sed

20210328:
- removed cancel after join for reader thread
- updated install-sh
- mbuffer.1 has outdated version tag

20210209:
- fix: hash algos should not suppress stdout

20200929:
- enhancement: added option --no-direct to disable use of O_DIRECT
- defaults: raised default TCP timeout to 10ms for WAN connections
- fix: leave TCP buffer size untouched if not set
- enhancement: add option to set TCP timeout
- performance optimization: use recv with MSG_WAITALL instead of read
- configure fix: look for objdump also with target prefix
- testing: make sure to use gtar for testing to avoid unexpected failures
- portability: NetBSD compatibility fix
- build enhancement: added dependency calculation for make
- build enhancement: automatic version string generation

20200505:
- configure fix for some powerpc toolchains
- update config.sub and config.guess
- added option to perform direct I/Os on temporary file

20191016:
- autoadjust dependent parameters
- human readable buffer size information instead of kiB

20190725:
- hashing infrastructure should also be enabled with libdl available
- report input file name in message for open failure
- fix: don't try to open network output as file after failure
- fix: potential issue related to inet6 hosts handling
- added complementary cmake based building and testing
- some cleanup work

20190127:
- fix: erronous empty file generation on network connection failure

20190119:
- enhanced default settings for better performance
- use O_DIRECT on input and output if possible
- option --direct is now deprecated and has no effect
- Output Size must be adjusted to Blocksize during initialization
- man-page corrections
- fixed some messages (typos and formatting)

20190113:
- fix for network initialization for systems without getaddrinfo
  (patch by Peter Pentchev)
- support suppressing messages with Verbose=silent and Verbose=none
- fix detection of invalid arguments to option -v
- Copyright update to 2019

20181119:
- consistently use CLOCK_MONOTONIC if available
  (patch by Peter Pentchev)
- handle time standing still or running backward
  (only relevant on systems without CLOCK_MONOTONIC)
- updated INSTALL file to reflect available options
- added explanation for lack of MacOS support

20180625:
- linking of available hash libraries during runtime

20180505:
- fix typo in summary
- fix potential hang with small input size
- testing fix for BSD
- configure enhancement: objdump may be named gobjdump
- fix tape end of file marker may be ignored
- removed obsolete alpha code

20180410:
- build fix for hashing library variants
- support tapetest on systems with name variants of open and write
- run only network tests for supported address families
  (patch supplied by Peter Pentchev)
- code update for hashing infrastructure
- make idev tests usable on more platforms
- determine amount of available memory via procfs
- option -d unintentionally consumes an argument
- idev.c should use libc's names
- support use of autoreconf

20180318:
- performance optimized defaults
- stricter arguments checking of mbuffer.rc
- handle FreeBSD's maximum semaphore value transparently
- print base 2 dimensions correctly (ki,Mi,Gi,Ti)
- FreeBSD patches by Eric Borisch

20171011:
- use $(etcdir) consistently for installation
- use AC_COMPILE_IF instead of AC_RUN_IF to support cross-compiling
- remove forward typedef for dest_t to support older compilers
- build fix for Solaris
- updated test infrastructure
- print pid on every message with --pid
- fix: potential hang, when one output fails to open

20170921:
- added jumpbuffer reading mode for inconsistent block sizes
- code separation into more files for enhanced readability
- some cleanup work for global variables
- fixed regression in sanity checks
- fix: option -f should truncate output file
- fix: failed opening of network output should not redirect to stdout
- fix: summary printout should respect quiet options

20170806:
- add support for libgcrypt
- add support for tape aware out-of-space handling
  => ignores first out-of-space error message on every write
  (patch by Adam Nielsen <a.nielsen@shikadi.net>)
- support setting verbosity in config file
- suppress gcc's unused result warnings - all have been manually checked
- updated install-sh, config.sub, and config.guess
- exit cleanly if all outputs failed to open but hashers are left
- minor fixes and enhancements
- minor code refactoring for clearer structure
- some code hardening
- build fix for OpenBSD
- work around mhash_get_hash_name_static crashing

20170515:
- fix false warning on comments in config files
- code update for config parsing
- makefile compatibility update

20170514:
- update: configure update for latest cygwin
- fix: detect missing md5.h in configure
- enhancement: adjust some messages to avoid line-wrapping
- enhancement: print status message to log if suppressed on console
- enhancement: also read config files in /etc and ${prefix}/etc
- enhancement: simplified memory conifguration detection scheme
- added an example config file, with documentation of all options
- added parameter StatusInterval
- fix for handling empty lines in config files
- fix: --append rejects existing files
- fix warnings related to thread status return code

20161115:
- enhancement: report percent done, when input size is known (is a file)
- enhancement: watchdog raises SIGKILL if SIGINT had no effect
- change: start watchdog when parsing option -W or after parsing all
          options when activated via defaults file
  => Originally the watchdog was started after output to make sure
     output initialization doesn't unintentionally trigger the watchdog
     due to delays with a manual setup on the receiving side in a
     network situation.
  => This behavior limits potential benefits when mbuffer is used in an 
     automated environment where output initialization might fail and
     the watchdog would be of use.
  => To avoid triggering the watchdog during network initialization, put
     the watchdog option -W after network options -O and -I.
- fix: use thread-safe mt_usleep instead of sleep(3) for watchdog timing
- change: adjusted interface of mt_usleep to accept 64bit arguments

20160613:
- fix: fix potential assertion triggered by interrupted system call
- enhancement: ignore EINTR for I/O syscalls

20160228:
- fix: fix listen's backlog argument, which can cause issues on Linux 4.4
  (patch by Matthijs van Drunen)

20151002:
- fix: SegV when argument to -v is missing
- fix: potential infinite loop on output error

20150412:
- fix: watchdog cannot do its job if it is cleaned up to early
- fix: clear sa_flags and sa_mask before use, although ignored

20141227:
- added option --pid to print PID of current process
- updated usage to include option -W
- man page formatting fixes
- configure updates
- support compiling on systems that do not define PATH_MAX

20140310:
- added memory advise for buffer memory
- compatibility fix for Solars st driver
- prevent buffer overflow attack via defaults file
- ignore defaults file from other users
- updated documentation for use with cron
- minor bugfixes

20140126:
- new feature: set option defaults in ~/.mbuffer.rc
- enhancement: write status to the log file
- enhancement: added option to suppress status logging
- fix: formatting fix for summary message

20130220:
- reverted incorrect fix for -P 100, which may lead to data corruption
- reenable hash libraries (no correlation with data corruption)
- bail out if any output fails to initialize
- refixed hang on -P 100
- reduced sending overhead
- fixed handling of option -f

20130209:
- hash names should be compared case insensitive for convenience
- safeguard against missing argument to option --hash
- support for hash calculation withdrawn, due to potential data
corruption, when the buffer runs full

20121111:
- build fix for some platforms
- several minor code cleanups (removed some warnings)
- support float values as argument to memory options
- added a watchdog that terminates mbuffer if input
  or output activity stalls (option -W)

20120505:
- fixed IPv6 client initialization on FreeBSD
- fix: suppress summary on stderr if -q is used with -l
- fix: option -P 100 may lead to hang

20110724:
- fix: garbage might be written after input error
- enhancement: prompt for additional volumes for argument "-n 0"
- enhancement: prompt for next volume on I/O error if -n is set
  (some tape devices incorrectly return -1/EIO instead of 0)
- enhancement: added option to append to output file
- update: remove use of deprecated interface sigignore

20110317:
- fix: terminate ASAP if no working output is available
- enhancement: added option to terminate on any error
- fix: mbuffer blocks on SIGTTIN when started in background
- fix: display correct dimensions (e.g. kiB instead of kB)

20110119:
- Anniversary: 10 years of mbuffer
- fix for building on cygwin in a separate directory
- fix: incorrect sanity check concerning hashing and multivolume support
  (patch by Sean Walmsley)

20101230:
- enhancement: hash should show up in log file
- enhancement: report last block number on volume
- enhancement: report times for each volume and tape changes
- cosmetic fix: need to convert thread ids to long for linux
- build enhancement: better cygwin and packaging environment support

20100526:
- fix: potential deadlock on SIGINT related to watermark algorithm
- fix: high watermark algorithm interferes with rate limitation

20100327:
- fix: hash calculation is omitted if no output is set
- fix: test procedure doesn't wait on Solaris 8
- some cosemtic fixes for the man page
- summary output to logfile should be independet of quiet mode

20091227:
- enforceSpeedLimit must use monotonic time source to prevent being
  disturbed by ntp
- made test suite configurable and clean-up itself
  (submitted by Peter Pentchev)
- made IPv6 code optional
- added check for block size of input device
- only determine 64bit compile flag if no CFLAGS given
- fix lockup on input error
- don't cancel non-existing thread in quiet mode
  (caused SegV on Linux)
- BSD header inclusion update
- SIGINT cancellation fixes (systems other than Solaris need a hack)

20091122:
- fix superfluous ai_flags causing error on Solaris 8
- fix assertion failure after rejected connection
- configure fix for 64-bit builds
- minor lint cleanup
- added workaround for cancellation issues on Solaris 8/9

20091110:
- fix SIGINT hanging when input is idle
- several IPv6 fixes
- compile for 64 bit by default if available

20091012:
- hash calculation is faster if done in a separate thread
- new option --hash to select other algorithms of libmhash than md5
- omit creation of superfluous inputThread in absence of status output
- fix potential race condition during startup in high watermark code
  [reported by Michal Soltys]
- reduce number of semaphore calls in high watermark code
- fix a potential deadlock on SIGINT
- fixed a typo in watermark example

20090628:
- added IPv6 support
- added support for port name lookup
- added another verbosity level for I/O messages
- refix libmhash initialization

20090215:
- fix status thread hang on very small transfer sizes
- fix libmhash initialization
- -q should not suppress output of -H
- reduced termination latency with status display running
- update for summary display
- changed default shell make shell to /bin/sh

20090113:
- fix for assertion failure of 64bit binaries in network code

20090106:
- BSD compatibility update
- replace use of deprecated atoi with strtol
- better argument checking for numeric options
- enhanced semaphore limits checking
- add phony targets

20081207:
- fixed some typos in man page
- TCP buffer tuning could be a little bit more intelligent
- fixed formating of some info messages
- tuneable TCP buffer with option --tcpbuffer

20081113:
- tune send and receive buffer of TCP stack to match block size
- added target check to Makefile
- fix: don't mix up file during open
- code cleanup/unification for MD5
- sendfile should also be used for writing to files
- sync cleanup on output thread instead of input thread
- fix: access to dest_t after free()
- unified summary and join between verbose and silent mode
- minor code cleanups

20081023:
- mbuffer should not abort on SIGTERM
- mbuffer should not segv on invalid arguments for options -m, -s
- transfer statistics should wait for the first block to be received
- minor code path optimization
- option -n should accept -n1

20081015:
- FIX REGRESSION: stdout may be corrupted by mbuffer
  (This regression was the result of a patch to redirect
   stdout of autoloader commands)

20081014:
- redirect autoloader stdout to mbuffer's stderr
- added support for O_DIRECT (use option --direct)
- options -o and -i should recognize "-" as stdin/stdout
- direct use Solaris' native semaphore implementation
- fixed cancellation issues
- manpath needs to be created
- sendfile should fallback to write if unsupported
- fixed maximum addressable memory message
- docu update

20080910:
- new feature: support for multiple ouptuts
- new LICENSE: GPLv3
- fixed a race-condition in logging
- adjusted CFLAGS for gcc
- warn about LD_LIBRARY_PATH interfering with build process
- the exitcode of autoloader command should be checked
- changed default buffer size to use 2% of available memory
- changed default block size to system pagesize
- added make target for lint

20080507:
- memory locking for file fails if -L is passed before -T
- use MAP_SHARED instead of MAP_PRIVATE to simplify fork in system
- missing arguments may cause a SegV
- $(LIBS) should be after $(OBJECTS)

20080502:
- better support for device special files
  (files under /dev shouldn't need -f to write to)
- update to always handle largefile correctly
- fix configure script for sendfile functionality
- allow in-memory locking of file based buffers
- minor docu updates
- minor build update
  (compile with -c -O, mbuffer.o is dependent on Makefile)

20080329:
- configure should check if ST_BLKSIZE feature is available
- compile with -O instead of -g per default
- hostnames may have underscores and/or dash
- orthographic fix
- use inline and restrict if available
- honor --disable-assert
- use directio for input, too

20080212:
- fixed a race-condition causing incorrectly written last block

20080122:
- fix wrong assertion on dup2
- fix 'make distclean' to also remove mbuffer.exe
- fix installation of manpage

20080104:
- updated status display
- POSIX conformance update: read from stderr instead of relying on
  /dev/tty exists, fallback to /dev/tty if stderr is unreadable
- update to build on HPUX.11 (thanks go to testdrive.hp.com)
- several configure fixes and updates
- fixed invalid exitcode without console (Alex Kramarov)
- correction for full/empty report

20070911:
- bugfix: search for MD5 functions with correct function names

20070826:
- bugfix: search for MD5 functions in libcrypto instead of libssl
- bugfix: search for MD5 functions in libmd5 using different function
          to avoid incorrect caching of results

20070518:
- bugfix: misplaced ifdef could lead to failures for options -d and -b
  on systems that do not support device block size determination
- fixed possible hang on SIGINT without status thread
- write summary to stderr if no tty is available

20070502:
- added support for setting the output device's volume size explicitly
  (patch by Sean Walmsley)
- minor cleanups
- make locking more solid
  (in theory [only], a deadlock could have occurred)
- assert() everything

20070401:
- prefix name of executable before every message
- added some missing newlines
- set dependency for "make install" on "make"
  (i.e. "make install" also builds mbuffer)

20070317:
- fix: mbuffer erroneously return with EXIT_SUCCESS when it got 
       interrupted by SIGINT or SIGTERM

20060728:
- changed signal handling to prevent syscalls returning with EINTR in
  reader and writer
- fix for warnings, fatals, and errors getting truncated
- sleep before printing I/O rates for the first time to prevent showing
  insane values

20060704:
- use condition variables to safely signal crossing of watermarks
- include times full/empty (crossing of low/high watermark) in summary
  (proposal by Alex Kramarov)
- enhanced status and summary output to be display stats with a higher
  precisions

20060626:
- bugfix and enhancement for rate limitation code
- fixed regressions caused by switching from float to double
- make sure outputThread doesn't start initially if -P is set
- write debug logs a little bit more thread friendly 
  (i.e. switched from stream- to normal file ops)

20060616:
- added speed limiting (options -r and -R)
- fix errormessage in calcint
- show option -d in usage output only if it is available
- use of float really doesn't make any sense nowadays;
  changed all floats to double

20060421:
- set exitcode to failure whenever an error occures
- fixed a warning

20060324:
- added option -c to enable synchronous data integrity I/O:
  This was enabled by default until now, but may cause a decrease in
  performance as it requires a higher number of I/O ops. On systems
  without full synchronous data integrity support, no difference will
  be observable concerning performance. Systems that support it, will
  gain increased performace without -c, but error reporting will be 
  more precise with -c.
- changed errormessages to include offset
- added support for Solaris' directio hinting
- made memlock support an automagic option (compiled in if available)
- simplify CFLAGS overriding
- more portable largefile support solution
- minimized configure script
- default to native compiler instead of gcc

20060217:
- made signal handling more standards conforming
- use deferred cancellation instead of asynchronous
- fixed some debug messages
- use sendfile only for sockets

20060126:
- clarified some errormessages
- fixed some typos
- updated README file

20051006:
- added support for sendfile
  (AFAIK only the Solaris version supports sending from buffers)
- added memory locking support
- added support to set buffer size as percentage of physical memory
- open file with O_LARGEFILE per default
- added some command-line options for existing functionality
  (-H, -V)
- compile as 64bit executable on opteron and sparc architectures by
  default
- defaulting to /var/tmp for buffer files, as /tmp is a swap based 
  filesystem on some operating systems
- use TMPDIR environment variable if available to determine where
  to put a buffer file

20051003:
- increased maximum value of number of blocks
- doku updates
- openssl build fixes
- fixed some warnings
- install man page to correct location
- reuse networking sockets
- do not bail out if output does not support syncing
  (thank you to Wolfgang Denk for some suggestions)

20050730:
- made mbuffer.c lint clean
- fixed some types
- Makefile fix for install

20050726:
- added support for openssl based md5 hashing
- support of transfer summary in gigabyte
- support for passing buffer size in gigabyte (G)
  (please pass the relevant CFLAGS for 64Bit executables for
   your compiler to configure)
- added support for passing command to autoloader 
  (patch submitted by Wolfgang Denk)
- enhanced network parameter parsing
- FIX: transient error in status display
- FIX: mbuffer could hang on first SIGINT (chance 1/3)
- fixed a bug in network client verification code
- pass CFLAGS also to link phase
- unlink tmpfile as early as possible
- check close for errors
  (see Chris Gerhard's Weblog concerning close on
  http://blogs.sun.com/roller/page/chrisg?anchor=did_that_close_succeed)
- additional sanity checks for buffer limits

20050510:
- fixed possible lockup upon SIGINT
- fixed displayed time
- updated display to change to MB instead of kB when > 3072kB

20050321:
- compile time fix for gentoo and suse 9.2
- made --enable-debug and --enable-md5 work
- gcc optimization flag set to -O2, -O as default

20050125:
- fixed operation of low watermark (-p)
- made printf formating more standard conforming
- start output before input thread
- more minor fixes

20050124 (unannounced interims version):
- fixed summary bug reported
- kicked automake
- removed locale support (too much work to support properly)
- changed debugmsg to a C99 macro, if debugging is switched off
- fix: final newline of statusThread was printf()ed to stderr instead 
  of Terminal
- fix: potential incorrect written last block
- fixed warnings: comparison of signed and unsigned
- beautified summary
- added low watermark (request by Greg Freemyer)
  (restarts reading if dropped below - needed for FAST streamers;
   I don't have such a beast and I never expected such a thing to exist...)
  WARNING: changed argument -p to represent low watermark (was high watermark)
           so that both options are easier to remember
- eliminated dead code
- changed status of networking code to stable
- removed NDEBUG from config.h and configure, because assert()s are
  always "a good thing TM"
- encapsulated Terminal I/O within Mutex
- md5 hashing option added (disabled by default, proposal by Greg Freemyer),
  using either mhash or md5 library, whatever is available
- some more cleanups

20011008:
- more detailed errormsg for host name resolving
- beautified some messages
- compile/linker fix

20010807:
- update for networking code: added client host checking
- message update
- docu update
- localization added

20010716:
- fixed option -q to not block out usage of multi
  volume support
- docu update
- minor debug message update
- more autoloader sanity checks
- changed status for networking stuff to BETA
  i.e. new configure option "--enable-networking"

20010704:
- fixed possible termination hang on write error
- fixed debugmessage for input thread
- added support for autoloaders
- update for experimental networking code
- docu update

20010703:
- update for debug messages
- update for experimental network code
  (interface selection is now possible,
   hostnames are resolved correctly and more;
   seems like getting stable...)

20010702:
- corrected message for mem-allocation
- added warning message for certain multi-volume use
- enhanced debugging messages
- (hopefully) last bugfix for multi-volume code

20010628:
- added Option -d to use blocksize of output device
  for write (was default behaviour, but isn't needed
  in most cases and slows data transfer down)
- changed statusline (proposal by Dan Hollis)
- minor bugfix for handling read errors (size of
  writable block fragment is now set correctly)
  [probably nobody ever cares anyway]
- updates for experimental networking (configure)

20010626:
- bugfix: mbuffer didn't work anymore with pipes due
  to incorrect set Outsize (0)

20010624:
- added experimental networking code
- bugfix for multivolume-code which might have caused
  problems on devices which have a size which is
  no multiple of Blocksize
- docu update

20010622:
- architecture switches for x86 changed to match gcc-3.0
- 64 Bit updates for huge data amounts
- docu update

20010621:
- bugfix for option -T

20010619:
- multi-volume support is now enabled by default
- minor docu updates
- fix for configure to work on Solaris 5.1

20010528:
- semantic fix for option -p to be consistend with buffer
- bugfix: for dropped blocks in multi-volumen code
- fix for lockup if SIG_BRK is sent during a volume request

20010518:
- Bugfix: multi volume output now should work
	  (bugreport by Dan Hollis)
- docu update
- added some extra checks after running lint...

20010515:
- Docu update concerning usage of multi volume support
- multi volume options consistency checking added

20010509:
- summary is now also displayed upon break and terminate
- Bugfix: summary overflow
- experimental feature: input of multiple volumes

20010507:
- status messages are now printed to the terminal not to stderr
- Bugfix: for output blocksize code
- documentation update
- new: summary information
- experimental feature: output to multiple volumes

20010426:
- Bugfix: fixed sleep, which limited the performace to 1MB/s
          (credits go to Padraig Brady <padraig@antefacto.com>)
- Bugfix: fixed incorrect display of total datatransfer for >2GB
- Cosmetic: on sighup print newline on stderr
- added manpage

20010208:
- Bugfix: option -p did not work
- reworked option flags (-h is now -t, -t is now -T)
- output is now done with the blocksize of the output stream
  otherwise direct writing to a tape device failed under Linux

20010124:
- Bugfix: outputThread terminated too early in certain cases
- Fix for correct termination if an error occured
- added install rule in Makefile
- status messages are now indebendend of other messages
- a little bit more verbose debugging info
