Make Pcompress functionality into a library - initial changes.
This commit is contained in:
parent
8db0bef184
commit
c859cf35d5
7 changed files with 3004 additions and 2694 deletions
51
Makefile.in
51
Makefile.in
|
@ -23,13 +23,20 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
PROG= pcompress
|
PROG= pcompress
|
||||||
MAINSRCS = main.c utils/utils.c allocator.c lzma_compress.c ppmd_compress.c \
|
LIB=libpcompress.so
|
||||||
|
LINKLIB=pcompress
|
||||||
|
LIBVER=1
|
||||||
|
MAINSRCS = utils/utils.c allocator.c lzma_compress.c ppmd_compress.c \
|
||||||
adaptive_compress.c lzfx_compress.c lz4_compress.c none_compress.c \
|
adaptive_compress.c lzfx_compress.c lz4_compress.c none_compress.c \
|
||||||
utils/xxhash_base.c utils/heap.c utils/cpuid.c
|
utils/xxhash_base.c utils/heap.c utils/cpuid.c pcompress.c
|
||||||
MAINHDRS = allocator.h pcompress.h utils/utils.h utils/xxhash.h utils/heap.h \
|
MAINHDRS = allocator.h pcompress.h utils/utils.h utils/xxhash.h utils/heap.h \
|
||||||
utils/cpuid.h utils/xxhash.h
|
utils/cpuid.h utils/xxhash.h
|
||||||
MAINOBJS = $(MAINSRCS:.c=.o)
|
MAINOBJS = $(MAINSRCS:.c=.o)
|
||||||
|
|
||||||
|
PROGSRCS = main.c
|
||||||
|
PROGHDRS = pcompress.h utils/utils.h
|
||||||
|
PROGOBJS = $(PROGSRCS:.c=.o)
|
||||||
|
|
||||||
XSALSA20_STREAM_C = crypto/xsalsa20/stream.c
|
XSALSA20_STREAM_C = crypto/xsalsa20/stream.c
|
||||||
XSALSA20_STREAM_ASM = crypto/xsalsa20/stream.s
|
XSALSA20_STREAM_ASM = crypto/xsalsa20/stream.s
|
||||||
XSALSA20_DEBUG = -DSALSA20_DEBUG
|
XSALSA20_DEBUG = -DSALSA20_DEBUG
|
||||||
|
@ -190,25 +197,26 @@ COMMON_CPPFLAGS = -I. -I./lzma -I./lzfx -I./lz4 -I./rabin -I./bsdiff -DNODEFAULT
|
||||||
COMMON_VEC_FLAGS = -ftree-vectorize
|
COMMON_VEC_FLAGS = -ftree-vectorize
|
||||||
COMMON_LOOP_OPTFLAGS = $(VEC_FLAGS) -floop-interchange -floop-block
|
COMMON_LOOP_OPTFLAGS = $(VEC_FLAGS) -floop-interchange -floop-block
|
||||||
LDLIBS = -ldl -L./buildtmp -Wl,-R@LIBBZ2_DIR@ -lbz2 -L./buildtmp -Wl,-R@LIBZ_DIR@ -lz -lm @LIBBSCLFLAGS@ \
|
LDLIBS = -ldl -L./buildtmp -Wl,-R@LIBBZ2_DIR@ -lbz2 -L./buildtmp -Wl,-R@LIBZ_DIR@ -lz -lm @LIBBSCLFLAGS@ \
|
||||||
-L./buildtmp -Wl,-R@OPENSSL_LIBDIR@ -lcrypto -lrt $(EXTRA_LDFLAGS)
|
-L./buildtmp -Wl,-R@OPENSSL_LIBDIR@ -lcrypto -lrt $(EXTRA_LDFLAGS) -Wl,-R/usr/lib,--enable-new-dtags \
|
||||||
|
-Wl,-R/usr/lib64,--enable-new-dtags -Wl,-R.,--enable-new-dtags
|
||||||
OBJS = $(MAINOBJS) $(LZMAOBJS) $(PPMDOBJS) $(LZFXOBJS) $(LZ4OBJS) $(CRCOBJS) \
|
OBJS = $(MAINOBJS) $(LZMAOBJS) $(PPMDOBJS) $(LZFXOBJS) $(LZ4OBJS) $(CRCOBJS) \
|
||||||
$(RABINOBJS) $(BSDIFFOBJS) $(LZPOBJS) $(DELTA2OBJS) @LIBBSCWRAPOBJ@ $(SKEINOBJS) \
|
$(RABINOBJS) $(BSDIFFOBJS) $(LZPOBJS) $(DELTA2OBJS) @LIBBSCWRAPOBJ@ $(SKEINOBJS) \
|
||||||
$(SKEIN_BLOCK_OBJ) @SHA2ASM_OBJS@ @SHA2_OBJS@ $(KECCAK_OBJS) $(KECCAK_OBJS_ASM) \
|
$(SKEIN_BLOCK_OBJ) @SHA2ASM_OBJS@ @SHA2_OBJS@ $(KECCAK_OBJS) $(KECCAK_OBJS_ASM) \
|
||||||
$(TRANSP_OBJS) $(CRYPTO_OBJS) $(ZLIB_OBJS) $(BZLIB_OBJS) $(XXHASH_OBJS) $(BLAKE2_OBJS) \
|
$(TRANSP_OBJS) $(CRYPTO_OBJS) $(ZLIB_OBJS) $(BZLIB_OBJS) $(XXHASH_OBJS) $(BLAKE2_OBJS) \
|
||||||
@CRYPTO_COMPAT_OBJS@ $(CRYPTO_ASM_OBJS)
|
@CRYPTO_COMPAT_OBJS@ $(CRYPTO_ASM_OBJS)
|
||||||
|
|
||||||
DEBUG_LINK = g++ -pthread @LIBBSCGEN_OPT@ @EXTRA_OPT_FLAGS@ -fopenmp
|
DEBUG_LINK = g++ -pthread @LIBBSCGEN_OPT@ @EXTRA_OPT_FLAGS@ -fopenmp -fPIC
|
||||||
DEBUG_COMPILE = gcc -g -c @EXTRA_OPT_FLAGS@
|
DEBUG_COMPILE = gcc -g -c @EXTRA_OPT_FLAGS@ -fPIC
|
||||||
DEBUG_COMPILE_cpp = g++ -g -c @EXTRA_OPT_FLAGS@
|
DEBUG_COMPILE_cpp = g++ -g -c @EXTRA_OPT_FLAGS@ -fPIC
|
||||||
DEBUG_VEC_FLAGS =
|
DEBUG_VEC_FLAGS =
|
||||||
DEBUG_LOOP_OPTFLAGS =
|
DEBUG_LOOP_OPTFLAGS =
|
||||||
DEBUG_GEN_OPT = -O -fno-omit-frame-pointer @LIBBSCGEN_OPT@ -fopenmp
|
DEBUG_GEN_OPT = -O -fno-omit-frame-pointer @LIBBSCGEN_OPT@ -fopenmp
|
||||||
DEBUG_CPPFLAGS = $(COMMON_CPPFLAGS)
|
DEBUG_CPPFLAGS = $(COMMON_CPPFLAGS)
|
||||||
DEBUG_FPTR_FLAG =
|
DEBUG_FPTR_FLAG =
|
||||||
|
|
||||||
RELEASE_LINK = g++ -pthread @LIBBSCGEN_OPT@ @EXTRA_OPT_FLAGS@ -fopenmp
|
RELEASE_LINK = g++ -pthread @LIBBSCGEN_OPT@ @EXTRA_OPT_FLAGS@ -fopenmp -fPIC
|
||||||
RELEASE_COMPILE = gcc -c @EXTRA_OPT_FLAGS@
|
RELEASE_COMPILE = gcc -c @EXTRA_OPT_FLAGS@ -fPIC
|
||||||
RELEASE_COMPILE_cpp = g++ -c @EXTRA_OPT_FLAGS@
|
RELEASE_COMPILE_cpp = g++ -c @EXTRA_OPT_FLAGS@ -fPIC
|
||||||
RELEASE_VEC_FLAGS = $(COMMON_VEC_FLAGS)
|
RELEASE_VEC_FLAGS = $(COMMON_VEC_FLAGS)
|
||||||
RELEASE_LOOP_OPTFLAGS = $(COMMON_LOOP_OPTFLAGS)
|
RELEASE_LOOP_OPTFLAGS = $(COMMON_LOOP_OPTFLAGS)
|
||||||
RELEASE_CPPFLAGS = $(COMMON_CPPFLAGS) -DNDEBUG
|
RELEASE_CPPFLAGS = $(COMMON_CPPFLAGS) -DNDEBUG
|
||||||
|
@ -218,7 +226,8 @@ RELEASE_FPTR_FLAG = -fomit-frame-pointer
|
||||||
NO_SLAB_CPPFLAGS = -DDEBUG_NO_SLAB
|
NO_SLAB_CPPFLAGS = -DDEBUG_NO_SLAB
|
||||||
DEBUG_STATS_CPPFLAGS = -DDEBUG_STATS
|
DEBUG_STATS_CPPFLAGS = -DDEBUG_STATS
|
||||||
|
|
||||||
LINK = @LINK@
|
LINK.PROG = @LINK@
|
||||||
|
LINK.LIB = @LINK@ -shared
|
||||||
COMPILE = @COMPILE@
|
COMPILE = @COMPILE@
|
||||||
COMPILE_cpp = @COMPILE_cpp@
|
COMPILE_cpp = @COMPILE_cpp@
|
||||||
VEC_FLAGS = @VEC_FLAGS@
|
VEC_FLAGS = @VEC_FLAGS@
|
||||||
|
@ -324,14 +333,21 @@ $(BLAKE2_OBJS): $(BLAKE2_SRCS) $(BLAKE2_BASE_SRCS) $(BLAKE2_HDRS)
|
||||||
$(MAINOBJS): $(MAINSRCS) $(MAINHDRS)
|
$(MAINOBJS): $(MAINSRCS) $(MAINHDRS)
|
||||||
$(COMPILE) $(GEN_OPT) $(LOOP_OPTFLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
$(COMPILE) $(GEN_OPT) $(LOOP_OPTFLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
||||||
|
|
||||||
$(PROG): $(OBJS)
|
$(PROGOBJS): $(PROGSRCS) $(PROGHDRS)
|
||||||
$(LINK) -o $@ $(OBJS) $(LDLIBS)
|
$(COMPILE) $(GEN_OPT) $(LOOP_OPTFLAGS) $(CPPFLAGS) $(@:.o=.c) -o $@
|
||||||
|
|
||||||
|
$(LIB): $(OBJS)
|
||||||
|
$(LINK.LIB) -Wl,-soname,$(LIB).$(LIBVER) -o $(LIB).$(LIBVER) $(OBJS) $(LDLIBS)
|
||||||
|
ln -sf $(LIB).$(LIBVER) $(LIB)
|
||||||
|
|
||||||
|
$(PROG): $(LIB) $(PROGOBJS)
|
||||||
|
$(LINK.PROG) -o $@ $(PROGOBJS) $(LDLIBS) -L. -l$(LINKLIB)
|
||||||
|
|
||||||
test: all
|
test: all
|
||||||
(cd test; ulimit -c unlimited; sh ./run_test.sh $(TESTSUITE) ) 2>&1 | tee test.log
|
(cd test; ulimit -c unlimited; sh ./run_test.sh $(TESTSUITE) ) 2>&1 | tee test.log
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(PROG) $(OBJS) $(BAKFILES)
|
$(RM) $(PROG) $(OBJS) $(BAKFILES) $(LIB) $(LIB).$(LIBVER)
|
||||||
$(RM) test.log
|
$(RM) test.log
|
||||||
$(RM_RF) test/datafiles
|
$(RM_RF) test/datafiles
|
||||||
$(RM_RF) buildtmp
|
$(RM_RF) buildtmp
|
||||||
|
@ -344,8 +360,15 @@ install: $(PROG)
|
||||||
@chmod 0755 $(DESTDIR)$(PREFIX)/bin
|
@chmod 0755 $(DESTDIR)$(PREFIX)/bin
|
||||||
@cp $(PROG) $(DESTDIR)$(PREFIX)/bin
|
@cp $(PROG) $(DESTDIR)$(PREFIX)/bin
|
||||||
@chmod 0555 $(DESTDIR)$(PREFIX)/bin/$(PROG)
|
@chmod 0555 $(DESTDIR)$(PREFIX)/bin/$(PROG)
|
||||||
|
|
||||||
|
@mkdir -p $(DESTDIR)$(PREFIX)/lib
|
||||||
|
@chmod 0755 $(DESTDIR)$(PREFIX)/lib
|
||||||
|
@cp $(LIB).$(LIBVER) $(DESTDIR)$(PREFIX)/lib
|
||||||
|
@chmod 0555 $(DESTDIR)$(PREFIX)/lib/$(LIB).$(LIBVER)
|
||||||
|
@ln -sf $(LIB).$(LIBVER) $(DESTDIR)$(PREFIX)/lib/$(LIB)
|
||||||
|
|
||||||
@mkdir -p $(DESTDIR)$(PREFIX)/share/doc/$(PROG)
|
@mkdir -p $(DESTDIR)$(PREFIX)/share/doc/$(PROG)
|
||||||
@chmod 0755 $(DESTDIR)$(PREFIX)/share $(PREFIX)/share/doc $(PREFIX)/share/doc/$(PROG)
|
@chmod 0755 $(DESTDIR)$(PREFIX)/share $(DESTDIR)$(PREFIX)/share/doc $(DESTDIR)$(PREFIX)/share/doc/$(PROG)
|
||||||
@cp README.md $(DESTDIR)$(PREFIX)/share/doc/$(PROG)/README
|
@cp README.md $(DESTDIR)$(PREFIX)/share/doc/$(PROG)/README
|
||||||
@chmod 0444 $(DESTDIR)$(PREFIX)/share/doc/$(PROG)/README
|
@chmod 0444 $(DESTDIR)$(PREFIX)/share/doc/$(PROG)/README
|
||||||
|
|
||||||
|
|
|
@ -988,7 +988,7 @@ get_pw_string(uchar_t pw[MAX_PW_LEN], const char *prompt, int twice)
|
||||||
s = fgets(pw1, MAX_PW_LEN, input);
|
s = fgets(pw1, MAX_PW_LEN, input);
|
||||||
fputs("\n", stderr);
|
fputs("\n", stderr);
|
||||||
|
|
||||||
if (s == NULL) {
|
if (s == NULL || strlen(s) < 2) {
|
||||||
tcsetattr(fd, TCSANOW, &oldt);
|
tcsetattr(fd, TCSANOW, &oldt);
|
||||||
fflush(strm);
|
fflush(strm);
|
||||||
return (-1);
|
return (-1);
|
||||||
|
|
2885
pcompress.c
Normal file
2885
pcompress.c
Normal file
File diff suppressed because it is too large
Load diff
52
pcompress.h
52
pcompress.h
|
@ -66,7 +66,7 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define COMPRESSED_CHUNKSZ (sizeof (uint64_t))
|
#define COMPRESSED_CHUNKSZ (sizeof (uint64_t))
|
||||||
#define ORIGINAL_CHUNKSZ (sizeof (uint64_t))
|
#define ORIGINAL_CHUNKSZ (sizeof (uint64_t))
|
||||||
#define CHUNK_HDR_SZ (COMPRESSED_CHUNKSZ + cksum_bytes + ORIGINAL_CHUNKSZ + CHUNK_FLAG_SZ)
|
#define CHUNK_HDR_SZ (COMPRESSED_CHUNKSZ + pctx->cksum_bytes + ORIGINAL_CHUNKSZ + CHUNK_FLAG_SZ)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lower 3 bits in higher nibble indicate chunk compression algorithm
|
* lower 3 bits in higher nibble indicate chunk compression algorithm
|
||||||
|
@ -174,6 +174,44 @@ extern int libbsc_deinit(void **data);
|
||||||
extern void libbsc_stats(int show);
|
extern void libbsc_stats(int show);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct pc_ctx {
|
||||||
|
compress_func_ptr _compress_func;
|
||||||
|
compress_func_ptr _decompress_func;
|
||||||
|
init_func_ptr _init_func;
|
||||||
|
deinit_func_ptr _deinit_func;
|
||||||
|
stats_func_ptr _stats_func;
|
||||||
|
props_func_ptr _props_func;
|
||||||
|
|
||||||
|
int inited;
|
||||||
|
int main_cancel;
|
||||||
|
int adapt_mode;
|
||||||
|
int pipe_mode, pipe_out;
|
||||||
|
int nthreads;
|
||||||
|
int hide_mem_stats;
|
||||||
|
int hide_cmp_stats;
|
||||||
|
int enable_rabin_scan;
|
||||||
|
int enable_rabin_global;
|
||||||
|
int enable_delta_encode;
|
||||||
|
int enable_delta2_encode;
|
||||||
|
int enable_rabin_split;
|
||||||
|
int enable_fixed_scan;
|
||||||
|
int lzp_preprocess;
|
||||||
|
int encrypt_type;
|
||||||
|
unsigned int chunk_num;
|
||||||
|
uint64_t largest_chunk, smallest_chunk, avg_chunk;
|
||||||
|
uint64_t chunksize;
|
||||||
|
const char *exec_name, *algo, *filename, *to_filename;
|
||||||
|
int do_compress, level;
|
||||||
|
int do_uncompress;
|
||||||
|
int cksum_bytes, mac_bytes;
|
||||||
|
int cksum, t_errored;
|
||||||
|
int rab_blk_size, keylen;
|
||||||
|
crypto_ctx_t crypto_ctx;
|
||||||
|
unsigned char *user_pw;
|
||||||
|
int user_pw_len;
|
||||||
|
char *pwd_file, *f_name;
|
||||||
|
} pc_ctx_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Per-thread data structure for compression and decompression threads.
|
* Per-thread data structure for compression and decompression threads.
|
||||||
*/
|
*/
|
||||||
|
@ -200,8 +238,20 @@ struct cmp_data {
|
||||||
mac_ctx_t chunk_hmac;
|
mac_ctx_t chunk_hmac;
|
||||||
algo_props_t *props;
|
algo_props_t *props;
|
||||||
int decompressing;
|
int decompressing;
|
||||||
|
pc_ctx_t *pctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void usage(pc_ctx_t *pctx);
|
||||||
|
pc_ctx_t *create_pc_context(void);
|
||||||
|
int init_pc_context_argstr(pc_ctx_t *pctx, char *args);
|
||||||
|
int init_pc_context(pc_ctx_t *pctx, int argc, char *argv[]);
|
||||||
|
void destroy_pc_context(pc_ctx_t *pctx);
|
||||||
|
void pc_set_userpw(pc_ctx_t *pctx, unsigned char *pwdata, int pwlen);
|
||||||
|
|
||||||
|
int start_pcompress(pc_ctx_t *pctx);
|
||||||
|
int start_compress(pc_ctx_t *pctx, const char *filename, uint64_t chunksize, int level);
|
||||||
|
int start_decompress(pc_ctx_t *pctx, const char *filename, const char *to_filename);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -70,6 +70,20 @@ err_exit(int show_errno, const char *format, ...)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
err_print(int show_errno, const char *format, ...)
|
||||||
|
{
|
||||||
|
int err = errno;
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
vfprintf(stderr, format, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
if (show_errno)
|
||||||
|
fprintf(stderr, "\nError: %s\n", strerror(err));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fetch the command name that started the current process.
|
* Fetch the command name that started the current process.
|
||||||
* The returned string must be freed by the caller.
|
* The returned string must be freed by the caller.
|
||||||
|
|
|
@ -211,6 +211,7 @@ extern processor_info_t proc_info;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void err_exit(int show_errno, const char *format, ...);
|
extern void err_exit(int show_errno, const char *format, ...);
|
||||||
|
extern void err_print(int show_errno, const char *format, ...);
|
||||||
extern const char *get_execname(const char *);
|
extern const char *get_execname(const char *);
|
||||||
extern int parse_numeric(int64_t *val, const char *str);
|
extern int parse_numeric(int64_t *val, const char *str);
|
||||||
extern char *bytes_to_size(uint64_t bytes);
|
extern char *bytes_to_size(uint64_t bytes);
|
||||||
|
|
Loading…
Reference in a new issue