tcompress.c - dedup - data deduplication program HTML git clone git://bitreich.org/dedup/ git://hg6vgqziawt5s4dj.onion/dedup/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- tcompress.c (2091B) --- 1 #include <sys/types.h> 2 3 #include <err.h> 4 #include <stdint.h> 5 #include <stdio.h> 6 #include <string.h> 7 #include <strings.h> 8 9 #include "blake2.h" 10 #include "dedup.h" 11 12 static struct compr_ops { 13 int (*init)(struct compr_ctx *ctx); 14 size_t (*size)(struct compr_ctx *ctx, size_t n); 15 size_t (*compr)(struct compr_ctx *ctx, const void *in, void *out, 16 size_t insize, size_t outsize); 17 size_t (*decompr)(struct compr_ctx *ctx, const void *in, void *out, 18 size_t insize, size_t outsize); 19 int (*final)(struct compr_ctx *ctx); 20 } comprs[NR_COMPRS] = { 21 { 22 .init = none_init, 23 .size = none_size, 24 .compr = none_compr, 25 .decompr = none_decompr, 26 .final = none_final, 27 }, 28 { 29 .init = lz4_init, 30 .size = lz4_size, 31 .compr = lz4_compr, 32 .decompr = lz4_decompr, 33 .final = lz4_final, 34 }, 35 { 36 .init = snappy_init, 37 .size = snappy_size, 38 .compr = snappy_compr, 39 .decompr = snappy_decompr, 40 .final = snappy_final, 41 }, 42 }; 43 44 static char *algomap[NR_COMPRS] = { 45 [COMPR_NONE] = "none", 46 [COMPR_LZ4] = "lz4", 47 [COMPR_SNAPPY] = "snappy", 48 }; 49 50 int 51 compr_init(struct compr_ctx *ctx, int type) 52 { 53 if (type < 0 || type >= NR_COMPRS) 54 return -1; 55 56 ctx->ops = &comprs[type]; 57 return (*ctx->ops->init)(ctx); 58 } 59 60 int 61 compr_size(struct compr_ctx *ctx, size_t n) 62 { 63 return (*ctx->ops->size)(ctx, n); 64 } 65 66 size_t 67 compr(struct compr_ctx *ctx, const void *in, void *out, 68 size_t insize, size_t outsize) 69 { 70 return (*ctx->ops->compr)(ctx, in, out, insize, outsize); 71 } 72 73 size_t 74 decompr(struct compr_ctx *ctx, const void *in, void *out, 75 size_t insize, size_t outsize) 76 { 77 return (*ctx->ops->decompr)(ctx, in, out, insize, outsize); 78 } 79 80 int 81 compr_final(struct compr_ctx *ctx) 82 { 83 return (*ctx->ops->final)(ctx); 84 } 85 86 int 87 compr_name2type(char *name) 88 { 89 size_t i; 90 91 for (i = 0; i < NR_COMPRS; i++) 92 if (strcasecmp(algomap[i], name) == 0) 93 return i; 94 return -1; 95 } 96 97 char * 98 compr_type2name(int type) 99 { 100 if (type < 0 || type >= NR_HASHES) 101 return NULL; 102 return algomap[type]; 103 } 104 105 void 106 compr_list(int fd) 107 { 108 size_t i; 109 110 for (i = 0; i < NR_COMPRS; i++) 111 dprintf(fd, "%s\n", algomap[i]); 112 }