\hypertarget{md_NEWS_autotoc_md11}{}\doxysubsection{librsync 2.\+3.\+4}\label{md_NEWS_autotoc_md11}
Released 2023-\/02-\/19


\begin{DoxyItemize}
\item Fix \#248 by putting {\ttfamily \#include \char`\"{}config.\+h\char`\"{}} with {\ttfamily /$\ast$ IWYU pragma\+: keep $\ast$/} in most {\ttfamily src/$\ast$.c} files. Add {\ttfamily /$\ast$ IWYU pragma\+: keep $\ast$/} to includes in {\ttfamily \mbox{\hyperlink{fileutil_8c_source}{src/fileutil.\+c}}} that are needed on some platforms but not others so we can remove the special exemptions to skip this file for the iwyu and iwyu-\/fix targets in {\ttfamily CMake\+Lists.\+txt}. Also add some typecasts to {\ttfamily rollsum.\mbox{[}ch\mbox{]}} and {\ttfamily \mbox{\hyperlink{patch_8c}{patch.\+c}}} to silence warnings on Windows. (dbaarda, \href{https://github.com/librsync/librsync/pull/249}{\texttt{ https\+://github.\+com/librsync/librsync/pull/249}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md12}{}\doxysubsection{librsync 2.\+3.\+3}\label{md_NEWS_autotoc_md12}
Released 2023-\/02-\/16


\begin{DoxyItemize}
\item Fix \#244 Add windows build to stable release. Updated CONTRIBUTING.\+md release instructions to be clearer and include instructions on how to upload the win64 install artifact from the github \char`\"{}\+Check\char`\"{} action. (dbaarda, \href{https://github.com/librsync/librsync/pull/245}{\texttt{ https\+://github.\+com/librsync/librsync/pull/245}})
\item Update github actions and fix {\ttfamily iwyu} build target. Update {\ttfamily checkout} and {\ttfamily upload-\/artifact} to v3. Update {\ttfamily lint.\+yml} installed packages for fixed iwyu deps. Fix {\ttfamily iwyu} build target to ignore {\ttfamily \mbox{\hyperlink{fileutil_8c_source}{fileutil.\+c}}} and use neater clang output with noisy \char`\"{}note\+:\char`\"{} output removed. Run {\ttfamily make iwyu-\/fix} to fix includes for {\ttfamily tests/rabinkarp\+\_\+perf.\+c}. (dbaarda, \href{https://github.com/librsync/librsync/pull/243}{\texttt{ https\+://github.\+com/librsync/librsync/pull/243}})
\item Add missing word to README.\+md. (AvdN, \href{https://github.com/librsync/librsync/pull/237}{\texttt{ https\+://github.\+com/librsync/librsync/pull/237}})
\item Make delta directly process the input stream if it has enough data. Delta operations will only accumulate data into the internal scoop buffer if the input buffer is too small, otherwise it will process the input directly. This makes delta calculations 5\%$\sim$15\% faster by avoiding extra data copying. (dbaarda, \href{https://github.com/librsync/librsync/pull/234}{\texttt{ https\+://github.\+com/librsync/librsync/pull/234}})
\item Add .gitignore for {\ttfamily .cmake} created by LSP on Windows. (sourcefrog, \href{https://github.com/librsync/librsync/pull/232}{\texttt{ https\+://github.\+com/librsync/librsync/pull/232}})
\item Upload build and install artifacts from Github actions. This means we get downloadable build and install artifacts for all platforms from the \char`\"{}\+Check\char`\"{} action. (sourcefrog, \href{https://github.com/librsync/librsync/pull/231}{\texttt{ https\+://github.\+com/librsync/librsync/pull/231}})
\item Improve documentation so that Doxygen generates more complete documentation with diagrams, renders better, and is more navigable as markdown docs on Git\+Hub. (dbaarda, \href{https://github.com/librsync/librsync/pull/230}{\texttt{ https\+://github.\+com/librsync/librsync/pull/230}})
\item Add github action and make targets for clang-\/tidy and iwyu. Added {\ttfamily clang-\/tidy} and {\ttfamily iwyu} make targets for checking code and includes, and {\ttfamily iwyu-\/fix} for fixing includes. Added {\ttfamily lint.\+yml} Git\+Hub action to run these checks. Fixed all {\ttfamily clang-\/tidy} and {\ttfamily iwyu} warnings except for {\ttfamily \mbox{\hyperlink{fileutil_8c_source}{fileutil.\+c}}} with platform related include complications. Added consistent include guards to all headers. Updated and improved documentation in CONTRIBUTING.\+md to include these changes. (rizsotto, dbaarda, \href{https://github.com/librsync/librsync/pull/229}{\texttt{ https\+://github.\+com/librsync/librsync/pull/229}})
\item Tidy rdiff integration test scripts. Made the filenames and shell arguments for test scripts consistent. (dbaarda, \href{https://github.com/librsync/librsync/pull/227}{\texttt{ https\+://github.\+com/librsync/librsync/pull/227}})
\item Add better cmake build type configuration support. Added {\ttfamily Build\+Type.\+cmake} with better support for selecting the build type and making it default to Debug. (dbaarda, \href{https://github.com/librsync/librsync/pull/226}{\texttt{ https\+://github.\+com/librsync/librsync/pull/226}})
\item Fix \#215 Migrate from Travis to Git\+Hub Actions. Added a check.\+yml Git\+Hub action with updated test/platform matrix including full testing of rdiff on Windows. (rizsotto, dbaarda, \href{https://github.com/librsync/librsync/pull/225}{\texttt{ https\+://github.\+com/librsync/librsync/pull/225}})
\item Fix bash test scripts to work on Windows. Tweaked cmake configuration and bash script tests so that full rdiff tests using libpopt from vcpkg work. Running {\ttfamily cmake -\/-\/target check} with rdiff compiled now works on windows. (dbaarda, \href{https://github.com/librsync/librsync/pull/224}{\texttt{ https\+://github.\+com/librsync/librsync/pull/224}})
\item Remove obsolete unused tests. Removed some obsolete mdfour test data files and {\ttfamily check-\/rdiff} perl script. (dbaarda, \href{https://github.com/librsync/librsync/pull/223}{\texttt{ https\+://github.\+com/librsync/librsync/pull/223}})
\item Fix warning for later CMake versions. New CMake versions started complaining about the filename {\ttfamily Findlibb2.\+cmake} not matching the LIBB2 variables being used. (rizsotto, \href{https://github.com/librsync/librsync/pull/221}{\texttt{ https\+://github.\+com/librsync/librsync/pull/221}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md13}{}\doxysubsection{librsync 2.\+3.\+2}\label{md_NEWS_autotoc_md13}
Released 2021-\/04-\/10


\begin{DoxyItemize}
\item Fix \#214 heap corruption for too small kbloom. This could have crashed delta operations for very small files/signatures. Strangely it didn\textquotesingle{}t seem to cause problems for most compilers/platforms, but did trigger errors for new versions of MSVC. (ljusten, \href{https://github.com/librsync/librsync/pull/213}{\texttt{ https\+://github.\+com/librsync/librsync/pull/213}})
\item Fix \#207 and add Travis Windows checks and improve compatibility. Turn on {\ttfamily -\/Wconversion -\/Wno-\/sign-\/conversion} warnings for clang. Add MSVC compiler flags to turn off posix warnings. Make all code compile clean with no warnings on all Travis platforms. Added cmake config checking for windows {\ttfamily io.\+h} and improve {\ttfamily \mbox{\hyperlink{fileutil_8c_source}{fileutil.\+c}}} for MSVC. Fix broken error handling in {\ttfamily \mbox{\hyperlink{librsync_8h_abc5c16dc95a71e609480a74bc6e128ac}{rs\+\_\+file\+\_\+copy\+\_\+cb()}}}. Improved trace output, making it less spamy and more consistent. Add patch checking for invalid literal lengths. Improve internal variable and argument types. Add explicit type conversions. (dbaarda, \href{https://github.com/librsync/librsync/pull/208}{\texttt{ https\+://github.\+com/librsync/librsync/pull/208}})
\item Fix a bug so patch will now fail returning RS\+\_\+\+CORRUPT on encountering a zero length copy command instead of hanging. Make copy\+\_\+cb() copying more data than requested an assert-\/fail on debug builds, and a log-\/warning for release builds. Make trace output a little less spammy about copy\+\_\+cb() return values. (dbaarda, \href{https://github.com/librsync/librsync/pull/206}{\texttt{ https\+://github.\+com/librsync/librsync/pull/206}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md14}{}\doxysubsection{librsync 2.\+3.\+1}\label{md_NEWS_autotoc_md14}
Released 2020-\/05-\/19


\begin{DoxyItemize}
\item Fix \#198 cmake popt detection using pkg-\/config and \#199 test scripts on Free\+BSD. Fixes and tidies Find\+POPT.\+cmake and Findlibb2.\+cmake to use pkg-\/config correctly and behave more like official Find\+Package() cmake modules. Makes all test scripts use /bin/sh instead of /bin/bash. (dbaarda, mandree \href{https://github.com/librsync/librsync/pull/200}{\texttt{ https\+://github.\+com/librsync/librsync/pull/200}})
\item Change default block\+\_\+len to always be a multiple of the blake2b 128 byte blocksize for efficiency. Tidy and update docs to explain using \mbox{\hyperlink{librsync_8h_a3c4c3fcea2814610109536f3ae029c5e}{rs\+\_\+sig\+\_\+args()}} and \mbox{\hyperlink{librsync_8h_a1c11ff785ebcd7210f5485d0c97fc812}{rs\+\_\+build\+\_\+hash\+\_\+table()}}, add rs\+\_\+file\+\_\+$\ast$() utils, and document new magic types. Remove really obsolete entries in TODO.\+md. Update to Doxygen 1.\+8.\+16. (dbaarda, \href{https://github.com/librsync/librsync/pull/195}{\texttt{ https\+://github.\+com/librsync/librsync/pull/195}})
\item Improve hashtable performance by adding a small optional bloom filter, reducing max loadfactor from 80\% to 70\%, Fix hashcmp\+\_\+count stats to include comparing against empty buckets. This speeds up deltas by 20\%$\sim$50\%. (dbaarda, \href{https://github.com/librsync/librsync/pull/192}{\texttt{ https\+://github.\+com/librsync/librsync/pull/192}}, \href{https://github.com/librsync/librsync/pull/193}{\texttt{ https\+://github.\+com/librsync/librsync/pull/193}}, \href{https://github.com/librsync/librsync/pull/196}{\texttt{ https\+://github.\+com/librsync/librsync/pull/196}})
\item Optimize rabinkarp\+\_\+update() by correctly using unsigned constants and manually unrolling the loop for best performance. (dbaarda, \href{https://github.com/librsync/librsync/pull/191}{\texttt{ https\+://github.\+com/librsync/librsync/pull/191}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md15}{}\doxysubsection{librsync 2.\+3.\+0}\label{md_NEWS_autotoc_md15}
Released 2020-\/04-\/07


\begin{DoxyItemize}
\item Bump minor version from 2.\+2.\+1 to 2.\+3.\+0 to reflect additional \mbox{\hyperlink{librsync_8h_a3c4c3fcea2814610109536f3ae029c5e}{rs\+\_\+sig\+\_\+args()}} and strong\+\_\+len=-\/1 support.
\item Add public \mbox{\hyperlink{librsync_8h_a3c4c3fcea2814610109536f3ae029c5e}{rs\+\_\+sig\+\_\+args()}} function for getting the recommend signature args from the file size. Added support to rdiff for {\ttfamily -\/-\/sum-\/size=-\/1} to indicate \char`\"{}use minimum size safe against random block collisions\char`\"{}. Added warning output for sum-\/sizes that are too small to be safe. Fixed possible rdiff bug affecting popt parsing on non-\/little-\/endian platforms. (dbaarda, \href{https://github.com/librsync/librsync/pull/109}{\texttt{ https\+://github.\+com/librsync/librsync/pull/109}})
\item Fixed yet more compiler warnings for various platforms/compilers. (Adsun701, texierp, \href{https://github.com/librsync/librsync/pull/187}{\texttt{ https\+://github.\+com/librsync/librsync/pull/187}}, \href{https://github.com/librsync/librsync/pull/188}{\texttt{ https\+://github.\+com/librsync/librsync/pull/188}})
\item Improved cmake popt handling to find popt dependencies using Pkg\+Config. (ffontaine, \href{https://github.com/librsync/librsync/pull/186}{\texttt{ https\+://github.\+com/librsync/librsync/pull/186}})
\item Tidied internal code and improved tests for netint.\mbox{[}ch\mbox{]}, \mbox{\hyperlink{tube_8c}{tube.\+c}}, and \mbox{\hyperlink{hashtable_8h}{hashtable.\+h}}. (dbaarda, \href{https://github.com/librsync/librsync/pull/183}{\texttt{ https\+://github.\+com/librsync/librsync/pull/183}} \href{https://github.com/librsync/librsync/pull/185}{\texttt{ https\+://github.\+com/librsync/librsync/pull/185}}).
\item Improved C99 compatibility. Add {\ttfamily -\/std=c99 -\/pedantic} to {\ttfamily CMAKE\+\_\+\+C\+\_\+\+FLAGS} for gcc and clang. Fix all C99 warnings by making all code C99 compliant. Tidy all CMake checks, {\ttfamily \#cmakedefines}, and {\ttfamily \#includes}. Fix 64bit support for mdfour checksums (texierp, dbaarda, \href{https://github.com/librsync/librsync/pull/181}{\texttt{ https\+://github.\+com/librsync/librsync/pull/181}}, \href{https://github.com/librsync/librsync/pull/182}{\texttt{ https\+://github.\+com/librsync/librsync/pull/182}})
\item Usage clarified in rdiff (1) man page. (Aaron\+M04, \href{https://github.com/librsync/librsync/pull/180}{\texttt{ https\+://github.\+com/librsync/librsync/pull/180}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md16}{}\doxysubsection{librsync 2.\+2.\+1}\label{md_NEWS_autotoc_md16}
Released 2019-\/10-\/16


\begin{DoxyItemize}
\item Fix \#176 hangs calculating deltas for files larger than 4GB. (dbaarda, \href{https://github.com/librsync/librsync/pull/177}{\texttt{ https\+://github.\+com/librsync/librsync/pull/177}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md17}{}\doxysubsection{librsync 2.\+2.\+0}\label{md_NEWS_autotoc_md17}
Released 2019-\/10-\/12


\begin{DoxyItemize}
\item Bump minor version from 2.\+1.\+0 to 2.\+2.\+0 to reflect additional Rabin\+Karp rollsum support.
\item Fix MSVC builds by adding missing LIBRSYNC\+\_\+\+EXPORT to variables in \mbox{\hyperlink{librsync_8h}{librsync.\+h}}, add -\/DLIBRSYNC\+\_\+\+STATIC\+\_\+\+DEFINE to the sumset\+\_\+test target, and correctly install .dll files in the bin directory. (adsun701, \href{https://github.com/librsync/librsync/pull/161}{\texttt{ https\+://github.\+com/librsync/librsync/pull/161}})
\item Add Rabin\+Karp rollsum support and make it the default. Rabin\+Karp is a much better rolling hash, which reduces the risk of hash collision corruption and speeds up delta calculations. The rdiff cmd gets a new {\ttfamily -\/R (rollsum$\vert$rabinkarp)} argument with the default being {\ttfamily rabinkarp}, Use {\ttfamily -\/R rollsum} to generate backwards-\/compatible signatures. (dbaarda, \href{https://github.com/librsync/librsync/issues/3}{\texttt{ https\+://github.\+com/librsync/librsync/issues/3}})
\item Use single-\/byte literal commands for small inserts in deltas. This makes each small insert use 1 less byte in deltas. (dbaarda, \href{https://github.com/librsync/librsync/issues/120}{\texttt{ https\+://github.\+com/librsync/librsync/issues/120}})
\item Fix multiple warnings (cross-\/)compiling for windows. (Adsun701, \href{https://github.com/librsync/librsync/pull/165}{\texttt{ https\+://github.\+com/librsync/librsync/pull/165}}, \href{https://github.com/librsync/librsync/pull/166}{\texttt{ https\+://github.\+com/librsync/librsync/pull/166}})
\item Change \mbox{\hyperlink{librsync_8h_a55023ca0d195fa10eedeb8a4865b1e1e}{rs\+\_\+file\+\_\+size()}} to report -\/1 instead of 0 for unknown file sizes (not a regular file). (dbaarda \href{https://github.com/librsync/librsync/pull/168}{\texttt{ https\+://github.\+com/librsync/librsync/pull/168}})
\item Add cmake BUILD\+\_\+\+SHARED\+\_\+\+LIBS option for static library support. BUILD\+\_\+\+SHARED\+\_\+\+LIBS defaults to ON, and can be set to OFF using {\ttfamily ccmake .} to build librsync as a static library. (dbaarda \href{https://github.com/librsync/librsync/pull/169}{\texttt{ https\+://github.\+com/librsync/librsync/pull/169}})
\item Fix compile errors and add .gitignore entries for MSVS 2019. Fixes \mbox{\hyperlink{hashtable_8h}{hashtable.\+h}} to be C99 compliant. (ardovm \href{https://github.com/librsync/librsync/pull/170}{\texttt{ https\+://github.\+com/librsync/librsync/pull/170}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md18}{}\doxysubsection{librsync 2.\+1.\+0}\label{md_NEWS_autotoc_md18}
Released 2019-\/08-\/19


\begin{DoxyItemize}
\item Bump minor version from 2.\+0.\+3 to 2.\+1.\+0 to reflect additions to \mbox{\hyperlink{librsync_8h}{librsync.\+h}}.
\item Fix exporting of private symbols from librsync library. Add export of useful large file functions {\ttfamily \mbox{\hyperlink{librsync_8h_a32b683c0763df3ce8054158232c07fe0}{rs\+\_\+file\+\_\+open()}}}, {\ttfamily \mbox{\hyperlink{librsync_8h_a2521aba7896b229e372a2758c0135d3c}{rs\+\_\+file\+\_\+close()}}}, and {\ttfamily \mbox{\hyperlink{librsync_8h_a55023ca0d195fa10eedeb8a4865b1e1e}{rs\+\_\+file\+\_\+size()}}} to \mbox{\hyperlink{librsync_8h}{librsync.\+h}}. Add export of {\ttfamily \mbox{\hyperlink{librsync_8h_a3b554ee23fa3c5f06a7808f55aedf985}{rs\+\_\+signature\+\_\+log\+\_\+stats()}}} to log signature hashtable hit/miss stats. Improve rdiff error output. (dbaarda, \href{https://github.com/librsync/librsync/issues/130}{\texttt{ https\+://github.\+com/librsync/librsync/issues/130}})
\item Updated release process to include stable tarballs. (dbaarda, \href{https://github.com/librsync/librsync/issues/146}{\texttt{ https\+://github.\+com/librsync/librsync/issues/146}})
\item Remove redundant and broken {\ttfamily -\/-\/paranoia} argument from rdiff. (dbaarda, \href{https://github.com/librsync/librsync/issues/155}{\texttt{ https\+://github.\+com/librsync/librsync/issues/155}})
\item Fix memory leak of {\ttfamily rs\+\_\+signature\+\_\+t-\/\texorpdfstring{$>$}{>}block\+\_\+sigs} when freeing signatures. (telles-\/simbiose, \href{https://github.com/librsync/librsync/pull/147}{\texttt{ https\+://github.\+com/librsync/librsync/pull/147}})
\item Document delta file format. (zmj, \href{https://github.com/librsync/librsync/issues/46}{\texttt{ https\+://github.\+com/librsync/librsync/issues/46}})
\item Fix up doxygen comments. (dbaarda, \href{https://github.com/librsync/librsync/pull/151}{\texttt{ https\+://github.\+com/librsync/librsync/pull/151}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md19}{}\doxysubsection{librsync 2.\+0.\+2}\label{md_NEWS_autotoc_md19}
Released 2018-\/02-\/27


\begin{DoxyItemize}
\item Improve CMake install paths configuration (w\+RAR, \href{https://github.com/librsync/librsync/pull/133}{\texttt{ https\+://github.\+com/librsync/librsync/pull/133}}) and platform support checking when cross-\/compiling (fornwall, \href{https://github.com/librsync/librsync/pull/136}{\texttt{ https\+://github.\+com/librsync/librsync/pull/136}}).
\item Fix Unaligned memory access for rs\+\_\+block\+\_\+sig\+\_\+init() (dbaarda, \href{https://github.com/librsync/librsync/issues/135}{\texttt{ https\+://github.\+com/librsync/librsync/issues/135}}).
\item Fix hashtable\+\_\+test.\+c name collision for key\+\_\+t in sys/types.\+h on some platforms (dbaarda, \href{https://github.com/librsync/librsync/issues/134}{\texttt{ https\+://github.\+com/librsync/librsync/issues/134}})
\item Format code with consistent style, adding {\ttfamily make tidy} and {\ttfamily make tidyc} targets for reformating code and comments. (dbaarda, \href{https://github.com/librsync/librsync/issues/125}{\texttt{ https\+://github.\+com/librsync/librsync/issues/125}})
\item Removed perl as a build dependency. Note it is still required for some tests. (dbaarda, \href{https://github.com/librsync/librsync/issues/75}{\texttt{ https\+://github.\+com/librsync/librsync/issues/75}})
\item Update RPM spec file for v2.\+0.\+2 and fix cmake man page install. (deajan, \href{https://github.com/librsync/librsync/issues/47}{\texttt{ https\+://github.\+com/librsync/librsync/issues/47}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md20}{}\doxysubsection{librsync 2.\+0.\+1}\label{md_NEWS_autotoc_md20}
Released 2017-\/10-\/17


\begin{DoxyItemize}
\item Extensively reworked Doxygen documentation, now available at \href{http://librsync.sourcefrog.net/}{\texttt{ http\+://librsync.\+sourcefrog.\+net/}} (Martin Pool)
\item Removed some declarations from \mbox{\hyperlink{librsync_8h}{librsync.\+h}} that were unimplemented or no longer ever useful\+: {\ttfamily rs\+\_\+work\+\_\+options}, {\ttfamily rs\+\_\+accum\+\_\+value}. Remove declaration of unimplemented {\ttfamily rs\+\_\+mdfour\+\_\+file()}. (Martin Pool)
\item Remove shipped {\ttfamily snprintf} code\+: no longer acutally linked after changing to CMake, and since it\textquotesingle{}s part of C99 it should be widely available. (Martin Pool)
\item Document that Ninja (\href{http://ninja-build.org/}{\texttt{ http\+://ninja-\/build.\+org/}}) is supported under CMake. It\textquotesingle{}s a bit faster and nicer than Make. (Martin Pool)
\item {\ttfamily make check} (or {\ttfamily ninja check} etc) will now build and run the tests. Previously due to a CMake limitation, {\ttfamily make test} would only run existing tests and could fail if they weren\textquotesingle{}t built. (Martin Pool, \href{https://github.com/librsync/librsync/issues/49}{\texttt{ https\+://github.\+com/librsync/librsync/issues/49}})
\item Added cmake options to exclude rdiff target and compression from build. See install documentation for details. Thanks to Michele Bertasi.
\item {\ttfamily popt} is only needed when {\ttfamily rdiff} is being built. (gulikoza)
\item Improved large file support for platforms using different variants of {\ttfamily fseek} ({\ttfamily fseeko}, {\ttfamily fseeko64}, {\ttfamily \+\_\+fseeki64}), {\ttfamily fstat} ({\ttfamily fstat64}, {\ttfamily \+\_\+fstati64}), and {\ttfamily fileno} ({\ttfamily \+\_\+fileno}). (dbaarda, charlievieth, gulikoza, marius-\/nicolae)
\item {\ttfamily rdiff -\/s} option now shows bytes read/written and speed. (gulikoza). For delta operations it also shows hashtable match statistics. (dbaarda)
\item Running rdiff should not overwrite existing files (signatures, deltas and new patched files) by default. If the destination file exists, rdiff will now exit with an error. Add new option -\/f (--force) to overwrite existing files. (gulikoza)
\item Improve signature memory allocation (doubling size instead of calling realloc for every sig block) and added support for preallocation. See streaming.\+md job-\/\texorpdfstring{$>$}{>}estimated\+\_\+signature\+\_\+count for usage when using the library. {\ttfamily rdiff} uses this by default if possible. (gulikoza, dbaarda)
\item Significantly tidied signature handling code and testing, resulting in more consistent error handling behaviour, and making it easier to plug in alternative weak and strong sum implementations. Also fixed \char`\"{}slack delta\char`\"{} support for delta calculation with no signature. (dbaarda)
\item {\ttfamily stdint.\+h} and {\ttfamily inttypes.\+h} from C99 is now required. Removed redundant librsync-\/config.\+h header file. (dbaarda)
\item Lots of small fixes for windows platforms and building with MSVC. (lasalvavida, mbrt, dbaarda)
\item New open addressing hashtable implementation that significantly speeds up delta operations, particularly for large files. Also fixed degenerate behaviour with large number of duplicate blocks like runs of zeros in sparse files. (dbaarda)
\item Optional support with cmake option for using libb2 blake2 implementation. Also updated included reference blake2 implementation with bug fixes (dbaarda).
\item Improved default values for input and output buffer sizes. The defaults are now --input-\/size=0 and --output-\/size=0, which will choose recommended default sizes based on the --block-\/size and the operation being performed. (dbaarda)
\item Fixed hanging for truncated input files. It will now correctly report an error indicating an unexpected EOF was encountered. (dbaarda, \href{https://github.com/librsync/librsync/issues/32}{\texttt{ https\+://github.\+com/librsync/librsync/issues/32}})
\item Fixed \#13 so that faster slack delta\textquotesingle{}s are used for signatures of empty files. (dbaarda, \href{https://github.com/librsync/librsync/issues/13}{\texttt{ https\+://github.\+com/librsync/librsync/issues/13}})
\item Fixed \#33 so \mbox{\hyperlink{librsync_8h_aede8e0f42424b9aa29093f94b59ea029}{rs\+\_\+job\+\_\+iter()}} doesn\textquotesingle{}t need calling twice with eof=1. Also tidied and optimized it a bit. (dbaarda, \href{https://github.com/librsync/librsync/issues/33}{\texttt{ https\+://github.\+com/librsync/librsync/issues/33}})
\item Fixed \#55 remove excessive rs\+\_\+fatal() calls, replacing checks for programming errors with assert statements. Now rs\+\_\+fatal() will only be called for rare unrecoverable fatal errors like malloc failures or impossibly large inputs. (dbaarda, \href{https://github.com/librsync/librsync/issues/55}{\texttt{ https\+://github.\+com/librsync/librsync/issues/55}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md21}{}\doxysubsection{librsync 2.\+0.\+0}\label{md_NEWS_autotoc_md21}
Released 2015-\/11-\/29

Note\+: despite the major version bump, this release has few changes and should be binary and API compatible with the previous version.


\begin{DoxyItemize}
\item Bump librsync version number to 2.\+0, to match the library soname/dylib version. (Martin Pool, \href{https://github.com/librsync/librsync/issues/48}{\texttt{ https\+://github.\+com/librsync/librsync/issues/48}})
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md22}{}\doxysubsection{librsync 1.\+0.\+1 (2015-\/11-\/21)}\label{md_NEWS_autotoc_md22}

\begin{DoxyItemize}
\item Better performance on large files. (Victor\+Denisov)
\item Add comment on usage of \mbox{\hyperlink{librsync_8h_a1c11ff785ebcd7210f5485d0c97fc812}{rs\+\_\+build\+\_\+hash\+\_\+table()}}, and assert correct use. Callers must call \mbox{\hyperlink{librsync_8h_a1c11ff785ebcd7210f5485d0c97fc812}{rs\+\_\+build\+\_\+hash\+\_\+table()}} after loading the signature, and before calling \mbox{\hyperlink{delta_8c_a59fe8536218632417097d084606bb675}{rs\+\_\+delta\+\_\+begin()}}. Thanks to Paul Harris \href{mailto:paulharris@computer.org}{\texttt{ paulharris@computer.\+org}}
\item Switch from autoconf to CMake.

Thanks to Adam Schubert.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md23}{}\doxysubsection{librsync 1.\+0.\+0 (2015-\/01-\/23)}\label{md_NEWS_autotoc_md23}

\begin{DoxyItemize}
\item SECURITY\+: CVE-\/2014-\/8242\+: librsync previously used a truncated MD4 \char`\"{}strong\char`\"{} check sum to match blocks. However, MD4 is not cryptographically strong. It\textquotesingle{}s possible that an attacker who can control the contents of one part of a file could use it to control other regions of the file, if it\textquotesingle{}s transferred using librsync/rdiff. For example this might occur in a database, mailbox, or VM image containing some attacker-\/controlled data.

To mitigate this issue, signatures will by default be computed with a 256-\/bit BLAKE2 hash. Old versions of librsync will complain about a bad magic number when given these signature files.

Backward compatibility can be obtained using the new {\ttfamily rdiff sig -\/-\/hash=md4} option or through specifying the \char`\"{}signature magic\char`\"{} in the API, but this should not be used when either the old or new file contain untrusted data.

Deltas generated from those signatures will also use BLAKE2 during generation, but produce output that can be read by old versions.

See \href{https://github.com/librsync/librsync/issues/5}{\texttt{ https\+://github.\+com/librsync/librsync/issues/5}}

Thanks to Michael Samuel \texorpdfstring{$<$}{<}miknet.\+net\texorpdfstring{$>$}{>} for reporting this and offering an initial patch.
\item Various build fixes, thanks Timothy Gu.
\item Improved rdiff man page from Debian.
\item Improved librsync.\+spec file for building RPMs.
\item Fixed bug \#1110812 \textquotesingle{}internal error\+: job made no progress\textquotesingle{}; on large files.
\item Moved hosting to \href{https://github.com/librsync/librsync/}{\texttt{ https\+://github.\+com/librsync/librsync/}}
\item Travis-\/\+CI.\+org integration test at \href{https://travis-ci.org/librsync/librsync/}{\texttt{ https\+://travis-\/ci.\+org/librsync/librsync/}}
\item You can set {\ttfamily \$\+LIBTOOLIZE} before running {\ttfamily autogen.\+sh}, for example on OS X Homebrew where it is called {\ttfamily glibtoolize}.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md24}{}\doxysubsection{0.\+9.\+7 (released 2004-\/10-\/10)}\label{md_NEWS_autotoc_md24}

\begin{DoxyItemize}
\item Yet more large file support fixes.
\item {\ttfamily extern \char`\"{}\+C\char`\"{}} guards in \mbox{\hyperlink{librsync_8h}{librsync.\+h}} to let it be used from C++.
\item Removed Debian files from dist tarball.
\item Changed rdiff to an installed program on \char`\"{}make install\char`\"{}.
\item Refactored delta calculation code to be cleaner and faster.
\item \#879763\+: Fixed mdfour to work on little-\/endian machines which don\textquotesingle{}t like unaligned word access. This should make librsync work on pa-\/risc, and it makes it slightly faster on ia64.
\item \#1022764\+: Fix corrupted encoding of some COPY commands in large files.
\item \#1024881\+: Print long integers directly, rather than via casts to double.
\item Fix printf formats for size\+\_\+t\+: both the format and the argument should be cast to long.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md25}{}\doxysubsection{0.\+9.\+6}\label{md_NEWS_autotoc_md25}

\begin{DoxyItemize}
\item Large file support fixes.
\item \mbox{[}v\mbox{]}snprintf or \+\_\+\mbox{[}v\mbox{]}snprintf autoconf replacement function fix.
\item Changed installed include file from rsync.\+h to \mbox{\hyperlink{librsync_8h}{librsync.\+h}}.
\item Migration to sourceforge for hosting.
\item \mbox{\hyperlink{structRollsum}{Rollsum}} bugfix that produces much smaller deltas.
\item Memory leaks bugfix patches.
\item mdfour bigendian and \texorpdfstring{$>$}{>}512M bugfix, plus optimisations patch.
\item autoconf/automake updates and cleanups for autoconf 2.\+53.
\item Windows compilation patch, heavily modified.
\item Mac\+OSX compilation patch, modified to autoconf vararg macro fix.
\item Debian package build scripts patch.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md26}{}\doxysubsection{0.\+9.\+5}\label{md_NEWS_autotoc_md26}

\begin{DoxyItemize}
\item Bugfix patch from Shirish Hemant Phatak
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md27}{}\doxysubsection{0.\+9.\+4\+: (library 1.\+1.\+0)}\label{md_NEWS_autotoc_md27}

\begin{DoxyItemize}
\item Fixes for rsync.\+h from Thorsten Schuett \href{mailto:thorsten.schuett@zib.de}{\texttt{ thorsten.\+schuett@zib.\+de}}
\item RLL encoding fix from Shirish Hemant Phatak \href{mailto:shirish@nustorage.com}{\texttt{ shirish@nustorage.\+com}}
\item RPM spec file by Peter J. Braam \href{mailto:braam@clusterfs.com}{\texttt{ braam@clusterfs.\+com}}
\item No (intentional) changes to binary API.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md28}{}\doxysubsection{0.\+9.\+3}\label{md_NEWS_autotoc_md28}

\begin{DoxyItemize}
\item Big speed improvements in MD4 routines and generation of weak checksums.
\item Patch to build on Free\+BSD by Jos Backus \href{mailto:josb@cncdsl.com}{\texttt{ josb@cncdsl.\+com}}
\item Suggestions to build on Solaris 2.\+6 from Alberto Accomazzi \href{mailto:aaccomazzi@cfa.harvard.edu}{\texttt{ aaccomazzi@cfa.\+harvard.\+edu}}
\item Add rs\+\_\+job\+\_\+drive, a generic mechanism for turning the library into blocking mode. rs\+\_\+whole\+\_\+run now builds on top of this. The filebuf interface has changed a little to accomodate it.
\item Generating and loading signatures now generates statistics.
\item More test cases.
\item I suspect there may be a bug in rolling checksums, but it probably only causes inefficiency and not corruption.
\item Portability fixes for alphaev67-\/dec-\/osf5.\+1; at the moment builds but does not work because librsync tries to do unaligned accesses.
\item Works on sparc64-\/unknown-\/linux-\/gnu (Debian/2.\+2)
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md29}{}\doxysubsection{0.\+9.\+2}\label{md_NEWS_autotoc_md29}

\begin{DoxyItemize}
\item Improve delta algorithm so that deltas are actually delta-\/compressed, rather than faked.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md30}{}\doxysubsection{0.\+9.\+1}\label{md_NEWS_autotoc_md30}

\begin{DoxyItemize}
\item Rename the library to `librsync'.
\item Portability fixes.
\item Include the popt library, and use it to build rdiff if the library is not present on the host.
\item Add file(1) magic for rdiff.
\item Add more to the manual pages.
\item It\textquotesingle{}s no longer necessary to call rs\+\_\+buffers\+\_\+init on a stream before starting to use it\+: all the internal data is kept in the job, not in the stream.
\item Rename rs\+\_\+stream\+\_\+t to rs\+\_\+buffers\+\_\+t, a more obvious name. Pass the buffers to every \mbox{\hyperlink{librsync_8h_aede8e0f42424b9aa29093f94b59ea029}{rs\+\_\+job\+\_\+iter()}} call, rather than setting it at startup. Similarly for all the \+\_\+begin() functions.
\item rs\+\_\+job\+\_\+new also takes the initial state function.
\item Return RS\+\_\+\+PARAM\+\_\+\+ERROR when library is misused.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md31}{}\doxysubsection{0.\+9.\+0}\label{md_NEWS_autotoc_md31}

\begin{DoxyItemize}
\item Redesign API to be more like zlib/bzlib.
\item Put all command-\/line functions into a single rdiff(1) program.
\item New magic number `rs6'
\item Change to using popt for command line parsing.
\item Use Doxygen for API documentation.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md32}{}\doxysubsection{0.\+5.\+7}\label{md_NEWS_autotoc_md32}

\begin{DoxyItemize}
\item Changes stats string format.
\item Slightly improved test cases
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md33}{}\doxysubsection{0.\+5.\+6}\label{md_NEWS_autotoc_md33}

\begin{DoxyItemize}
\item Don\textquotesingle{}t install debugging tools into /usr/local/bin; leave them in the source directory.
\item Fix libhsync to build on (sgi-\/mips, IRIX64, gcc, GNU Make)
\item Include README.\+CVS in tarball
\item Back out of using libtool and shared libraries, as it is unnecessary at this stage, complicates installation and slows down compilation.
\item Use mapptr when reading data to decode, so that decoding should have less latency and be more reliable.
\item Cope better on systems that are missing functions like snprintf.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md34}{}\doxysubsection{0.\+5.\+5}\label{md_NEWS_autotoc_md34}

\begin{DoxyItemize}
\item Put genuine search encoding back into the nad algorithm, and further clean up the nad code. Literals are now sent out using a literal buffer integrated with the input mapptr so that data is not copied. Checksums are still calculated from scratch each time rather than by rolling -- this is very slow but simple.
\item Reshuffle test cases so that they use files generated by hsmapread, rather than the source directory. This makes the tests quicker and more reproducible, hopefully without losing coverage. Further develop the test driver framework.
\item Add hsdumpsums debugging tool.
\item Hex strings (eg strong checksums) are broken up by underscores for readability.
\item Stats now go to the log rather than stdout.
\item mapptr acts properly when we\textquotesingle{}re skipping/rewinding to data already present in the buffer -- it does a copy if required, but not necessarily real IO.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md35}{}\doxysubsection{0.\+5.\+4}\label{md_NEWS_autotoc_md35}

\begin{DoxyItemize}
\item Improved mapptr input code
\item Turn on more warnings if using gcc
\item More test cases
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md36}{}\doxysubsection{0.\+5.\+3}\label{md_NEWS_autotoc_md36}

\begin{DoxyItemize}
\item Improvements to mapptr to make it work better for network IO.
\item Debug trace code is compiled in unless turned off in ./configure (although most programs will not write it out unless asked.)
\item Add libhsyncinfo program to show compiled-\/in settings and version.
\item Add test cases that run across localhost TCP sockets.
\item Improved build code; should now build easily from CVS through autogen.\+sh.
\item Improved trace code.
\item Clean up to build on sparc-\/sun-\/solaris2.\+8, and in the process clean up the handling of bytes vs chars, and of building without gcc
\item Reverse build scripts so that driver.\+sh calls the particular script.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md37}{}\doxysubsection{0.\+5.\+2}\label{md_NEWS_autotoc_md37}

\begin{DoxyItemize}
\item Use mapptr for input.
\item Implement a new structure for encoding in nad.\+c. It doesn\textquotesingle{}t encode at the moment, but it\textquotesingle{}s much more maintainable.
\item More regression cases.
\item Clean up build process.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md38}{}\doxysubsection{0.\+5.\+0}\label{md_NEWS_autotoc_md38}

\begin{DoxyItemize}
\item Rewrite hs\+\_\+inbuf and hs\+\_\+encode to make them simpler and more reliable.
\item Test cases for input handling.
\item Use the map\+\_\+ptr idea for input from both streams and files.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md39}{}\doxysubsection{0.\+4.\+1}\label{md_NEWS_autotoc_md39}

\begin{DoxyItemize}
\item automake/autoconf now works cleanly when the build directory is different to the source directory.
\item --enable-\/ccmalloc works again.
\end{DoxyItemize}\hypertarget{md_NEWS_autotoc_md40}{}\doxysubsection{0.\+4.\+0}\label{md_NEWS_autotoc_md40}

\begin{DoxyItemize}
\item A much better regression suite.
\item CHECKSUM token includes the file\textquotesingle{}s checksum up to the current location, to aid in self-\/testing.
\item Various bug fixes, particularly to do with short IO returns. 
\end{DoxyItemize}