iAdd pack/unpack functions - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 009a69939e6ce193b6bf6ab287aa007a4b8ab11e /scm/dedup/commit/009a69939e6ce193b6bf6ab287aa007a4b8ab11e.gph bitreich.org 70 1parent 2ddf3b5d77e2dc2b1586359d720a0c502b7a8c0d /scm/dedup/commit/2ddf3b5d77e2dc2b1586359d720a0c502b7a8c0d.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Thu, 21 Feb 2019 08:54:12 +0000 Err bitreich.org 70 i Err bitreich.org 70 iAdd pack/unpack functions Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 8 ++++---- Err bitreich.org 70 i M dedup.c | 1 + Err bitreich.org 70 i A dedup.h | 2 ++ Err bitreich.org 70 i A pack.c | 92 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i A unpack.c | 97 ++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 196 insertions(+), 4 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/dedup/file/Makefile.gph bitreich.org 70 i@@ -2,9 +2,9 @@ VERSION = 0.3 Err bitreich.org 70 i PREFIX = /usr/local Err bitreich.org 70 i MANPREFIX = $(PREFIX)/man Err bitreich.org 70 i BIN = dedup Err bitreich.org 70 i-SRC = $(BIN).c Err bitreich.org 70 i-OBJ = $(BIN).o Err bitreich.org 70 i-DISTFILES = $(SRC) LICENSE Makefile README arg.h $(BIN).1 tree.h Err bitreich.org 70 i+SRC = $(BIN).c pack.c unpack.c Err bitreich.org 70 i+OBJ = $(BIN).o pack.o unpack.o Err bitreich.org 70 i+DISTFILES = $(SRC) LICENSE Makefile README arg.h $(BIN).1 dedup.h tree.h Err bitreich.org 70 i Err bitreich.org 70 i CFLAGS = -g -Wall Err bitreich.org 70 i CPPFLAGS = -I/usr/local/include -D_FILE_OFFSET_BITS=64 Err bitreich.org 70 i@@ -13,7 +13,7 @@ LDLIBS = -lcrypto -llz4 Err bitreich.org 70 i Err bitreich.org 70 i all: $(BIN) Err bitreich.org 70 i Err bitreich.org 70 i-$(OBJ): arg.h tree.h Err bitreich.org 70 i+$(OBJ): arg.h tree.h dedup.h Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i rm -f $(OBJ) $(BIN) $(BIN)-$(VERSION).tar.gz Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -12,6 +12,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i #include "arg.h" Err bitreich.org 70 i+#include "dedup.h" Err bitreich.org 70 i #include "tree.h" Err bitreich.org 70 i Err bitreich.org 70 i #define SNAPSF ".snapshots" Err bitreich.org 70 1diff --git a/dedup.h b/dedup.h /scm/dedup/file/dedup.h.gph bitreich.org 70 i@@ -0,0 +1,2 @@ Err bitreich.org 70 i+int pack(unsigned char *dst, char *fmt, ...); Err bitreich.org 70 i+int unpack(unsigned char *src, char *fmt, ...); Err bitreich.org 70 1diff --git a/pack.c b/pack.c /scm/dedup/file/pack.c.gph bitreich.org 70 i@@ -0,0 +1,92 @@ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * ISC License Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * (c) 2019 Roberto E. Vargas Caballero Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * Permission to use, copy, modify, and/or distribute this software for any Err bitreich.org 70 i+ * purpose with or without fee is hereby granted, provided that the above Err bitreich.org 70 i+ * copyright notice and this permission notice appear in all copies. Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES Err bitreich.org 70 i+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF Err bitreich.org 70 i+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR Err bitreich.org 70 i+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES Err bitreich.org 70 i+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN Err bitreich.org 70 i+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF Err bitreich.org 70 i+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+ Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+static int Err bitreich.org 70 i+lpack(unsigned char *dst, char *fmt, va_list va) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ unsigned char *bp, *cp; Err bitreich.org 70 i+ unsigned s; Err bitreich.org 70 i+ unsigned long l; Err bitreich.org 70 i+ unsigned long long q; Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ bp = dst; Err bitreich.org 70 i+ while (*fmt) { Err bitreich.org 70 i+ switch (*fmt++) { Err bitreich.org 70 i+ case '\'': Err bitreich.org 70 i+ n = atoi(fmt); Err bitreich.org 70 i+ while (isdigit(*fmt)) Err bitreich.org 70 i+ fmt++; Err bitreich.org 70 i+ cp = va_arg(va, unsigned char *); Err bitreich.org 70 i+ while (n--) Err bitreich.org 70 i+ *bp++ = *cp++; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 'c': Err bitreich.org 70 i+ *bp++ = va_arg(va, unsigned); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 's': Err bitreich.org 70 i+ s = va_arg(va, unsigned); Err bitreich.org 70 i+ *bp++ = s; Err bitreich.org 70 i+ *bp++ = s >> 8; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 'l': Err bitreich.org 70 i+ l = va_arg(va, unsigned long); Err bitreich.org 70 i+ *bp++ = l; Err bitreich.org 70 i+ *bp++ = l >> 8; Err bitreich.org 70 i+ *bp++ = l >> 16; Err bitreich.org 70 i+ *bp++ = l >> 24; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 'q': Err bitreich.org 70 i+ q = va_arg(va, unsigned long long); Err bitreich.org 70 i+ *bp++ = q; Err bitreich.org 70 i+ *bp++ = q >> 8; Err bitreich.org 70 i+ *bp++ = q >> 16; Err bitreich.org 70 i+ *bp++ = q >> 24; Err bitreich.org 70 i+ *bp++ = q >> 32; Err bitreich.org 70 i+ *bp++ = q >> 40; Err bitreich.org 70 i+ *bp++ = q >> 48; Err bitreich.org 70 i+ *bp++ = q >> 56; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i+ va_end(va); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ return bp - dst; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+pack(unsigned char *dst, char *fmt, ...) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int r; Err bitreich.org 70 i+ int (*fn)(unsigned char *dst, char *fmt, va_list va); Err bitreich.org 70 i+ va_list va; Err bitreich.org 70 i+ Err bitreich.org 70 i+ va_start(va, fmt); Err bitreich.org 70 i+ fn = lpack; Err bitreich.org 70 i+ r = (*fn)(dst, fmt, va); Err bitreich.org 70 i+ va_end(va); Err bitreich.org 70 i+ Err bitreich.org 70 i+ return r; Err bitreich.org 70 i+} Err bitreich.org 70 1diff --git a/unpack.c b/unpack.c /scm/dedup/file/unpack.c.gph bitreich.org 70 i@@ -0,0 +1,97 @@ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * ISC License Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * (c) 2019 Roberto E. Vargas Caballero Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * Permission to use, copy, modify, and/or distribute this software for any Err bitreich.org 70 i+ * purpose with or without fee is hereby granted, provided that the above Err bitreich.org 70 i+ * copyright notice and this permission notice appear in all copies. Err bitreich.org 70 i+ * Err bitreich.org 70 i+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES Err bitreich.org 70 i+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF Err bitreich.org 70 i+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR Err bitreich.org 70 i+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES Err bitreich.org 70 i+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN Err bitreich.org 70 i+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF Err bitreich.org 70 i+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+ Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+static int Err bitreich.org 70 i+lunpack(unsigned char *src, char *fmt, va_list va) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ unsigned char *bp, *cp; Err bitreich.org 70 i+ unsigned short *sp; Err bitreich.org 70 i+ unsigned s; Err bitreich.org 70 i+ unsigned long *lp, l; Err bitreich.org 70 i+ unsigned long long *qp, q; Err bitreich.org 70 i+ int n; Err bitreich.org 70 i+ Err bitreich.org 70 i+ bp = src; Err bitreich.org 70 i+ while (*fmt) { Err bitreich.org 70 i+ switch (*fmt++) { Err bitreich.org 70 i+ case '\'': Err bitreich.org 70 i+ n = atoi(fmt); Err bitreich.org 70 i+ while (isdigit(*fmt)) Err bitreich.org 70 i+ fmt++; Err bitreich.org 70 i+ cp = va_arg(va, unsigned char *); Err bitreich.org 70 i+ while (n--) Err bitreich.org 70 i+ *cp++ = *bp++; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 'c': Err bitreich.org 70 i+ cp = va_arg(va, unsigned char *); Err bitreich.org 70 i+ *cp = *bp++; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 's': Err bitreich.org 70 i+ sp = va_arg(va, unsigned short *); Err bitreich.org 70 i+ s = (unsigned) *bp++; Err bitreich.org 70 i+ s |= (unsigned) *bp++ << 8; Err bitreich.org 70 i+ *sp = s; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 'l': Err bitreich.org 70 i+ lp = va_arg(va, unsigned long *); Err bitreich.org 70 i+ l = (unsigned long) *bp++; Err bitreich.org 70 i+ l |= (unsigned long) *bp++ << 8; Err bitreich.org 70 i+ l |= (unsigned long) *bp++ << 16; Err bitreich.org 70 i+ l |= (unsigned long) *bp++ << 24; Err bitreich.org 70 i+ *lp = l; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ case 'q': Err bitreich.org 70 i+ qp = va_arg(va, unsigned long long *); Err bitreich.org 70 i+ q = (unsigned long long) *bp++; Err bitreich.org 70 i+ q |= (unsigned long long) *bp++ << 8; Err bitreich.org 70 i+ q |= (unsigned long long) *bp++ << 16; Err bitreich.org 70 i+ q |= (unsigned long long) *bp++ << 24; Err bitreich.org 70 i+ q |= (unsigned long long) *bp++ << 32; Err bitreich.org 70 i+ q |= (unsigned long long) *bp++ << 40; Err bitreich.org 70 i+ q |= (unsigned long long) *bp++ << 48; Err bitreich.org 70 i+ q |= (unsigned long long) *bp++ << 56; Err bitreich.org 70 i+ *qp = q; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i+ va_end(va); Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ return bp - src; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+unpack(unsigned char *src, char *fmt, ...) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int r; Err bitreich.org 70 i+ int (*fn)(unsigned char *dst, char *fmt, va_list va); Err bitreich.org 70 i+ va_list va; Err bitreich.org 70 i+ Err bitreich.org 70 i+ va_start(va, fmt); Err bitreich.org 70 i+ fn = lunpack; Err bitreich.org 70 i+ r = (*fn)(src, fmt, va); Err bitreich.org 70 i+ va_end(va); Err bitreich.org 70 i+ Err bitreich.org 70 i+ return r; Err bitreich.org 70 i+} Err bitreich.org 70 .