ipack.c - 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 ipack.c (2001B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 /* Err bitreich.org 70 i 2 * ISC License Err bitreich.org 70 i 3 * Err bitreich.org 70 i 4 * (c) 2019 Roberto E. Vargas Caballero Err bitreich.org 70 i 5 * Err bitreich.org 70 i 6 * Permission to use, copy, modify, and/or distribute this software for any Err bitreich.org 70 i 7 * purpose with or without fee is hereby granted, provided that the above Err bitreich.org 70 i 8 * copyright notice and this permission notice appear in all copies. Err bitreich.org 70 i 9 * Err bitreich.org 70 i 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES Err bitreich.org 70 i 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF Err bitreich.org 70 i 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR Err bitreich.org 70 i 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES Err bitreich.org 70 i 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN Err bitreich.org 70 i 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF Err bitreich.org 70 i 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Err bitreich.org 70 i 17 */ Err bitreich.org 70 i 18 Err bitreich.org 70 i 19 #include Err bitreich.org 70 i 20 #include Err bitreich.org 70 i 21 #include Err bitreich.org 70 i 22 #include Err bitreich.org 70 i 23 Err bitreich.org 70 i 24 static int Err bitreich.org 70 i 25 lpack(unsigned char *dst, char *fmt, va_list va) Err bitreich.org 70 i 26 { Err bitreich.org 70 i 27 unsigned char *bp, *cp; Err bitreich.org 70 i 28 unsigned s; Err bitreich.org 70 i 29 unsigned long l; Err bitreich.org 70 i 30 unsigned long long q; Err bitreich.org 70 i 31 int n; Err bitreich.org 70 i 32 Err bitreich.org 70 i 33 bp = dst; Err bitreich.org 70 i 34 while (*fmt) { Err bitreich.org 70 i 35 switch (*fmt++) { Err bitreich.org 70 i 36 case '\'': Err bitreich.org 70 i 37 n = atoi(fmt); Err bitreich.org 70 i 38 while (isdigit(*fmt)) Err bitreich.org 70 i 39 fmt++; Err bitreich.org 70 i 40 cp = va_arg(va, unsigned char *); Err bitreich.org 70 i 41 while (n--) Err bitreich.org 70 i 42 *bp++ = *cp++; Err bitreich.org 70 i 43 break; Err bitreich.org 70 i 44 case 'c': Err bitreich.org 70 i 45 *bp++ = va_arg(va, unsigned); Err bitreich.org 70 i 46 break; Err bitreich.org 70 i 47 case 's': Err bitreich.org 70 i 48 s = va_arg(va, unsigned); Err bitreich.org 70 i 49 *bp++ = s; Err bitreich.org 70 i 50 *bp++ = s >> 8; Err bitreich.org 70 i 51 break; Err bitreich.org 70 i 52 case 'l': Err bitreich.org 70 i 53 l = va_arg(va, unsigned long); Err bitreich.org 70 i 54 *bp++ = l; Err bitreich.org 70 i 55 *bp++ = l >> 8; Err bitreich.org 70 i 56 *bp++ = l >> 16; Err bitreich.org 70 i 57 *bp++ = l >> 24; Err bitreich.org 70 i 58 break; Err bitreich.org 70 i 59 case 'q': Err bitreich.org 70 i 60 q = va_arg(va, unsigned long long); Err bitreich.org 70 i 61 *bp++ = q; Err bitreich.org 70 i 62 *bp++ = q >> 8; Err bitreich.org 70 i 63 *bp++ = q >> 16; Err bitreich.org 70 i 64 *bp++ = q >> 24; Err bitreich.org 70 i 65 *bp++ = q >> 32; Err bitreich.org 70 i 66 *bp++ = q >> 40; Err bitreich.org 70 i 67 *bp++ = q >> 48; Err bitreich.org 70 i 68 *bp++ = q >> 56; Err bitreich.org 70 i 69 break; Err bitreich.org 70 i 70 default: Err bitreich.org 70 i 71 va_end(va); Err bitreich.org 70 i 72 return -1; Err bitreich.org 70 i 73 } Err bitreich.org 70 i 74 } Err bitreich.org 70 i 75 Err bitreich.org 70 i 76 return bp - dst; Err bitreich.org 70 i 77 } Err bitreich.org 70 i 78 Err bitreich.org 70 i 79 int Err bitreich.org 70 i 80 pack(unsigned char *dst, char *fmt, ...) Err bitreich.org 70 i 81 { Err bitreich.org 70 i 82 int r; Err bitreich.org 70 i 83 int (*fn)(unsigned char *dst, char *fmt, va_list va); Err bitreich.org 70 i 84 va_list va; Err bitreich.org 70 i 85 Err bitreich.org 70 i 86 va_start(va, fmt); Err bitreich.org 70 i 87 fn = lpack; Err bitreich.org 70 i 88 r = (*fn)(dst, fmt, va); Err bitreich.org 70 i 89 va_end(va); Err bitreich.org 70 i 90 Err bitreich.org 70 i 91 return r; Err bitreich.org 70 i 92 } Err bitreich.org 70 .