\doxysubsection{librsync.\+h File Reference}
\label{librsync_8h}\index{librsync.h@{librsync.h}}


Public header for librsync.  


Include dependency graph for librsync.\+h\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{librsync_8h__incl}
\end{center}
\end{figure}
This graph shows which files directly or indirectly include this file\+:\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{librsync_8h__dep__incl}
\end{center}
\end{figure}
\doxysubsubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \mbox{\hyperlink{structrs__stats}{rs\+\_\+stats}}
\begin{DoxyCompactList}\small\item\em Performance statistics from a librsync encoding or decoding operation. \end{DoxyCompactList}\item 
struct \mbox{\hyperlink{structrs__buffers__s}{rs\+\_\+buffers\+\_\+s}}
\begin{DoxyCompactList}\small\item\em Description of input and output buffers. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{librsync_8h_af7a156819e967be6c9c93a380111d5f4}{RS\+\_\+\+MAX\+\_\+\+STRONG\+\_\+\+SUM\+\_\+\+LENGTH}}~32
\item 
\#define \mbox{\hyperlink{librsync_8h_a93340842ff428fa0c834461121bc96f9}{RS\+\_\+\+DEFAULT\+\_\+\+BLOCK\+\_\+\+LEN}}~2048
\begin{DoxyCompactList}\small\item\em Default block length, if not determined by any other factors. \end{DoxyCompactList}\item 
\#define \mbox{\hyperlink{librsync_8h_ac096941ff0dcb51ae14ef447900fe5d3}{RS\+\_\+\+DEFAULT\+\_\+\+MIN\+\_\+\+STRONG\+\_\+\+LEN}}~12
\begin{DoxyCompactList}\small\item\em Default minimum strong sum length, if the filesize is unknown. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef uint8\+\_\+t \mbox{\hyperlink{librsync_8h_afc803cb54dc6e7298745a068a85ed018}{rs\+\_\+byte\+\_\+t}}
\item 
typedef intmax\+\_\+t \mbox{\hyperlink{librsync_8h_a5b014815c61f51b3ce19807499216dd2}{rs\+\_\+long\+\_\+t}}
\item 
typedef void \mbox{\hyperlink{librsync_8h_a764a02859f292e5df72b9f948a335712}{rs\+\_\+trace\+\_\+fn\+\_\+t}}(\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}} level, char const $\ast$msg)
\begin{DoxyCompactList}\small\item\em Callback to write out log messages. \end{DoxyCompactList}\item 
typedef enum \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_adec85b529224f0240ae1afccff827462}{rs\+\_\+result}}
\begin{DoxyCompactList}\small\item\em Return codes from nonblocking rsync operations. \end{DoxyCompactList}\item 
typedef struct \mbox{\hyperlink{structrs__stats}{rs\+\_\+stats}} \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}}
\begin{DoxyCompactList}\small\item\em Performance statistics from a librsync encoding or decoding operation. \end{DoxyCompactList}\item 
typedef struct \mbox{\hyperlink{structrs__mdfour}{rs\+\_\+mdfour}} \mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}}
\begin{DoxyCompactList}\small\item\em MD4 message-\/digest accumulator. \end{DoxyCompactList}\item 
typedef uint32\+\_\+t \mbox{\hyperlink{librsync_8h_a3371d4706d85f20cdd08ac2fc1dd0e43}{rs\+\_\+weak\+\_\+sum\+\_\+t}}
\item 
typedef unsigned char \mbox{\hyperlink{librsync_8h_a13b59d2eea77e89feff6d9e3a8f7a3f4}{rs\+\_\+strong\+\_\+sum\+\_\+t}}\mbox{[}RS\+\_\+\+MAX\+\_\+\+STRONG\+\_\+\+SUM\+\_\+\+LENGTH\mbox{]}
\item 
typedef struct \mbox{\hyperlink{structrs__signature}{rs\+\_\+signature}} \mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}}
\begin{DoxyCompactList}\small\item\em The signature datastructure type. \end{DoxyCompactList}\item 
typedef struct \mbox{\hyperlink{structrs__buffers__s}{rs\+\_\+buffers\+\_\+s}} \mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}}
\item 
typedef struct \mbox{\hyperlink{structrs__job}{rs\+\_\+job}} \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}}
\begin{DoxyCompactList}\small\item\em Job of work to be done. \end{DoxyCompactList}\item 
typedef \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_ae06d064f9f33a459a589d2eb1fb5b6bc}{rs\+\_\+driven\+\_\+cb}}(\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$job, \mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}} $\ast$buf, void $\ast$opaque)
\begin{DoxyCompactList}\small\item\em Type of application-\/supplied function for \mbox{\hyperlink{librsync_8h_a85d48e8216b848b9757a076f829ac4a8}{rs\+\_\+job\+\_\+drive()}}. \end{DoxyCompactList}\item 
typedef \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_afc4bc64a627d7ca181a7e813832313cc}{rs\+\_\+copy\+\_\+cb}}(void $\ast$opaque, rs\+\_\+long\+\_\+t pos, size\+\_\+t $\ast$len, void $\ast$$\ast$buf)
\begin{DoxyCompactList}\small\item\em Callback used to retrieve parts of the basis file. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}} \{ \newline
\mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a6ea14f19962e693df77d1ba569f2711d}{RS\+\_\+\+DELTA\+\_\+\+MAGIC}} = 0x72730236
, \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a4c1b7d1c36157c54225147b830b3e95a}{RS\+\_\+\+MD4\+\_\+\+SIG\+\_\+\+MAGIC}} = 0x72730136
, \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a3a4244db382bebe6bc34b62d2f4cc816}{RS\+\_\+\+BLAKE2\+\_\+\+SIG\+\_\+\+MAGIC}} = 0x72730137
, \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a96688c67926b018f046c36bdb402ebbf}{RS\+\_\+\+RK\+\_\+\+MD4\+\_\+\+SIG\+\_\+\+MAGIC}} = 0x72730146
, \newline
\mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a82d44c23687a5a33c2ea83b263bb2d3a}{RS\+\_\+\+RK\+\_\+\+BLAKE2\+\_\+\+SIG\+\_\+\+MAGIC}} = 0x72730147
 \}
\begin{DoxyCompactList}\small\item\em A uint32 magic number, emitted in bigendian/network order at the start of librsync files. \end{DoxyCompactList}\item 
enum \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}} \{ \newline
\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa02061035a01b5ef687e246b60984e125}{RS\+\_\+\+LOG\+\_\+\+EMERG}} = 0
, \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffaacb3b9720c32deecc167c3a4fa0ce7db}{RS\+\_\+\+LOG\+\_\+\+ALERT}} = 1
, \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffabb9fce001c260b228f18ef413246747d}{RS\+\_\+\+LOG\+\_\+\+CRIT}} = 2
, \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa3be8f6c4bc775d06b990f1c30b3fba42}{RS\+\_\+\+LOG\+\_\+\+ERR}} = 3
, \newline
\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffaaad731f1e5bdf374e40d486ace54e21a}{RS\+\_\+\+LOG\+\_\+\+WARNING}} = 4
, \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa8f2b32b0048544f4c9694b7b150221d8}{RS\+\_\+\+LOG\+\_\+\+NOTICE}} = 5
, \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffaf67a230a41302584eb67b9c7ccec3f62}{RS\+\_\+\+LOG\+\_\+\+INFO}} = 6
, \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa1527bfcd19a3e2ffcf14d8c80e32b4c6}{RS\+\_\+\+LOG\+\_\+\+DEBUG}} = 7
 \}
\begin{DoxyCompactList}\small\item\em Log severity levels. \end{DoxyCompactList}\item 
enum \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \{ \newline
\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a739063053a289b5c3393d78cc77b41b2}{RS\+\_\+\+DONE}} = 0
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253af2d289bbc65678b4b00f56a2e6632957}{RS\+\_\+\+BLOCKED}} = 1
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a5366e53561c2ec9a897470535ea0139c}{RS\+\_\+\+RUNNING}} = 2
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a130fc0bdeb6ce6ed496f07a02146f0a5}{RS\+\_\+\+TEST\+\_\+\+SKIPPED}} = 77
, \newline
\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253af510cfd1ede72dbfea416d3f295e6c6f}{RS\+\_\+\+IO\+\_\+\+ERROR}} = 100
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253ac562bd33fecdc9ab03d32c2471f1bdc9}{RS\+\_\+\+SYNTAX\+\_\+\+ERROR}} = 101
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a403296529c4ba1653612438dd7ba9a34}{RS\+\_\+\+MEM\+\_\+\+ERROR}} = 102
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253aa997432dc2d2c8256ad41f96267a5185}{RS\+\_\+\+INPUT\+\_\+\+ENDED}} = 103
, \newline
\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253ada22c2fc95695e6f9558da6bcca53749}{RS\+\_\+\+BAD\+\_\+\+MAGIC}} = 104
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a639e01179ce01c707606a8e50bf5a6aa}{RS\+\_\+\+UNIMPLEMENTED}} = 105
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a897ee702e0324d286881f6b8391ea340}{RS\+\_\+\+CORRUPT}} = 106
, \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253ade41976437317deebdec5b27f7b39655}{RS\+\_\+\+INTERNAL\+\_\+\+ERROR}} = 107
, \newline
\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a88f1810d792cd6fdb7d9cd866a5fd834}{RS\+\_\+\+PARAM\+\_\+\+ERROR}} = 108
 \}
\begin{DoxyCompactList}\small\item\em Return codes from nonblocking rsync operations. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_ae4427ad71847687ea6465d41f8209532}{rs\+\_\+trace\+\_\+set\+\_\+level}} (\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}} level)
\begin{DoxyCompactList}\small\item\em Set the least important message severity that will be output. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a03b75bac7cfb13233f0a030d723d112a}{rs\+\_\+trace\+\_\+to}} (\mbox{\hyperlink{librsync_8h_a764a02859f292e5df72b9f948a335712}{rs\+\_\+trace\+\_\+fn\+\_\+t}} $\ast$)
\begin{DoxyCompactList}\small\item\em Set trace callback. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a58bcbb175bc111fe0b8eed2f384ff53b}{rs\+\_\+trace\+\_\+stderr}} (\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}} level, char const $\ast$msg)
\begin{DoxyCompactList}\small\item\em Default trace callback that writes to stderr. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT int \mbox{\hyperlink{librsync_8h_a415700accb5b2f89fb8f9e3f5db935f8}{rs\+\_\+supports\+\_\+trace}} (void)
\begin{DoxyCompactList}\small\item\em Check whether the library was compiled with debugging trace. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_af6d869f2461f90229f4741cc2e7e5bd2}{rs\+\_\+hexify}} (char $\ast$to\+\_\+buf, void const $\ast$from\+\_\+buf, int from\+\_\+len)
\begin{DoxyCompactList}\small\item\em Convert {\ttfamily from\+\_\+len} bytes at {\ttfamily from\+\_\+buf} into a hex representation in {\ttfamily to\+\_\+buf}, which must be twice as long plus one byte for the null terminator. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT size\+\_\+t \mbox{\hyperlink{librsync_8h_a3dd86210e1e0b375c31b75c3d520774e}{rs\+\_\+unbase64}} (char $\ast$s)
\begin{DoxyCompactList}\small\item\em Decode a base64 buffer in place. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a1eeeb4970c526982b987601ba732706c}{rs\+\_\+base64}} (unsigned char const $\ast$buf, int n, char $\ast$out)
\begin{DoxyCompactList}\small\item\em Encode a buffer as base64. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT char const $\ast$ \mbox{\hyperlink{librsync_8h_a53c3ba4c320a497218a86936e8ee802c}{rs\+\_\+strerror}} (\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} r)
\begin{DoxyCompactList}\small\item\em Return an English description of a \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} value. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a786a6ca1a177d9f557da66765f423c7f}{rs\+\_\+mdfour}} (unsigned char $\ast$out, void const $\ast$in, size\+\_\+t)
\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a07a18adb6a753f7d838ad77659b57022}{rs\+\_\+mdfour\+\_\+begin}} (\mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}} $\ast$md)
\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a436e793a57e299c5178bef44283c6393}{rs\+\_\+mdfour\+\_\+update}} (\mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}} $\ast$md, void const $\ast$in\+\_\+void, size\+\_\+t n)
\begin{DoxyCompactList}\small\item\em Feed some data into the MD4 accumulator. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a77ecdafa4f13080845f23473041f593b}{rs\+\_\+mdfour\+\_\+result}} (\mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}} $\ast$md, unsigned char $\ast$out)
\item 
LIBRSYNC\+\_\+\+EXPORT char $\ast$ \mbox{\hyperlink{librsync_8h_af35648a6cd1fff934021114802bbb303}{rs\+\_\+format\+\_\+stats}} (\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} const $\ast$stats, char $\ast$buf, size\+\_\+t size)
\begin{DoxyCompactList}\small\item\em Return a human-\/readable representation of statistics. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT int \mbox{\hyperlink{librsync_8h_ad7216989717e18b89c82509a01d9ae03}{rs\+\_\+log\+\_\+stats}} (\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} const $\ast$stats)
\begin{DoxyCompactList}\small\item\em Write statistics into the current log as text. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a3b554ee23fa3c5f06a7808f55aedf985}{rs\+\_\+signature\+\_\+log\+\_\+stats}} (\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} const $\ast$sig)
\begin{DoxyCompactList}\small\item\em Log the rs\+\_\+signature\+\_\+delta match stats. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_a4e801efb30ba20e710f81278473147d1}{rs\+\_\+free\+\_\+sumset}} (\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$)
\begin{DoxyCompactList}\small\item\em Deep deallocation of checksums. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{librsync_8h_ad70256f3ff172a3e5b9064bd265e0b09}{rs\+\_\+sumset\+\_\+dump}} (\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} const $\ast$)
\begin{DoxyCompactList}\small\item\em Dump signatures to the log. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_aede8e0f42424b9aa29093f94b59ea029}{rs\+\_\+job\+\_\+iter}} (\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$job, \mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}} $\ast$buffers)
\begin{DoxyCompactList}\small\item\em Run a \mbox{\hyperlink{structrs__job}{rs\+\_\+job}} state machine until it blocks (\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253af2d289bbc65678b4b00f56a2e6632957}{RS\+\_\+\+BLOCKED}}), returns an error, or completes (\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a739063053a289b5c3393d78cc77b41b2}{RS\+\_\+\+DONE}}). \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a85d48e8216b848b9757a076f829ac4a8}{rs\+\_\+job\+\_\+drive}} (\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$job, \mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}} $\ast$buf, \mbox{\hyperlink{librsync_8h_ae06d064f9f33a459a589d2eb1fb5b6bc}{rs\+\_\+driven\+\_\+cb}} in\+\_\+cb, void $\ast$in\+\_\+opaque, \mbox{\hyperlink{librsync_8h_ae06d064f9f33a459a589d2eb1fb5b6bc}{rs\+\_\+driven\+\_\+cb}} out\+\_\+cb, void $\ast$out\+\_\+opaque)
\begin{DoxyCompactList}\small\item\em Actively process a job, by making callbacks to fill and empty the buffers until the job is done. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT const \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$ \mbox{\hyperlink{librsync_8h_ae0051eed681361b1637191d99c1b744d}{rs\+\_\+job\+\_\+statistics}} (\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$job)
\begin{DoxyCompactList}\small\item\em Return a pointer to the statistics in a job. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a297b5522990715aff982f8556052c273}{rs\+\_\+job\+\_\+free}} (\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$)
\begin{DoxyCompactList}\small\item\em Deallocate job state. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a3c4c3fcea2814610109536f3ae029c5e}{rs\+\_\+sig\+\_\+args}} (rs\+\_\+long\+\_\+t old\+\_\+fsize, \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}} $\ast$magic, size\+\_\+t $\ast$block\+\_\+len, size\+\_\+t $\ast$strong\+\_\+len)
\begin{DoxyCompactList}\small\item\em Get or check signature arguments for a given file size. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ \mbox{\hyperlink{librsync_8h_a226f57577fcad2e4c97f3e4d612650d3}{rs\+\_\+sig\+\_\+begin}} (size\+\_\+t block\+\_\+len, size\+\_\+t strong\+\_\+len, \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}} sig\+\_\+magic)
\begin{DoxyCompactList}\small\item\em Start generating a signature. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ \mbox{\hyperlink{librsync_8h_a6d576b32ff2136be8469f2ecf318d1bf}{rs\+\_\+delta\+\_\+begin}} (\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$)
\begin{DoxyCompactList}\small\item\em Prepare to compute a streaming delta. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ \mbox{\hyperlink{librsync_8h_a5898e9ed00b5cdfe5fa58bfa0f25821c}{rs\+\_\+loadsig\+\_\+begin}} (\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$$\ast$)
\begin{DoxyCompactList}\small\item\em Read a signature from a file into an \mbox{\hyperlink{structrs__signature}{rs\+\_\+signature}} structure in memory. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a1c11ff785ebcd7210f5485d0c97fc812}{rs\+\_\+build\+\_\+hash\+\_\+table}} (\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$sums)
\begin{DoxyCompactList}\small\item\em Call this after loading a signature to index it. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ \mbox{\hyperlink{librsync_8h_a15efa6e180d239fee2c195874618b0ea}{rs\+\_\+patch\+\_\+begin}} (\mbox{\hyperlink{librsync_8h_afc4bc64a627d7ca181a7e813832313cc}{rs\+\_\+copy\+\_\+cb}} $\ast$copy\+\_\+cb, void $\ast$copy\+\_\+arg)
\begin{DoxyCompactList}\small\item\em Apply a {\itshape delta} to a {\itshape basis} file to recreate the {\itshape new} file. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT FILE $\ast$ \mbox{\hyperlink{librsync_8h_a32b683c0763df3ce8054158232c07fe0}{rs\+\_\+file\+\_\+open}} (char const $\ast$filename, char const $\ast$mode, int force)
\begin{DoxyCompactList}\small\item\em Open a file with special handling for stdin or stdout. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT int \mbox{\hyperlink{librsync_8h_a2521aba7896b229e372a2758c0135d3c}{rs\+\_\+file\+\_\+close}} (FILE $\ast$file)
\begin{DoxyCompactList}\small\item\em Close a file with special handling for stdin or stdout. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT rs\+\_\+long\+\_\+t \mbox{\hyperlink{librsync_8h_a55023ca0d195fa10eedeb8a4865b1e1e}{rs\+\_\+file\+\_\+size}} (FILE $\ast$file)
\begin{DoxyCompactList}\small\item\em Get the size of a file. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_abc5c16dc95a71e609480a74bc6e128ac}{rs\+\_\+file\+\_\+copy\+\_\+cb}} (void $\ast$arg, rs\+\_\+long\+\_\+t pos, size\+\_\+t $\ast$len, void $\ast$$\ast$buf)
\begin{DoxyCompactList}\small\item\em \mbox{\hyperlink{librsync_8h_afc4bc64a627d7ca181a7e813832313cc}{rs\+\_\+copy\+\_\+cb}} that reads from a stdio file. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a2e111b9ef4acef02f812ec58b8217c8c}{rs\+\_\+sig\+\_\+file}} (FILE $\ast$old\+\_\+file, FILE $\ast$sig\+\_\+file, size\+\_\+t block\+\_\+len, size\+\_\+t strong\+\_\+len, \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}} sig\+\_\+magic, \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$stats)
\begin{DoxyCompactList}\small\item\em Generate the signature of a basis file, and write it out to another. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a69a679a66bcf4b35b3e22ca0e9791c02}{rs\+\_\+loadsig\+\_\+file}} (FILE $\ast$sig\+\_\+file, \mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$$\ast$sumset, \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$stats)
\begin{DoxyCompactList}\small\item\em Load signatures from a signature file into memory. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a633e49044273bd2b7c1ce568b52b7e91}{rs\+\_\+delta\+\_\+file}} (\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$, FILE $\ast$new\+\_\+file, FILE $\ast$delta\+\_\+file, \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$)
\begin{DoxyCompactList}\small\item\em Generate a delta between a signature and a new file into a delta file. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a76f5d5851aaad2c17bfd9256e344626d}{rs\+\_\+patch\+\_\+file}} (FILE $\ast$basis\+\_\+file, FILE $\ast$delta\+\_\+file, FILE $\ast$new\+\_\+file, \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$)
\begin{DoxyCompactList}\small\item\em Apply a patch, relative to a basis, into a new file. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Variables}
\begin{DoxyCompactItemize}
\item 
LIBRSYNC\+\_\+\+EXPORT char const \mbox{\hyperlink{librsync_8h_aed3a9f0a24f00870c88e910924f90ac0}{rs\+\_\+librsync\+\_\+version}} \mbox{[}$\,$\mbox{]}
\begin{DoxyCompactList}\small\item\em Library version string. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT const int \mbox{\hyperlink{librsync_8h_a7b44861ca10080e43c713f73f3540f33}{RS\+\_\+\+MD4\+\_\+\+SUM\+\_\+\+LENGTH}}
\item 
LIBRSYNC\+\_\+\+EXPORT const int \mbox{\hyperlink{librsync_8h_a03fd1c9386b2d8ad3a39c99ef1ed2f2e}{RS\+\_\+\+BLAKE2\+\_\+\+SUM\+\_\+\+LENGTH}}
\item 
LIBRSYNC\+\_\+\+EXPORT int \mbox{\hyperlink{librsync_8h_adf003594ce4521baf206b54765250e0e}{rs\+\_\+inbuflen}}
\begin{DoxyCompactList}\small\item\em Buffer sizes for file IO. \end{DoxyCompactList}\item 
LIBRSYNC\+\_\+\+EXPORT int \mbox{\hyperlink{librsync_8h_aafe1f83dd0d6c290de29d52720cc4dc4}{rs\+\_\+outbuflen}}
\end{DoxyCompactItemize}


\doxysubsubsection{Detailed Description}
Public header for librsync. 



Definition in file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.



\doxysubsubsection{Macro Definition Documentation}
\mbox{\label{librsync_8h_af7a156819e967be6c9c93a380111d5f4}} 
\index{librsync.h@{librsync.h}!RS\_MAX\_STRONG\_SUM\_LENGTH@{RS\_MAX\_STRONG\_SUM\_LENGTH}}
\index{RS\_MAX\_STRONG\_SUM\_LENGTH@{RS\_MAX\_STRONG\_SUM\_LENGTH}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{RS\_MAX\_STRONG\_SUM\_LENGTH}{RS\_MAX\_STRONG\_SUM\_LENGTH}}
{\footnotesize\ttfamily \#define RS\+\_\+\+MAX\+\_\+\+STRONG\+\_\+\+SUM\+\_\+\+LENGTH~32}



Definition at line \mbox{\hyperlink{librsync_8h_source_l00240}{240}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_a93340842ff428fa0c834461121bc96f9}} 
\index{librsync.h@{librsync.h}!RS\_DEFAULT\_BLOCK\_LEN@{RS\_DEFAULT\_BLOCK\_LEN}}
\index{RS\_DEFAULT\_BLOCK\_LEN@{RS\_DEFAULT\_BLOCK\_LEN}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{RS\_DEFAULT\_BLOCK\_LEN}{RS\_DEFAULT\_BLOCK\_LEN}}
{\footnotesize\ttfamily \#define RS\+\_\+\+DEFAULT\+\_\+\+BLOCK\+\_\+\+LEN~2048}



Default block length, if not determined by any other factors. 

The 2K default assumes a typical file is about 4MB and should be OK for files up to 32G with more than 1GB ram. 

Definition at line \mbox{\hyperlink{librsync_8h_source_l00367}{367}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_ac096941ff0dcb51ae14ef447900fe5d3}} 
\index{librsync.h@{librsync.h}!RS\_DEFAULT\_MIN\_STRONG\_LEN@{RS\_DEFAULT\_MIN\_STRONG\_LEN}}
\index{RS\_DEFAULT\_MIN\_STRONG\_LEN@{RS\_DEFAULT\_MIN\_STRONG\_LEN}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{RS\_DEFAULT\_MIN\_STRONG\_LEN}{RS\_DEFAULT\_MIN\_STRONG\_LEN}}
{\footnotesize\ttfamily \#define RS\+\_\+\+DEFAULT\+\_\+\+MIN\+\_\+\+STRONG\+\_\+\+LEN~12}



Default minimum strong sum length, if the filesize is unknown. 

This is conservative, and should be safe for files less than 45TB with a 2KB block\+\_\+len, assuming no collision attack with crafted data. 

Definition at line \mbox{\hyperlink{librsync_8h_source_l00373}{373}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.



\doxysubsubsection{Typedef Documentation}
\mbox{\label{librsync_8h_afc803cb54dc6e7298745a068a85ed018}} 
\index{librsync.h@{librsync.h}!rs\_byte\_t@{rs\_byte\_t}}
\index{rs\_byte\_t@{rs\_byte\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_byte\_t}{rs\_byte\_t}}
{\footnotesize\ttfamily typedef uint8\+\_\+t rs\+\_\+byte\+\_\+t}



Definition at line \mbox{\hyperlink{librsync_8h_source_l00049}{49}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_a5b014815c61f51b3ce19807499216dd2}} 
\index{librsync.h@{librsync.h}!rs\_long\_t@{rs\_long\_t}}
\index{rs\_long\_t@{rs\_long\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_long\_t}{rs\_long\_t}}
{\footnotesize\ttfamily typedef intmax\+\_\+t rs\+\_\+long\+\_\+t}



Definition at line \mbox{\hyperlink{librsync_8h_source_l00050}{50}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_a764a02859f292e5df72b9f948a335712}} 
\index{librsync.h@{librsync.h}!rs\_trace\_fn\_t@{rs\_trace\_fn\_t}}
\index{rs\_trace\_fn\_t@{rs\_trace\_fn\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_trace\_fn\_t}{rs\_trace\_fn\_t}}
{\footnotesize\ttfamily typedef void rs\+\_\+trace\+\_\+fn\+\_\+t(\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}} level, char const $\ast$msg)}



Callback to write out log messages. 


\begin{DoxyParams}{Parameters}
{\em level} & a syslog level.\\
\hline
{\em msg} & message to be logged.\\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_trace}{Trace output}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00136}{136}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_adec85b529224f0240ae1afccff827462}} 
\index{librsync.h@{librsync.h}!rs\_result@{rs\_result}}
\index{rs\_result@{rs\_result}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_result}{rs\_result}}
{\footnotesize\ttfamily typedef enum \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}}}



Return codes from nonblocking rsync operations. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a53c3ba4c320a497218a86936e8ee802c}{rs\+\_\+strerror()}} 

api\+\_\+callbacks 
\end{DoxySeeAlso}
\mbox{\label{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}} 
\index{librsync.h@{librsync.h}!rs\_stats\_t@{rs\_stats\_t}}
\index{rs\_stats\_t@{rs\_stats\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_stats\_t}{rs\_stats\_t}}
{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structrs__stats}{rs\+\_\+stats}} \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}}}



Performance statistics from a librsync encoding or decoding operation. 

\begin{DoxySeeAlso}{See also}
api\+\_\+stats 

\mbox{\hyperlink{librsync_8h_af35648a6cd1fff934021114802bbb303}{rs\+\_\+format\+\_\+stats()}} 

\mbox{\hyperlink{librsync_8h_ad7216989717e18b89c82509a01d9ae03}{rs\+\_\+log\+\_\+stats()}} 
\end{DoxySeeAlso}
\mbox{\label{librsync_8h_a85d8b75b835fafff466d969d0e616e10}} 
\index{librsync.h@{librsync.h}!rs\_mdfour\_t@{rs\_mdfour\_t}}
\index{rs\_mdfour\_t@{rs\_mdfour\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_mdfour\_t}{rs\_mdfour\_t}}
{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structrs__mdfour}{rs\+\_\+mdfour}} \mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}}}



MD4 message-\/digest accumulator. 

\begin{DoxySeeAlso}{See also}
rs\+\_\+mdfour(), rs\+\_\+mdfour\+\_\+begin(), \mbox{\hyperlink{librsync_8h_a436e793a57e299c5178bef44283c6393}{rs\+\_\+mdfour\+\_\+update()}}, rs\+\_\+mdfour\+\_\+result() 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00236}{236}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_a3371d4706d85f20cdd08ac2fc1dd0e43}} 
\index{librsync.h@{librsync.h}!rs\_weak\_sum\_t@{rs\_weak\_sum\_t}}
\index{rs\_weak\_sum\_t@{rs\_weak\_sum\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_weak\_sum\_t}{rs\_weak\_sum\_t}}
{\footnotesize\ttfamily typedef uint32\+\_\+t rs\+\_\+weak\+\_\+sum\+\_\+t}



Definition at line \mbox{\hyperlink{librsync_8h_source_l00242}{242}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_a13b59d2eea77e89feff6d9e3a8f7a3f4}} 
\index{librsync.h@{librsync.h}!rs\_strong\_sum\_t@{rs\_strong\_sum\_t}}
\index{rs\_strong\_sum\_t@{rs\_strong\_sum\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_strong\_sum\_t}{rs\_strong\_sum\_t}}
{\footnotesize\ttfamily typedef unsigned char rs\+\_\+strong\+\_\+sum\+\_\+t\mbox{[}RS\+\_\+\+MAX\+\_\+\+STRONG\+\_\+\+SUM\+\_\+\+LENGTH\mbox{]}}



Definition at line \mbox{\hyperlink{librsync_8h_source_l00243}{243}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}} 
\index{librsync.h@{librsync.h}!rs\_signature\_t@{rs\_signature\_t}}
\index{rs\_signature\_t@{rs\_signature\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_signature\_t}{rs\_signature\_t}}
{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structrs__signature}{rs\+\_\+signature}} \mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}}}



The signature datastructure type. 



Definition at line \mbox{\hyperlink{librsync_8h_source_l00282}{282}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}} 
\index{librsync.h@{librsync.h}!rs\_buffers\_t@{rs\_buffers\_t}}
\index{rs\_buffers\_t@{rs\_buffers\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_buffers\_t}{rs\_buffers\_t}}
{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structrs__buffers__s}{rs\+\_\+buffers\+\_\+s}} \mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}}}

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{structrs__buffers__s}{rs\+\_\+buffers\+\_\+s}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00361}{361}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_add6622b38e3fa557301a190876d5ed4a}} 
\index{librsync.h@{librsync.h}!rs\_job\_t@{rs\_job\_t}}
\index{rs\_job\_t@{rs\_job\_t}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_job\_t}{rs\_job\_t}}
{\footnotesize\ttfamily typedef struct \mbox{\hyperlink{structrs__job}{rs\+\_\+job}} \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}}}



Job of work to be done. 

Created by functions such as \mbox{\hyperlink{librsync_8h_a226f57577fcad2e4c97f3e4d612650d3}{rs\+\_\+sig\+\_\+begin()}}, and then iterated over by \mbox{\hyperlink{librsync_8h_aede8e0f42424b9aa29093f94b59ea029}{rs\+\_\+job\+\_\+iter()}}.

The contents are opaque to the application, and instances are always allocated by the library.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_streaming}{Streaming API}} 

\mbox{\hyperlink{structrs__job}{rs\+\_\+job}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00384}{384}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_ae06d064f9f33a459a589d2eb1fb5b6bc}} 
\index{librsync.h@{librsync.h}!rs\_driven\_cb@{rs\_driven\_cb}}
\index{rs\_driven\_cb@{rs\_driven\_cb}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_driven\_cb}{rs\_driven\_cb}}
{\footnotesize\ttfamily typedef \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+driven\+\_\+cb(\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$job, \mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}} $\ast$buf, void $\ast$opaque)}



Type of application-\/supplied function for \mbox{\hyperlink{librsync_8h_a85d48e8216b848b9757a076f829ac4a8}{rs\+\_\+job\+\_\+drive()}}. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_pull}{Pull API}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00405}{405}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_afc4bc64a627d7ca181a7e813832313cc}} 
\index{librsync.h@{librsync.h}!rs\_copy\_cb@{rs\_copy\_cb}}
\index{rs\_copy\_cb@{rs\_copy\_cb}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_copy\_cb}{rs\_copy\_cb}}
{\footnotesize\ttfamily typedef \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+copy\+\_\+cb(void $\ast$opaque, rs\+\_\+long\+\_\+t pos, size\+\_\+t $\ast$len, void $\ast$$\ast$buf)}



Callback used to retrieve parts of the basis file. 


\begin{DoxyParams}{Parameters}
{\em opaque} & The opaque object to execute the callback with. Often the file to read from.\\
\hline
{\em pos} & Position where copying should begin.\\
\hline
{\em len} & On input, the amount of data that should be retrieved. Updated to show how much is actually available, but should not be greater than the input value.\\
\hline
{\em buf} & On input, a buffer of at least {\ttfamily $\ast$len} bytes. May be updated to point to a buffer allocated by the callback if it prefers. \\
\hline
\end{DoxyParams}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00502}{502}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.



\doxysubsubsection{Enumeration Type Documentation}
\mbox{\label{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}} 
\index{librsync.h@{librsync.h}!rs\_magic\_number@{rs\_magic\_number}}
\index{rs\_magic\_number@{rs\_magic\_number}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_magic\_number}{rs\_magic\_number}}
{\footnotesize\ttfamily enum \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}}}



A uint32 magic number, emitted in bigendian/network order at the start of librsync files. 

\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_DELTA\_MAGIC@{RS\_DELTA\_MAGIC}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_DELTA\_MAGIC@{RS\_DELTA\_MAGIC}}}\mbox{\label{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a6ea14f19962e693df77d1ba569f2711d}} 
RS\+\_\+\+DELTA\+\_\+\+MAGIC&A delta file. At present, there\textquotesingle{}s only one delta format.

The four-\/byte literal {\ttfamily \char`\"{}rs\textbackslash{}x026\char`\"{}}. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_MD4\_SIG\_MAGIC@{RS\_MD4\_SIG\_MAGIC}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_MD4\_SIG\_MAGIC@{RS\_MD4\_SIG\_MAGIC}}}\mbox{\label{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a4c1b7d1c36157c54225147b830b3e95a}} 
RS\+\_\+\+MD4\+\_\+\+SIG\+\_\+\+MAGIC&A signature file with MD4 signatures. Backward compatible with librsync \texorpdfstring{$<$}{<} 1.\+0, but strongly deprecated because it creates a security vulnerability on files containing partly untrusted data. See \href{https://github.com/librsync/librsync/issues/5}{\texttt{ https\+://github.\+com/librsync/librsync/issues/5}}.

The four-\/byte literal {\ttfamily \char`\"{}rs\textbackslash{}x016\char`\"{}}.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a226f57577fcad2e4c97f3e4d612650d3}{rs\+\_\+sig\+\_\+begin()}} 
\end{DoxySeeAlso}
\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_BLAKE2\_SIG\_MAGIC@{RS\_BLAKE2\_SIG\_MAGIC}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_BLAKE2\_SIG\_MAGIC@{RS\_BLAKE2\_SIG\_MAGIC}}}\mbox{\label{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a3a4244db382bebe6bc34b62d2f4cc816}} 
RS\+\_\+\+BLAKE2\+\_\+\+SIG\+\_\+\+MAGIC&A signature file using the BLAKE2 hash. Supported from librsync 1.\+0.

The four-\/byte literal {\ttfamily \char`\"{}rs\textbackslash{}x017\char`\"{}}.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a226f57577fcad2e4c97f3e4d612650d3}{rs\+\_\+sig\+\_\+begin()}} 
\end{DoxySeeAlso}
\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_RK\_MD4\_SIG\_MAGIC@{RS\_RK\_MD4\_SIG\_MAGIC}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_RK\_MD4\_SIG\_MAGIC@{RS\_RK\_MD4\_SIG\_MAGIC}}}\mbox{\label{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a96688c67926b018f046c36bdb402ebbf}} 
RS\+\_\+\+RK\+\_\+\+MD4\+\_\+\+SIG\+\_\+\+MAGIC&A signature file with Rabin\+Karp rollsum and MD4 hash. Uses a faster/safer rollsum, but still strongly discouraged because of MD4\textquotesingle{}s security vulnerability. Supported since librsync 2.\+2.\+0.

The four-\/byte literal {\ttfamily \char`\"{}rs\textbackslash{}x01\+F\char`\"{}}.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a226f57577fcad2e4c97f3e4d612650d3}{rs\+\_\+sig\+\_\+begin()}} 
\end{DoxySeeAlso}
\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_RK\_BLAKE2\_SIG\_MAGIC@{RS\_RK\_BLAKE2\_SIG\_MAGIC}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_RK\_BLAKE2\_SIG\_MAGIC@{RS\_RK\_BLAKE2\_SIG\_MAGIC}}}\mbox{\label{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2a82d44c23687a5a33c2ea83b263bb2d3a}} 
RS\+\_\+\+RK\+\_\+\+BLAKE2\+\_\+\+SIG\+\_\+\+MAGIC&A signature file with Rabin\+Karp rollsum and BLAKE2 hash. Uses a faster/safer rollsum together with the safer BLAKE2 hash. This is the recommended default supported since librsync 2.\+2.\+0.

The four-\/byte literal {\ttfamily \char`\"{}rs\textbackslash{}x01\+G\char`\"{}}.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a226f57577fcad2e4c97f3e4d612650d3}{rs\+\_\+sig\+\_\+begin()}} 
\end{DoxySeeAlso}
\\
\hline

\end{DoxyEnumFields}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00065}{65}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}} 
\index{librsync.h@{librsync.h}!rs\_loglevel@{rs\_loglevel}}
\index{rs\_loglevel@{rs\_loglevel}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_loglevel}{rs\_loglevel}}
{\footnotesize\ttfamily enum \mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}}}



Log severity levels. 

These are the same as syslog, at least in glibc.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_ae4427ad71847687ea6465d41f8209532}{rs\+\_\+trace\+\_\+set\+\_\+level()}} 

\mbox{\hyperlink{api_trace}{Trace output}} 
\end{DoxySeeAlso}
\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_EMERG@{RS\_LOG\_EMERG}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_EMERG@{RS\_LOG\_EMERG}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa02061035a01b5ef687e246b60984e125}} 
RS\+\_\+\+LOG\+\_\+\+EMERG&System is unusable. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_ALERT@{RS\_LOG\_ALERT}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_ALERT@{RS\_LOG\_ALERT}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffaacb3b9720c32deecc167c3a4fa0ce7db}} 
RS\+\_\+\+LOG\+\_\+\+ALERT&Action must be taken immediately. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_CRIT@{RS\_LOG\_CRIT}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_CRIT@{RS\_LOG\_CRIT}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffabb9fce001c260b228f18ef413246747d}} 
RS\+\_\+\+LOG\+\_\+\+CRIT&Critical conditions. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_ERR@{RS\_LOG\_ERR}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_ERR@{RS\_LOG\_ERR}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa3be8f6c4bc775d06b990f1c30b3fba42}} 
RS\+\_\+\+LOG\+\_\+\+ERR&Error conditions. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_WARNING@{RS\_LOG\_WARNING}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_WARNING@{RS\_LOG\_WARNING}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffaaad731f1e5bdf374e40d486ace54e21a}} 
RS\+\_\+\+LOG\+\_\+\+WARNING&Warning conditions. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_NOTICE@{RS\_LOG\_NOTICE}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_NOTICE@{RS\_LOG\_NOTICE}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa8f2b32b0048544f4c9694b7b150221d8}} 
RS\+\_\+\+LOG\+\_\+\+NOTICE&Normal but significant condition. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_INFO@{RS\_LOG\_INFO}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_INFO@{RS\_LOG\_INFO}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffaf67a230a41302584eb67b9c7ccec3f62}} 
RS\+\_\+\+LOG\+\_\+\+INFO&Informational. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_LOG\_DEBUG@{RS\_LOG\_DEBUG}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_LOG\_DEBUG@{RS\_LOG\_DEBUG}}}\mbox{\label{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ffa1527bfcd19a3e2ffcf14d8c80e32b4c6}} 
RS\+\_\+\+LOG\+\_\+\+DEBUG&Debug-\/level messages. \\
\hline

\end{DoxyEnumFields}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00118}{118}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}} 
\index{librsync.h@{librsync.h}!rs\_result@{rs\_result}}
\index{rs\_result@{rs\_result}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_result}{rs\_result}}
{\footnotesize\ttfamily enum \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}}}



Return codes from nonblocking rsync operations. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a53c3ba4c320a497218a86936e8ee802c}{rs\+\_\+strerror()}} 

api\+\_\+callbacks 
\end{DoxySeeAlso}
\begin{DoxyEnumFields}{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_DONE@{RS\_DONE}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_DONE@{RS\_DONE}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a739063053a289b5c3393d78cc77b41b2}} 
RS\+\_\+\+DONE&Completed successfully. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_BLOCKED@{RS\_BLOCKED}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_BLOCKED@{RS\_BLOCKED}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253af2d289bbc65678b4b00f56a2e6632957}} 
RS\+\_\+\+BLOCKED&Blocked waiting for more data. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_RUNNING@{RS\_RUNNING}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_RUNNING@{RS\_RUNNING}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a5366e53561c2ec9a897470535ea0139c}} 
RS\+\_\+\+RUNNING&The job is still running, and not yet finished or blocked. (This value should never be seen by the application.) \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_TEST\_SKIPPED@{RS\_TEST\_SKIPPED}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_TEST\_SKIPPED@{RS\_TEST\_SKIPPED}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a130fc0bdeb6ce6ed496f07a02146f0a5}} 
RS\+\_\+\+TEST\+\_\+\+SKIPPED&Test neither passed or failed. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_IO\_ERROR@{RS\_IO\_ERROR}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_IO\_ERROR@{RS\_IO\_ERROR}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253af510cfd1ede72dbfea416d3f295e6c6f}} 
RS\+\_\+\+IO\+\_\+\+ERROR&Error in file or network IO. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_SYNTAX\_ERROR@{RS\_SYNTAX\_ERROR}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_SYNTAX\_ERROR@{RS\_SYNTAX\_ERROR}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253ac562bd33fecdc9ab03d32c2471f1bdc9}} 
RS\+\_\+\+SYNTAX\+\_\+\+ERROR&Command line syntax error. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_MEM\_ERROR@{RS\_MEM\_ERROR}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_MEM\_ERROR@{RS\_MEM\_ERROR}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a403296529c4ba1653612438dd7ba9a34}} 
RS\+\_\+\+MEM\+\_\+\+ERROR&Out of memory. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_INPUT\_ENDED@{RS\_INPUT\_ENDED}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_INPUT\_ENDED@{RS\_INPUT\_ENDED}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253aa997432dc2d2c8256ad41f96267a5185}} 
RS\+\_\+\+INPUT\+\_\+\+ENDED&Unexpected end of input file, perhaps due to a truncated file or dropped network connection. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_BAD\_MAGIC@{RS\_BAD\_MAGIC}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_BAD\_MAGIC@{RS\_BAD\_MAGIC}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253ada22c2fc95695e6f9558da6bcca53749}} 
RS\+\_\+\+BAD\+\_\+\+MAGIC&Bad magic number at start of stream. Probably not a librsync file, or possibly the wrong kind of file or from an incompatible library version. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_UNIMPLEMENTED@{RS\_UNIMPLEMENTED}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_UNIMPLEMENTED@{RS\_UNIMPLEMENTED}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a639e01179ce01c707606a8e50bf5a6aa}} 
RS\+\_\+\+UNIMPLEMENTED&Author is lazy. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_CORRUPT@{RS\_CORRUPT}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_CORRUPT@{RS\_CORRUPT}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a897ee702e0324d286881f6b8391ea340}} 
RS\+\_\+\+CORRUPT&Unbelievable value in stream. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_INTERNAL\_ERROR@{RS\_INTERNAL\_ERROR}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_INTERNAL\_ERROR@{RS\_INTERNAL\_ERROR}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253ade41976437317deebdec5b27f7b39655}} 
RS\+\_\+\+INTERNAL\+\_\+\+ERROR&Probably a library bug. \\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{RS\_PARAM\_ERROR@{RS\_PARAM\_ERROR}!librsync.h@{librsync.h}}\index{librsync.h@{librsync.h}!RS\_PARAM\_ERROR@{RS\_PARAM\_ERROR}}}\mbox{\label{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a88f1810d792cd6fdb7d9cd866a5fd834}} 
RS\+\_\+\+PARAM\+\_\+\+ERROR&Bad value passed in to library, probably an application bug. \\
\hline

\end{DoxyEnumFields}


Definition at line \mbox{\hyperlink{librsync_8h_source_l00180}{180}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.



\doxysubsubsection{Function Documentation}
\mbox{\label{librsync_8h_ae4427ad71847687ea6465d41f8209532}} 
\index{librsync.h@{librsync.h}!rs\_trace\_set\_level@{rs\_trace\_set\_level}}
\index{rs\_trace\_set\_level@{rs\_trace\_set\_level}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_trace\_set\_level()}{rs\_trace\_set\_level()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+trace\+\_\+set\+\_\+level (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}}}]{level }\end{DoxyParamCaption})}



Set the least important message severity that will be output. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_trace}{Trace output}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{trace_8c_source_l00062}{62}} of file \mbox{\hyperlink{trace_8c_source}{trace.\+c}}.

\mbox{\label{librsync_8h_a03b75bac7cfb13233f0a030d723d112a}} 
\index{librsync.h@{librsync.h}!rs\_trace\_to@{rs\_trace\_to}}
\index{rs\_trace\_to@{rs\_trace\_to}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_trace\_to()}{rs\_trace\_to()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+trace\+\_\+to (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_a764a02859f292e5df72b9f948a335712}{rs\+\_\+trace\+\_\+fn\+\_\+t}} $\ast$}]{new\+\_\+impl }\end{DoxyParamCaption})}



Set trace callback. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_trace}{Trace output}}
\end{DoxySeeAlso}
Set trace callback.

The callback scheme allows for use within applications that may have their own particular ways of reporting errors\+: log files for a web server, perhaps, and an error dialog for a browser.

\begin{DoxyRefDesc}{Todo}
\item[\mbox{\hyperlink{todo__todo000016}{Todo}}]Do we really need such fine-\/grained control, or just yes/no tracing? \end{DoxyRefDesc}


Definition at line \mbox{\hyperlink{trace_8c_source_l00057}{57}} of file \mbox{\hyperlink{trace_8c_source}{trace.\+c}}.

\mbox{\label{librsync_8h_a58bcbb175bc111fe0b8eed2f384ff53b}} 
\index{librsync.h@{librsync.h}!rs\_trace\_stderr@{rs\_trace\_stderr}}
\index{rs\_trace\_stderr@{rs\_trace\_stderr}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_trace\_stderr()}{rs\_trace\_stderr()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+trace\+\_\+stderr (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_aacedf9be8d9837fcf7f5f1cbf37126ff}{rs\+\_\+loglevel}}}]{level,  }\item[{char const $\ast$}]{msg }\end{DoxyParamCaption})}



Default trace callback that writes to stderr. 

Implements \mbox{\hyperlink{librsync_8h_a764a02859f292e5df72b9f948a335712}{rs\+\_\+trace\+\_\+fn\+\_\+t}}, and may be passed to \mbox{\hyperlink{librsync_8h_a03b75bac7cfb13233f0a030d723d112a}{rs\+\_\+trace\+\_\+to()}}.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_trace}{Trace output}} 
\end{DoxySeeAlso}
\mbox{\label{librsync_8h_a415700accb5b2f89fb8f9e3f5db935f8}} 
\index{librsync.h@{librsync.h}!rs\_supports\_trace@{rs\_supports\_trace}}
\index{rs\_supports\_trace@{rs\_supports\_trace}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_supports\_trace()}{rs\_supports\_trace()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT int rs\+\_\+supports\+\_\+trace (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}



Check whether the library was compiled with debugging trace. 

\begin{DoxyReturn}{Returns}
True if the library contains trace code; otherwise false.
\end{DoxyReturn}
If this returns false, then trying to turn trace on will achieve nothing.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_trace}{Trace output}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{trace_8c_source_l00102}{102}} of file \mbox{\hyperlink{trace_8c_source}{trace.\+c}}.

\mbox{\label{librsync_8h_af6d869f2461f90229f4741cc2e7e5bd2}} 
\index{librsync.h@{librsync.h}!rs\_hexify@{rs\_hexify}}
\index{rs\_hexify@{rs\_hexify}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_hexify()}{rs\_hexify()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+hexify (\begin{DoxyParamCaption}\item[{char $\ast$}]{to\+\_\+buf,  }\item[{void const $\ast$}]{from\+\_\+buf,  }\item[{int}]{from\+\_\+len }\end{DoxyParamCaption})}



Convert {\ttfamily from\+\_\+len} bytes at {\ttfamily from\+\_\+buf} into a hex representation in {\ttfamily to\+\_\+buf}, which must be twice as long plus one byte for the null terminator. 



Definition at line \mbox{\hyperlink{hex_8c_source_l00023}{23}} of file \mbox{\hyperlink{hex_8c_source}{hex.\+c}}.

\mbox{\label{librsync_8h_a3dd86210e1e0b375c31b75c3d520774e}} 
\index{librsync.h@{librsync.h}!rs\_unbase64@{rs\_unbase64}}
\index{rs\_unbase64@{rs\_unbase64}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_unbase64()}{rs\_unbase64()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT size\+\_\+t rs\+\_\+unbase64 (\begin{DoxyParamCaption}\item[{char $\ast$}]{s }\end{DoxyParamCaption})}



Decode a base64 buffer in place. 

\begin{DoxyReturn}{Returns}
The number of binary bytes.
\end{DoxyReturn}
Decode a base64 buffer in place.

See RFC1521 for the specification of base64. 

Definition at line \mbox{\hyperlink{base64_8c_source_l00030}{30}} of file \mbox{\hyperlink{base64_8c_source}{base64.\+c}}.

\mbox{\label{librsync_8h_a1eeeb4970c526982b987601ba732706c}} 
\index{librsync.h@{librsync.h}!rs\_base64@{rs\_base64}}
\index{rs\_base64@{rs\_base64}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_base64()}{rs\_base64()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+base64 (\begin{DoxyParamCaption}\item[{unsigned char const $\ast$}]{buf,  }\item[{int}]{n,  }\item[{char $\ast$}]{out }\end{DoxyParamCaption})}



Encode a buffer as base64. 

Encode a buffer as base64. 

Definition at line \mbox{\hyperlink{base64_8c_source_l00060}{60}} of file \mbox{\hyperlink{base64_8c_source}{base64.\+c}}.

\mbox{\label{librsync_8h_a53c3ba4c320a497218a86936e8ee802c}} 
\index{librsync.h@{librsync.h}!rs\_strerror@{rs\_strerror}}
\index{rs\_strerror@{rs\_strerror}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_strerror()}{rs\_strerror()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT char const  $\ast$ rs\+\_\+strerror (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}}}]{r }\end{DoxyParamCaption})}



Return an English description of a \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} value. 



Definition at line \mbox{\hyperlink{msg_8c_source_l00046}{46}} of file \mbox{\hyperlink{msg_8c_source}{msg.\+c}}.

\mbox{\label{librsync_8h_a786a6ca1a177d9f557da66765f423c7f}} 
\index{librsync.h@{librsync.h}!rs\_mdfour@{rs\_mdfour}}
\index{rs\_mdfour@{rs\_mdfour}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_mdfour()}{rs\_mdfour()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void \mbox{\hyperlink{structrs__mdfour}{rs\+\_\+mdfour}} (\begin{DoxyParamCaption}\item[{unsigned char $\ast$}]{out,  }\item[{void const $\ast$}]{in,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Definition at line \mbox{\hyperlink{mdfour_8c_source_l00320}{320}} of file \mbox{\hyperlink{mdfour_8c_source}{mdfour.\+c}}.

\mbox{\label{librsync_8h_a07a18adb6a753f7d838ad77659b57022}} 
\index{librsync.h@{librsync.h}!rs\_mdfour\_begin@{rs\_mdfour\_begin}}
\index{rs\_mdfour\_begin@{rs\_mdfour\_begin}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_mdfour\_begin()}{rs\_mdfour\_begin()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+mdfour\+\_\+begin (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}} $\ast$}]{md }\end{DoxyParamCaption})}



Definition at line \mbox{\hyperlink{mdfour_8c_source_l00224}{224}} of file \mbox{\hyperlink{mdfour_8c_source}{mdfour.\+c}}.

\mbox{\label{librsync_8h_a436e793a57e299c5178bef44283c6393}} 
\index{librsync.h@{librsync.h}!rs\_mdfour\_update@{rs\_mdfour\_update}}
\index{rs\_mdfour\_update@{rs\_mdfour\_update}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_mdfour\_update()}{rs\_mdfour\_update()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+mdfour\+\_\+update (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}} $\ast$}]{md,  }\item[{void const $\ast$}]{in\+\_\+void,  }\item[{size\+\_\+t}]{n }\end{DoxyParamCaption})}



Feed some data into the MD4 accumulator. 


\begin{DoxyParams}{Parameters}
{\em md} & MD4 accumulator.\\
\hline
{\em in\+\_\+void} & Data to add.\\
\hline
{\em n} & Number of bytes fed in. \\
\hline
\end{DoxyParams}


Definition at line \mbox{\hyperlink{mdfour_8c_source_l00273}{273}} of file \mbox{\hyperlink{mdfour_8c_source}{mdfour.\+c}}.

\mbox{\label{librsync_8h_a77ecdafa4f13080845f23473041f593b}} 
\index{librsync.h@{librsync.h}!rs\_mdfour\_result@{rs\_mdfour\_result}}
\index{rs\_mdfour\_result@{rs\_mdfour\_result}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_mdfour\_result()}{rs\_mdfour\_result()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+mdfour\+\_\+result (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_a85d8b75b835fafff466d969d0e616e10}{rs\+\_\+mdfour\+\_\+t}} $\ast$}]{md,  }\item[{unsigned char $\ast$}]{out }\end{DoxyParamCaption})}



Definition at line \mbox{\hyperlink{mdfour_8c_source_l00310}{310}} of file \mbox{\hyperlink{mdfour_8c_source}{mdfour.\+c}}.

\mbox{\label{librsync_8h_af35648a6cd1fff934021114802bbb303}} 
\index{librsync.h@{librsync.h}!rs\_format\_stats@{rs\_format\_stats}}
\index{rs\_format\_stats@{rs\_format\_stats}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_format\_stats()}{rs\_format\_stats()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT char $\ast$ rs\+\_\+format\+\_\+stats (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} const $\ast$}]{stats,  }\item[{char $\ast$}]{buf,  }\item[{size\+\_\+t}]{size }\end{DoxyParamCaption})}



Return a human-\/readable representation of statistics. 

The string is truncated if it does not fit. 100 characters should be sufficient space.


\begin{DoxyParams}{Parameters}
{\em stats} & Statistics from an encoding or decoding operation.\\
\hline
{\em buf} & Buffer to receive result.\\
\hline
{\em size} & Size of buffer.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
{\ttfamily buf}.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_stats}{Stats}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{stats_8c_source_l00040}{40}} of file \mbox{\hyperlink{stats_8c_source}{stats.\+c}}.

\mbox{\label{librsync_8h_ad7216989717e18b89c82509a01d9ae03}} 
\index{librsync.h@{librsync.h}!rs\_log\_stats@{rs\_log\_stats}}
\index{rs\_log\_stats@{rs\_log\_stats}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_log\_stats()}{rs\_log\_stats()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT int rs\+\_\+log\+\_\+stats (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} const $\ast$}]{stats }\end{DoxyParamCaption})}



Write statistics into the current log as text. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_stats}{Stats}} 

\mbox{\hyperlink{api_trace}{Trace output}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{stats_8c_source_l00031}{31}} of file \mbox{\hyperlink{stats_8c_source}{stats.\+c}}.

\mbox{\label{librsync_8h_a3b554ee23fa3c5f06a7808f55aedf985}} 
\index{librsync.h@{librsync.h}!rs\_signature\_log\_stats@{rs\_signature\_log\_stats}}
\index{rs\_signature\_log\_stats@{rs\_signature\_log\_stats}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_signature\_log\_stats()}{rs\_signature\_log\_stats()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+signature\+\_\+log\+\_\+stats (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} const $\ast$}]{sig }\end{DoxyParamCaption})}



Log the rs\+\_\+signature\+\_\+delta match stats. 



Definition at line \mbox{\hyperlink{sumset_8c_source_l00256}{256}} of file \mbox{\hyperlink{sumset_8c_source}{sumset.\+c}}.

\mbox{\label{librsync_8h_a4e801efb30ba20e710f81278473147d1}} 
\index{librsync.h@{librsync.h}!rs\_free\_sumset@{rs\_free\_sumset}}
\index{rs\_free\_sumset@{rs\_free\_sumset}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_free\_sumset()}{rs\_free\_sumset()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+free\+\_\+sumset (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$}]{psums }\end{DoxyParamCaption})}



Deep deallocation of checksums. 



Definition at line \mbox{\hyperlink{sumset_8c_source_l00294}{294}} of file \mbox{\hyperlink{sumset_8c_source}{sumset.\+c}}.

\mbox{\label{librsync_8h_ad70256f3ff172a3e5b9064bd265e0b09}} 
\index{librsync.h@{librsync.h}!rs\_sumset\_dump@{rs\_sumset\_dump}}
\index{rs\_sumset\_dump@{rs\_sumset\_dump}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_sumset\_dump()}{rs\_sumset\_dump()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT void rs\+\_\+sumset\+\_\+dump (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} const $\ast$}]{sums }\end{DoxyParamCaption})}



Dump signatures to the log. 



Definition at line \mbox{\hyperlink{sumset_8c_source_l00300}{300}} of file \mbox{\hyperlink{sumset_8c_source}{sumset.\+c}}.

\mbox{\label{librsync_8h_aede8e0f42424b9aa29093f94b59ea029}} 
\index{librsync.h@{librsync.h}!rs\_job\_iter@{rs\_job\_iter}}
\index{rs\_job\_iter@{rs\_job\_iter}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_job\_iter()}{rs\_job\_iter()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+job\+\_\+iter (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$}]{job,  }\item[{\mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}} $\ast$}]{buffers }\end{DoxyParamCaption})}



Run a \mbox{\hyperlink{structrs__job}{rs\+\_\+job}} state machine until it blocks (\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253af2d289bbc65678b4b00f56a2e6632957}{RS\+\_\+\+BLOCKED}}), returns an error, or completes (\mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253a739063053a289b5c3393d78cc77b41b2}{RS\+\_\+\+DONE}}). 


\begin{DoxyParams}{Parameters}
{\em job} & Description of job state.\\
\hline
{\em buffers} & Pointer to structure describing input and output buffers.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} that caused iteration to stop.
\end{DoxyReturn}
{\ttfamily buffers-\/\texorpdfstring{$>$}{>}eof\+\_\+in} should be true if there is no more data after what\textquotesingle{}s in the input buffer. The final block checksum will run across whatever\textquotesingle{}s in there, without trying to accumulate anything else.

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_streaming}{Streaming API}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{job_8c_source_l00085}{85}} of file \mbox{\hyperlink{job_8c_source}{job.\+c}}.

\mbox{\label{librsync_8h_a85d48e8216b848b9757a076f829ac4a8}} 
\index{librsync.h@{librsync.h}!rs\_job\_drive@{rs\_job\_drive}}
\index{rs\_job\_drive@{rs\_job\_drive}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_job\_drive()}{rs\_job\_drive()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+job\+\_\+drive (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$}]{job,  }\item[{\mbox{\hyperlink{librsync_8h_abf9f543dbfe5c1e60c8ed1c93d087767}{rs\+\_\+buffers\+\_\+t}} $\ast$}]{buf,  }\item[{\mbox{\hyperlink{librsync_8h_ae06d064f9f33a459a589d2eb1fb5b6bc}{rs\+\_\+driven\+\_\+cb}}}]{in\+\_\+cb,  }\item[{void $\ast$}]{in\+\_\+opaque,  }\item[{\mbox{\hyperlink{librsync_8h_ae06d064f9f33a459a589d2eb1fb5b6bc}{rs\+\_\+driven\+\_\+cb}}}]{out\+\_\+cb,  }\item[{void $\ast$}]{out\+\_\+opaque }\end{DoxyParamCaption})}



Actively process a job, by making callbacks to fill and empty the buffers until the job is done. 



Definition at line \mbox{\hyperlink{job_8c_source_l00139}{139}} of file \mbox{\hyperlink{job_8c_source}{job.\+c}}.

\mbox{\label{librsync_8h_ae0051eed681361b1637191d99c1b744d}} 
\index{librsync.h@{librsync.h}!rs\_job\_statistics@{rs\_job\_statistics}}
\index{rs\_job\_statistics@{rs\_job\_statistics}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_job\_statistics()}{rs\_job\_statistics()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT const \mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$ rs\+\_\+job\+\_\+statistics (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$}]{job }\end{DoxyParamCaption})}



Return a pointer to the statistics in a job. 



Definition at line \mbox{\hyperlink{job_8c_source_l00134}{134}} of file \mbox{\hyperlink{job_8c_source}{job.\+c}}.

\mbox{\label{librsync_8h_a297b5522990715aff982f8556052c273}} 
\index{librsync.h@{librsync.h}!rs\_job\_free@{rs\_job\_free}}
\index{rs\_job\_free@{rs\_job\_free}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_job\_free()}{rs\_job\_free()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+job\+\_\+free (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$}]{job }\end{DoxyParamCaption})}



Deallocate job state. 



Definition at line \mbox{\hyperlink{job_8c_source_l00058}{58}} of file \mbox{\hyperlink{job_8c_source}{job.\+c}}.

\mbox{\label{librsync_8h_a3c4c3fcea2814610109536f3ae029c5e}} 
\index{librsync.h@{librsync.h}!rs\_sig\_args@{rs\_sig\_args}}
\index{rs\_sig\_args@{rs\_sig\_args}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_sig\_args()}{rs\_sig\_args()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+sig\+\_\+args (\begin{DoxyParamCaption}\item[{rs\+\_\+long\+\_\+t}]{old\+\_\+fsize,  }\item[{\mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}} $\ast$}]{magic,  }\item[{size\+\_\+t $\ast$}]{block\+\_\+len,  }\item[{size\+\_\+t $\ast$}]{strong\+\_\+len }\end{DoxyParamCaption})}



Get or check signature arguments for a given file size. 

This can be used to get the recommended arguments for generating a signature. On calling, old\+\_\+fsize should be set to the old file size or -\/1 for \char`\"{}unknown\char`\"{}. The magic and block\+\_\+len arguments should be set to a valid value or 0 for \char`\"{}recommended\char`\"{}. The strong\+\_\+len input should be set to a valid value, 0 for \char`\"{}maximum\char`\"{}, or -\/1 for \char`\"{}miniumum\char`\"{}. Use strong\+\_\+len=0 for the best protection against active hash collision attacks for the given magic type. Use strong\+\_\+len=-\/1 for the smallest signature size that is safe against random hash collisions for the block\+\_\+len and old\+\_\+fsize. Use strong\+\_\+len=20 for something probably good enough against attacks with smaller signatures. On return the 0 or -\/1 input args will be set to recommended values and the returned result will indicate if any inputs were invalid.


\begin{DoxyParams}{Parameters}
{\em old\+\_\+fsize} & -\/ the original file size (-\/1 for \char`\"{}unknown\char`\"{}).\\
\hline
{\em $\ast$magic} & -\/ the magic type to use (0 for \char`\"{}recommended\char`\"{}).\\
\hline
{\em $\ast$block\+\_\+len} & -\/ the block length to use (0 for \char`\"{}recommended\char`\"{}).\\
\hline
{\em $\ast$strong\+\_\+len} & -\/ the strongsum length to use (0 for \char`\"{}maximum\char`\"{}, -\/1 for \char`\"{}minimum\char`\"{}).\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
RS\+\_\+\+DONE if all arguments are valid, otherwise an error code. 
\end{DoxyReturn}


Definition at line \mbox{\hyperlink{sumset_8c_source_l00113}{113}} of file \mbox{\hyperlink{sumset_8c_source}{sumset.\+c}}.

\mbox{\label{librsync_8h_a226f57577fcad2e4c97f3e4d612650d3}} 
\index{librsync.h@{librsync.h}!rs\_sig\_begin@{rs\_sig\_begin}}
\index{rs\_sig\_begin@{rs\_sig\_begin}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_sig\_begin()}{rs\_sig\_begin()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ rs\+\_\+sig\+\_\+begin (\begin{DoxyParamCaption}\item[{size\+\_\+t}]{block\+\_\+len,  }\item[{size\+\_\+t}]{strong\+\_\+len,  }\item[{\mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}}}]{sig\+\_\+magic }\end{DoxyParamCaption})}



Start generating a signature. 

It\textquotesingle{}s recommended you use \mbox{\hyperlink{librsync_8h_a3c4c3fcea2814610109536f3ae029c5e}{rs\+\_\+sig\+\_\+args()}} to get the recommended arguments for this based on the original file size.

\begin{DoxyReturn}{Returns}
A new rs\+\_\+job\+\_\+t into which the old file data can be passed.
\end{DoxyReturn}

\begin{DoxyParams}{Parameters}
{\em sig\+\_\+magic} & Signature file format to generate (0 for \char`\"{}recommended\char`\"{}). See \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}}.\\
\hline
{\em block\+\_\+len} & Checksum block size to use (0 for \char`\"{}recommended\char`\"{}). Larger values make the signature shorter, and the delta longer.\\
\hline
{\em strong\+\_\+len} & Strongsum length in bytes to use (0 for \char`\"{}maximum\char`\"{}, -\/1 for \char`\"{}minimum\char`\"{}). Smaller values make the signature shorter but increase the risk of corruption from hash collisions.\\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a2e111b9ef4acef02f812ec58b8217c8c}{rs\+\_\+sig\+\_\+file()}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{mksum_8c_source_l00110}{110}} of file \mbox{\hyperlink{mksum_8c_source}{mksum.\+c}}.

\mbox{\label{librsync_8h_a6d576b32ff2136be8469f2ecf318d1bf}} 
\index{librsync.h@{librsync.h}!rs\_delta\_begin@{rs\_delta\_begin}}
\index{rs\_delta\_begin@{rs\_delta\_begin}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_delta\_begin()}{rs\_delta\_begin()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ rs\+\_\+delta\+\_\+begin (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$}]{sig }\end{DoxyParamCaption})}



Prepare to compute a streaming delta. 

\begin{DoxyRefDesc}{Todo}
\item[\mbox{\hyperlink{todo__todo000004}{Todo}}]Add a version of this that takes a \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}} controlling the delta format. \end{DoxyRefDesc}


Definition at line \mbox{\hyperlink{delta_8c_source_l00396}{396}} of file \mbox{\hyperlink{delta_8c_source}{delta.\+c}}.

\mbox{\label{librsync_8h_a5898e9ed00b5cdfe5fa58bfa0f25821c}} 
\index{librsync.h@{librsync.h}!rs\_loadsig\_begin@{rs\_loadsig\_begin}}
\index{rs\_loadsig\_begin@{rs\_loadsig\_begin}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_loadsig\_begin()}{rs\_loadsig\_begin()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ rs\+\_\+loadsig\+\_\+begin (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$$\ast$}]{signature }\end{DoxyParamCaption})}



Read a signature from a file into an \mbox{\hyperlink{structrs__signature}{rs\+\_\+signature}} structure in memory. 

Once there, it can be used to generate a delta to a newer version of the file.

\begin{DoxyNote}{Note}
After loading the signatures, you must call \mbox{\hyperlink{librsync_8h_a1c11ff785ebcd7210f5485d0c97fc812}{rs\+\_\+build\+\_\+hash\+\_\+table()}} before you can use them. 
\end{DoxyNote}


Definition at line \mbox{\hyperlink{readsums_8c_source_l00135}{135}} of file \mbox{\hyperlink{readsums_8c_source}{readsums.\+c}}.

\mbox{\label{librsync_8h_a1c11ff785ebcd7210f5485d0c97fc812}} 
\index{librsync.h@{librsync.h}!rs\_build\_hash\_table@{rs\_build\_hash\_table}}
\index{rs\_build\_hash\_table@{rs\_build\_hash\_table}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_build\_hash\_table()}{rs\_build\_hash\_table()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+build\+\_\+hash\+\_\+table (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$}]{sums }\end{DoxyParamCaption})}



Call this after loading a signature to index it. 

Use \mbox{\hyperlink{librsync_8h_a4e801efb30ba20e710f81278473147d1}{rs\+\_\+free\+\_\+sumset()}} to release it after use. 

Definition at line \mbox{\hyperlink{sumset_8c_source_l00274}{274}} of file \mbox{\hyperlink{sumset_8c_source}{sumset.\+c}}.

\mbox{\label{librsync_8h_a15efa6e180d239fee2c195874618b0ea}} 
\index{librsync.h@{librsync.h}!rs\_patch\_begin@{rs\_patch\_begin}}
\index{rs\_patch\_begin@{rs\_patch\_begin}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_patch\_begin()}{rs\_patch\_begin()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} $\ast$ rs\+\_\+patch\+\_\+begin (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afc4bc64a627d7ca181a7e813832313cc}{rs\+\_\+copy\+\_\+cb}} $\ast$}]{copy\+\_\+cb,  }\item[{void $\ast$}]{copy\+\_\+arg }\end{DoxyParamCaption})}



Apply a {\itshape delta} to a {\itshape basis} file to recreate the {\itshape new} file. 

This gives you back a \mbox{\hyperlink{librsync_8h_add6622b38e3fa557301a190876d5ed4a}{rs\+\_\+job\+\_\+t}} object, which can be cranked by calling \mbox{\hyperlink{librsync_8h_aede8e0f42424b9aa29093f94b59ea029}{rs\+\_\+job\+\_\+iter()}} and updating the stream pointers. When finished, call \mbox{\hyperlink{librsync_8h_a297b5522990715aff982f8556052c273}{rs\+\_\+job\+\_\+free()}} to dispose of it.


\begin{DoxyParams}{Parameters}
{\em copy\+\_\+cb} & Callback used to retrieve content from the basis file.\\
\hline
{\em copy\+\_\+arg} & Opaque environment pointer passed through to the callback.\\
\hline
\end{DoxyParams}
\begin{DoxyRefDesc}{Todo}
\item[\mbox{\hyperlink{todo__todo000005}{Todo}}]As output is produced, accumulate the MD4 checksum of the output. Then if we find a CHECKSUM command we can check it\textquotesingle{}s contents against the output.\end{DoxyRefDesc}


\begin{DoxyRefDesc}{Todo}
\item[\mbox{\hyperlink{todo__todo000006}{Todo}}]Implement COPY commands.\end{DoxyRefDesc}


\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{librsync_8h_a76f5d5851aaad2c17bfd9256e344626d}{rs\+\_\+patch\+\_\+file()}} 

\mbox{\hyperlink{api_streaming}{Streaming API}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{patch_8c_source_l00221}{221}} of file \mbox{\hyperlink{patch_8c_source}{patch.\+c}}.

\mbox{\label{librsync_8h_a32b683c0763df3ce8054158232c07fe0}} 
\index{librsync.h@{librsync.h}!rs\_file\_open@{rs\_file\_open}}
\index{rs\_file\_open@{rs\_file\_open}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_file\_open()}{rs\_file\_open()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT FILE $\ast$ rs\+\_\+file\+\_\+open (\begin{DoxyParamCaption}\item[{char const $\ast$}]{filename,  }\item[{char const $\ast$}]{mode,  }\item[{int}]{force }\end{DoxyParamCaption})}



Open a file with special handling for stdin or stdout. 

This provides a platform independent way to open large binary files. A filename \char`\"{}\char`\"{} or \char`\"{}-\/\char`\"{} means use stdin for reading, or stdout for writing.


\begin{DoxyParams}{Parameters}
{\em filename} & -\/ The filename to open.\\
\hline
{\em mode} & -\/ fopen style mode string.\\
\hline
{\em force} & -\/ bool to force overwriting of existing files. \\
\hline
\end{DoxyParams}


Definition at line \mbox{\hyperlink{fileutil_8c_source_l00081}{81}} of file \mbox{\hyperlink{fileutil_8c_source}{fileutil.\+c}}.

\mbox{\label{librsync_8h_a2521aba7896b229e372a2758c0135d3c}} 
\index{librsync.h@{librsync.h}!rs\_file\_close@{rs\_file\_close}}
\index{rs\_file\_close@{rs\_file\_close}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_file\_close()}{rs\_file\_close()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT int rs\+\_\+file\+\_\+close (\begin{DoxyParamCaption}\item[{FILE $\ast$}]{file }\end{DoxyParamCaption})}



Close a file with special handling for stdin or stdout. 

This will not actually close the file if it is stdin or stdout.


\begin{DoxyParams}{Parameters}
{\em file} & -\/ the stdio file to close. \\
\hline
\end{DoxyParams}


Definition at line \mbox{\hyperlink{fileutil_8c_source_l00120}{120}} of file \mbox{\hyperlink{fileutil_8c_source}{fileutil.\+c}}.

\mbox{\label{librsync_8h_a55023ca0d195fa10eedeb8a4865b1e1e}} 
\index{librsync.h@{librsync.h}!rs\_file\_size@{rs\_file\_size}}
\index{rs\_file\_size@{rs\_file\_size}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_file\_size()}{rs\_file\_size()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT rs\+\_\+long\+\_\+t rs\+\_\+file\+\_\+size (\begin{DoxyParamCaption}\item[{FILE $\ast$}]{file }\end{DoxyParamCaption})}



Get the size of a file. 

This provides a platform independent way to get the size of large files. It will return -\/1 if the size cannot be determined because it is not a regular file.


\begin{DoxyParams}{Parameters}
{\em file} & -\/ the stdio file to get the size of. \\
\hline
\end{DoxyParams}


Definition at line \mbox{\hyperlink{fileutil_8c_source_l00127}{127}} of file \mbox{\hyperlink{fileutil_8c_source}{fileutil.\+c}}.

\mbox{\label{librsync_8h_abc5c16dc95a71e609480a74bc6e128ac}} 
\index{librsync.h@{librsync.h}!rs\_file\_copy\_cb@{rs\_file\_copy\_cb}}
\index{rs\_file\_copy\_cb@{rs\_file\_copy\_cb}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_file\_copy\_cb()}{rs\_file\_copy\_cb()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+file\+\_\+copy\+\_\+cb (\begin{DoxyParamCaption}\item[{void $\ast$}]{arg,  }\item[{rs\+\_\+long\+\_\+t}]{pos,  }\item[{size\+\_\+t $\ast$}]{len,  }\item[{void $\ast$$\ast$}]{buf }\end{DoxyParamCaption})}



\mbox{\hyperlink{librsync_8h_afc4bc64a627d7ca181a7e813832313cc}{rs\+\_\+copy\+\_\+cb}} that reads from a stdio file. 



Definition at line \mbox{\hyperlink{fileutil_8c_source_l00135}{135}} of file \mbox{\hyperlink{fileutil_8c_source}{fileutil.\+c}}.

\mbox{\label{librsync_8h_a2e111b9ef4acef02f812ec58b8217c8c}} 
\index{librsync.h@{librsync.h}!rs\_sig\_file@{rs\_sig\_file}}
\index{rs\_sig\_file@{rs\_sig\_file}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_sig\_file()}{rs\_sig\_file()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+sig\+\_\+file (\begin{DoxyParamCaption}\item[{FILE $\ast$}]{old\+\_\+file,  }\item[{FILE $\ast$}]{sig\+\_\+file,  }\item[{size\+\_\+t}]{block\+\_\+len,  }\item[{size\+\_\+t}]{strong\+\_\+len,  }\item[{\mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}}}]{sig\+\_\+magic,  }\item[{\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$}]{stats }\end{DoxyParamCaption})}



Generate the signature of a basis file, and write it out to another. 

It\textquotesingle{}s recommended you use \mbox{\hyperlink{librsync_8h_a3c4c3fcea2814610109536f3ae029c5e}{rs\+\_\+sig\+\_\+args()}} to get the recommended arguments for this based on the original file size.


\begin{DoxyParams}{Parameters}
{\em old\+\_\+file} & Stdio readable file whose signature will be generated.\\
\hline
{\em sig\+\_\+file} & Writable stdio file to which the signature will be written./\\
\hline
{\em block\+\_\+len} & Checksum block size to use (0 for \char`\"{}recommended\char`\"{}). Larger values make the signature shorter, and the delta longer.\\
\hline
{\em strong\+\_\+len} & Strongsum length in bytes to use (0 for \char`\"{}maximum\char`\"{}, -\/1 for \char`\"{}minimum\char`\"{}). Smaller values make the signature shorter but increase the risk of corruption from hash collisions.\\
\hline
{\em sig\+\_\+magic} & Signature file format to generate (0 for \char`\"{}recommended\char`\"{}). See \mbox{\hyperlink{librsync_8h_ab6abafd1db0a3947bb3c076507f4f7c2}{rs\+\_\+magic\+\_\+number}}.\\
\hline
{\em stats} & Optional pointer to receive statistics.\\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_whole}{Whole-\/file API}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{whole_8c_source_l00067}{67}} of file \mbox{\hyperlink{whole_8c_source}{whole.\+c}}.

\mbox{\label{librsync_8h_a69a679a66bcf4b35b3e22ca0e9791c02}} 
\index{librsync.h@{librsync.h}!rs\_loadsig\_file@{rs\_loadsig\_file}}
\index{rs\_loadsig\_file@{rs\_loadsig\_file}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_loadsig\_file()}{rs\_loadsig\_file()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+loadsig\+\_\+file (\begin{DoxyParamCaption}\item[{FILE $\ast$}]{sig\+\_\+file,  }\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$$\ast$}]{sumset,  }\item[{\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$}]{stats }\end{DoxyParamCaption})}



Load signatures from a signature file into memory. 


\begin{DoxyParams}{Parameters}
{\em sig\+\_\+file} & Readable stdio file from which the signature will be read.\\
\hline
{\em sumset} & on return points to the newly allocated structure.\\
\hline
{\em stats} & Optional pointer to receive statistics.\\
\hline
\end{DoxyParams}
\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_whole}{Whole-\/file API}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{whole_8c_source_l00090}{90}} of file \mbox{\hyperlink{whole_8c_source}{whole.\+c}}.

\mbox{\label{librsync_8h_a633e49044273bd2b7c1ce568b52b7e91}} 
\index{librsync.h@{librsync.h}!rs\_delta\_file@{rs\_delta\_file}}
\index{rs\_delta\_file@{rs\_delta\_file}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_delta\_file()}{rs\_delta\_file()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+delta\+\_\+file (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{librsync_8h_afb2a9cb505daeb8e519d06686f5caabf}{rs\+\_\+signature\+\_\+t}} $\ast$}]{sig,  }\item[{FILE $\ast$}]{new\+\_\+file,  }\item[{FILE $\ast$}]{delta\+\_\+file,  }\item[{\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$}]{stats }\end{DoxyParamCaption})}



Generate a delta between a signature and a new file into a delta file. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_whole}{Whole-\/file API}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{whole_8c_source_l00108}{108}} of file \mbox{\hyperlink{whole_8c_source}{whole.\+c}}.

\mbox{\label{librsync_8h_a76f5d5851aaad2c17bfd9256e344626d}} 
\index{librsync.h@{librsync.h}!rs\_patch\_file@{rs\_patch\_file}}
\index{rs\_patch\_file@{rs\_patch\_file}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_patch\_file()}{rs\_patch\_file()}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT \mbox{\hyperlink{librsync_8h_a7feb858ceba3b8f3cf048d49be108253}{rs\+\_\+result}} rs\+\_\+patch\+\_\+file (\begin{DoxyParamCaption}\item[{FILE $\ast$}]{basis\+\_\+file,  }\item[{FILE $\ast$}]{delta\+\_\+file,  }\item[{FILE $\ast$}]{new\+\_\+file,  }\item[{\mbox{\hyperlink{librsync_8h_a576eccd11a2696cb46140d5e43c83d7e}{rs\+\_\+stats\+\_\+t}} $\ast$}]{stats }\end{DoxyParamCaption})}



Apply a patch, relative to a basis, into a new file. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{api_whole}{Whole-\/file API}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{whole_8c_source_l00124}{124}} of file \mbox{\hyperlink{whole_8c_source}{whole.\+c}}.



\doxysubsubsection{Variable Documentation}
\mbox{\label{librsync_8h_aed3a9f0a24f00870c88e910924f90ac0}} 
\index{librsync.h@{librsync.h}!rs\_librsync\_version@{rs\_librsync\_version}}
\index{rs\_librsync\_version@{rs\_librsync\_version}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_librsync\_version}{rs\_librsync\_version}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT char const rs\+\_\+librsync\+\_\+version\mbox{[}$\,$\mbox{]}\hspace{0.3cm}{\ttfamily [extern]}}



Library version string. 

\begin{DoxySeeAlso}{See also}
\mbox{\hyperlink{page_versioning}{Versioning}} 
\end{DoxySeeAlso}


Definition at line \mbox{\hyperlink{version_8c_source_l00025}{25}} of file \mbox{\hyperlink{version_8c_source}{version.\+c}}.

\mbox{\label{librsync_8h_a7b44861ca10080e43c713f73f3540f33}} 
\index{librsync.h@{librsync.h}!RS\_MD4\_SUM\_LENGTH@{RS\_MD4\_SUM\_LENGTH}}
\index{RS\_MD4\_SUM\_LENGTH@{RS\_MD4\_SUM\_LENGTH}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{RS\_MD4\_SUM\_LENGTH}{RS\_MD4\_SUM\_LENGTH}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT const int RS\+\_\+\+MD4\+\_\+\+SUM\+\_\+\+LENGTH\hspace{0.3cm}{\ttfamily [extern]}}



Definition at line \mbox{\hyperlink{checksum_8c_source_l00030}{30}} of file \mbox{\hyperlink{checksum_8c_source}{checksum.\+c}}.

\mbox{\label{librsync_8h_a03fd1c9386b2d8ad3a39c99ef1ed2f2e}} 
\index{librsync.h@{librsync.h}!RS\_BLAKE2\_SUM\_LENGTH@{RS\_BLAKE2\_SUM\_LENGTH}}
\index{RS\_BLAKE2\_SUM\_LENGTH@{RS\_BLAKE2\_SUM\_LENGTH}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{RS\_BLAKE2\_SUM\_LENGTH}{RS\_BLAKE2\_SUM\_LENGTH}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT const int RS\+\_\+\+BLAKE2\+\_\+\+SUM\+\_\+\+LENGTH}



Definition at line \mbox{\hyperlink{librsync_8h_source_l00238}{238}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

\mbox{\label{librsync_8h_adf003594ce4521baf206b54765250e0e}} 
\index{librsync.h@{librsync.h}!rs\_inbuflen@{rs\_inbuflen}}
\index{rs\_inbuflen@{rs\_inbuflen}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_inbuflen}{rs\_inbuflen}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT int rs\+\_\+inbuflen\hspace{0.3cm}{\ttfamily [extern]}}



Buffer sizes for file IO. 

The default 0 means use the recommended buffer size for the operation being performed, any other value will override the recommended sizes. You probably only need to change these in testing.

Buffer sizes for file IO. 

Definition at line \mbox{\hyperlink{whole_8c_source_l00041}{41}} of file \mbox{\hyperlink{whole_8c_source}{whole.\+c}}.

\mbox{\label{librsync_8h_aafe1f83dd0d6c290de29d52720cc4dc4}} 
\index{librsync.h@{librsync.h}!rs\_outbuflen@{rs\_outbuflen}}
\index{rs\_outbuflen@{rs\_outbuflen}!librsync.h@{librsync.h}}
\doxyparagraph{\texorpdfstring{rs\_outbuflen}{rs\_outbuflen}}
{\footnotesize\ttfamily LIBRSYNC\+\_\+\+EXPORT int rs\+\_\+outbuflen}



Definition at line \mbox{\hyperlink{librsync_8h_source_l00564}{564}} of file \mbox{\hyperlink{librsync_8h_source}{librsync.\+h}}.

