Fix Delta2 handling for small buffers.

Fix LZP handling during preprocessing.
Fix type flag handling during preprocessing.
Update test cases to use configurable list of test corpus files.
Update some more int64_t datatypes to uint64_t
Add a gitignore.
This commit is contained in:
Moinak Ghosh 2013-01-02 22:56:21 +05:30
parent 43f5acfa2d
commit 6b756eb165
20 changed files with 158 additions and 92 deletions

11
.gitignore vendored Normal file
View file

@ -0,0 +1,11 @@
files.lst
*.pc*
*.o
*.so
pcompress
Makefile
test.log
test/datafiles
*~
core.*
*.kate-swp

View file

@ -161,7 +161,7 @@ aes_init(aes_ctx_t *ctx, uchar_t *salt, int saltlen, uchar_t *pwd, int pwd_len,
}
int
aes_encrypt(aes_ctx_t *ctx, uchar_t *plaintext, uchar_t *ciphertext, ssize_t len, uint64_t id) {
aes_encrypt(aes_ctx_t *ctx, uchar_t *plaintext, uchar_t *ciphertext, uint64_t len, uint64_t id) {
AES_KEY key;
uchar_t *k1, *k2;
struct crypto_aesctr *strm;
@ -185,7 +185,7 @@ aes_encrypt(aes_ctx_t *ctx, uchar_t *plaintext, uchar_t *ciphertext, ssize_t len
}
int
aes_decrypt(aes_ctx_t *ctx, uchar_t *ciphertext, uchar_t *plaintext, ssize_t len, uint64_t id) {
aes_decrypt(aes_ctx_t *ctx, uchar_t *ciphertext, uchar_t *plaintext, uint64_t len, uint64_t id) {
AES_KEY key;
uchar_t *k1, *k2;
struct crypto_aesctr *strm;

View file

@ -48,8 +48,8 @@ typedef struct {
int aes_init(aes_ctx_t *ctx, uchar_t *salt, int saltlen, uchar_t *pwd, int pwd_len,
uint64_t nonce, int enc);
int aes_encrypt(aes_ctx_t *ctx, uchar_t *plaintext, uchar_t *ciphertext, ssize_t len, uint64_t id);
int aes_decrypt(aes_ctx_t *ctx, uchar_t *ciphertext, uchar_t *plaintext, ssize_t len, uint64_t id);
int aes_encrypt(aes_ctx_t *ctx, uchar_t *plaintext, uchar_t *ciphertext, uint64_t len, uint64_t id);
int aes_decrypt(aes_ctx_t *ctx, uchar_t *ciphertext, uchar_t *plaintext, uint64_t len, uint64_t id);
uint64_t aes_nonce(aes_ctx_t *ctx);
void aes_clean_pkey(aes_ctx_t *ctx);
void aes_cleanup(aes_ctx_t *ctx);

View file

@ -74,7 +74,7 @@ extern uint64_t lzma_crc64_8bchk(const uint8_t *buf, uint64_t size,
uint64_t crc, uint64_t *cnt);
int
compute_checksum(uchar_t *cksum_buf, int cksum, uchar_t *buf, int64_t bytes)
compute_checksum(uchar_t *cksum_buf, int cksum, uchar_t *buf, uint64_t bytes)
{
DEBUG_STAT_EN(double strt, en);
@ -535,7 +535,7 @@ init_crypto(crypto_ctx_t *cctx, uchar_t *pwd, int pwd_len, int crypto_alg,
}
int
crypto_buf(crypto_ctx_t *cctx, uchar_t *from, uchar_t *to, int64_t bytes, uint64_t id)
crypto_buf(crypto_ctx_t *cctx, uchar_t *from, uchar_t *to, uint64_t bytes, uint64_t id)
{
if (cctx->crypto_alg == CRYPTO_ALG_AES) {
if (cctx->enc_dec == ENCRYPT_FLAG) {

View file

@ -74,7 +74,7 @@ typedef struct {
/*
* Generic message digest functions.
*/
int compute_checksum(uchar_t *cksum_buf, int cksum, uchar_t *buf, int64_t bytes);
int compute_checksum(uchar_t *cksum_buf, int cksum, uchar_t *buf, uint64_t bytes);
int get_checksum_props(const char *name, int *cksum, int *cksum_bytes, int *mac_bytes);
void serialize_checksum(uchar_t *checksum, uchar_t *buf, int cksum_bytes);
void deserialize_checksum(uchar_t *checksum, uchar_t *buf, int cksum_bytes);
@ -84,7 +84,7 @@ void deserialize_checksum(uchar_t *checksum, uchar_t *buf, int cksum_bytes);
*/
int init_crypto(crypto_ctx_t *cctx, uchar_t *pwd, int pwd_len, int crypto_alg,
uchar_t *salt, int saltlen, uint64_t nonce, int enc_dec);
int crypto_buf(crypto_ctx_t *cctx, uchar_t *from, uchar_t *to, int64_t bytes, uint64_t id);
int crypto_buf(crypto_ctx_t *cctx, uchar_t *from, uchar_t *to, uint64_t bytes, uint64_t id);
uint64_t crypto_nonce(crypto_ctx_t *cctx);
void crypto_clean_pkey(crypto_ctx_t *cctx);
void cleanup_crypto(crypto_ctx_t *cctx);

View file

@ -113,6 +113,9 @@ delta2_encode(uchar_t *src, uint64_t srclen, uchar_t *dst, uint64_t *dstlen, int
return (-1);
}
if (srclen <= (MAIN_HDR + LIT_HDR + DELTA_HDR))
return (-1);
if (rle_thresh < MIN_THRESH)
return (-1);
@ -121,7 +124,10 @@ delta2_encode(uchar_t *src, uint64_t srclen, uchar_t *dst, uint64_t *dstlen, int
int rv;
hdr_ovr = 0;
*((uint64_t *)dst) = LE64(srclen);
dst += MAIN_HDR;
rv = delta2_encode_real(src, srclen, dst, dstlen, rle_thresh, 1, &hdr_ovr);
*dstlen += MAIN_HDR;
DEBUG_STAT_EN(fprintf(stderr, "DELTA2: srclen: %" PRIu64 ", dstlen: %" PRIu64 "\n", srclen, *dstlen));
DEBUG_STAT_EN(fprintf(stderr, "DELTA2: header overhead: %d\n", hdr_ovr));
} else {
@ -456,7 +462,7 @@ delta2_decode(uchar_t *src, uint64_t srclen, uchar_t *dst, uint64_t *dstlen)
rcnt = val & MSB_SETZERO_MASK;
pos += sizeof (rcnt);
if (out + rcnt > *dstlen) {
fprintf(stderr, "DELTA2 Decode: Destination buffer overflow. Corrupt data.\n");
fprintf(stderr, "DELTA2 Decode(lit): Destination buffer overflow. Corrupt data.\n");
return (-1);
}
memcpy(pos1, pos, rcnt);
@ -473,7 +479,7 @@ delta2_decode(uchar_t *src, uint64_t srclen, uchar_t *dst, uint64_t *dstlen)
delta = LE64(*((uint64_t *)pos));
pos += sizeof (delta);
if (out + rcnt > *dstlen) {
fprintf(stderr, "DELTA2 Decode: Destination buffer overflow. Corrupt data.\n");
fprintf(stderr, "DELTA2 Decode(delta): Destination buffer overflow. Corrupt data.\n");
return (-1);
}

View file

@ -648,7 +648,6 @@ _last_literals:
return (int) (((char*)op)-dest);
}
int LZ4_compress_limitedOutput(const char* source,
char* dest,
int isize,

View file

@ -59,9 +59,9 @@ inline int bsc_lzp_num_blocks(int64_t n)
{
int nb;
if (n < 256 * 1024) return 1;
if (n < 4 * 1024 * 1024) return 2;
if (n < 16 * 1024 * 1024) return 4;
if (n < 256LL * 1024LL) return 1;
if (n < 4LL * 1024LL * 1024LL) return 2;
if (n < 16LL * 1024LL * 1024LL) return 4;
if (n < LZP_MAX_BLOCK) return 8;
nb = n / LZP_MAX_BLOCK;

View file

@ -46,7 +46,7 @@ See also the bsc and libbsc web site:
#define LZP_DEFAULT_LZPHASHSIZE 16
#define LZP_DEFAULT_LZPMINLEN 128
#define LZP_MAX_BLOCK (2000000000L)
#define LZP_MAX_BLOCK (2000000000LL)
#define ALPHABET_SIZE (256)
#ifdef __cplusplus

18
main.c
View file

@ -208,7 +208,6 @@ preproc_compress(compress_func_ptr cmp_func, void *src, uint64_t srclen, void *d
if (lzp_preprocess) {
int hashsize;
type = PREPROC_TYPE_LZP;
hashsize = lzp_hash_size(level);
result = lzp_compress((const uchar_t *)src, (uchar_t *)dst, srclen,
hashsize, LZP_DEFAULT_LZPMINLEN, 0);
@ -216,6 +215,7 @@ preproc_compress(compress_func_ptr cmp_func, void *src, uint64_t srclen, void *d
if (!enable_delta2_encode)
return (-1);
} else {
type |= PREPROC_TYPE_LZP;
srclen = result;
memcpy(src, dst, srclen);
}
@ -223,7 +223,6 @@ preproc_compress(compress_func_ptr cmp_func, void *src, uint64_t srclen, void *d
} else if (!enable_delta2_encode) {
/*
* Execution won't come here but just in case ...
* Even Delta2 encoding below enables LZP.
*/
fprintf(stderr, "Invalid preprocessing mode\n");
return (-1);
@ -241,7 +240,7 @@ preproc_compress(compress_func_ptr cmp_func, void *src, uint64_t srclen, void *d
}
*dest = type;
*((int64_t *)(dest + 1)) = htonll(srclen);
*((uint64_t *)(dest + 1)) = htonll(srclen);
_dstlen = srclen;
DEBUG_STAT_EN(strt = get_wtime_millis());
result = cmp_func(src, srclen, dest+9, &_dstlen, level, chdr, data);
@ -255,6 +254,14 @@ preproc_compress(compress_func_ptr cmp_func, void *src, uint64_t srclen, void *d
DEBUG_STAT_EN(fprintf(stderr, "Chunk did not compress.\n"));
memcpy(dest+1, src, srclen);
*dstlen = srclen + 1;
/*
* If compression failed but one of the pre-processing succeeded then
* type flags will be non-zero. In that case we still indicate a success
* result so that decompression will reverse the pre-processing. The
* type flags will indicate that compression was not done and the
* decompress routine will not be called.
*/
if (type > 0)
result = 0;
}
@ -274,7 +281,7 @@ preproc_decompress(compress_func_ptr dec_func, void *src, uint64_t srclen, void
sorc++;
srclen--;
if (type & PREPROC_COMPRESSED) {
*dstlen = ntohll(*((int64_t *)(sorc)));
*dstlen = ntohll(*((uint64_t *)(sorc)));
sorc += 8;
srclen -= 8;
DEBUG_STAT_EN(strt = get_wtime_millis());
@ -312,7 +319,7 @@ preproc_decompress(compress_func_ptr dec_func, void *src, uint64_t srclen, void
*dstlen = result;
}
if (!(type & (PREPROC_COMPRESSED | PREPROC_TYPE_DELTA2 | PREPROC_TYPE_LZP))) {
if (!(type & (PREPROC_COMPRESSED | PREPROC_TYPE_DELTA2 | PREPROC_TYPE_LZP)) && type > 0) {
fprintf(stderr, "Invalid preprocessing flags: %d\n", type);
return (-1);
}
@ -1156,6 +1163,7 @@ redo:
compressed_chunk = tdat->compressed_chunk + CHUNK_FLAG_SZ;
rbytes = tdat->rbytes;
dedupe_index_sz = 0;
tdat->rctx->valid = 0;
/* Perform Dedup if enabled. */
if ((enable_rabin_scan || enable_fixed_scan)) {

View file

@ -12,12 +12,36 @@ else
fi
PDIR=`pwd`
if [ ! -f datafiles/files.lst ]
then
[ ! -f datafiles/bin.dat ] && (tar cpf - /usr/bin | dd of=datafiles/bin.dat bs=1024 count=5120; cat res/jpg/*.jpg >> datafiles/bin.dat)
[ ! -f datafiles/share.dat ] && tar cpf - /usr/share | dd of=datafiles/share.dat bs=1024 count=5120
[ ! -f datafiles/inc.dat ] && (tar cpf - /usr/include | dd of=datafiles/inc.dat bs=1024 count=5120; cat res/xml/*.xml >> datafiles/inc.dat)
[ ! -f datafiles/combined.dat ] && cat datafiles/bin.dat datafiles/share.dat datafiles/inc.dat >> datafiles/combined.dat
[ ! -f datafiles/comb_d.dat ] && sh -c "cat datafiles/combined.dat > datafiles/comb_d.dat; cat datafiles/combined.dat >> datafiles/comb_d.dat"
pdir=`pwd`
echo ${pdir}/datafiles/bin.dat > datafiles/files.lst
echo ${pdir}/datafiles/share.dat >> datafiles/files.lst
echo ${pdir}/datafiles/inc.dat >> datafiles/files.lst
echo ${pdir}/datafiles/combined.dat >> datafiles/files.lst
echo ${pdir}/datafiles/comb_d.dat >> datafiles/files.lst
else
for f in `cat datafiles/files.lst`
do
if [ ! -f ${f} ]
then
echo "Cannot find test data file: ${f}"
exit 1
fi
dir=`dirname ${f}`
rm -f ${dir}/.pco*
rm -f ${dir}/*.pz
rm -f ${dir}/*.1
done
fi
failures=0
if [ "x$tst" = "x" ]

View file

@ -12,7 +12,7 @@ do
for level in 1 3 9 14
do
for tf in bin.dat share.dat inc.dat
for tf in `cat files.lst`
do
for seg in 1m 100m
do

View file

@ -7,7 +7,7 @@ echo "#################################################"
for algo in zlib ppmd
do
for tf in bin.dat share.dat inc.dat
for tf in `cat files.lst`
do
for cksum in CRC64 SHA256 SHA512 SKEIN256 SKEIN512 KECCAK256 KECCAK512
do

View file

@ -5,7 +5,7 @@
clean() {
for algo in lzfx lz4 zlib bzip2 lzma lzmaMt libbsc ppmd adapt adapt2
do
for tf in bin.dat share.dat inc.dat
for tf in `cat files.lst`
do
rm -f ${tf}.${algo}
done
@ -22,7 +22,7 @@ do
../../pcompress 2>&1 | grep $algo > /dev/null
[ $? -ne 0 ] && continue
for tf in bin.dat share.dat inc.dat
for tf in `cat files.lst`
do
echo "Preparing ${algo} compressed ${tf} datafile ..."
cmd="../../pcompress -c ${algo} -l5 -s500k ${tf}"
@ -43,7 +43,7 @@ do
for level in 1 3 9 14
do
for tf in bin.dat share.dat inc.dat
for tf in `cat files.lst`
do
for seg in 1m 100m
do

View file

@ -5,13 +5,11 @@ echo "#################################################"
echo "# Test Deduplication, Delta Encoding and LZP"
echo "#################################################"
rm -f *.pz
rm -f *.1
for algo in lzfx lz4 adapt
do
for tf in combined.dat comb_d.dat
for tf in `cat files.lst`
do
rm -f ${tf}.*
for feat in "-D" "-D -B3 -L" "-D -B4 -E" "-D -B2 -EE" "-D -B5 -EE -L" "-D -B2 -r" "-P" "-D -P" "-D -L -P"
do
for seg in 2m 100m

View file

@ -5,13 +5,11 @@ echo "#################################################"
echo "# Crypto tests"
echo "#################################################"
rm -f *.pz
rm -f *.1
for algo in lzfx adapt2
do
for tf in comb_d.dat
for tf in `cat files.lst`
do
rm -f ${tf}.*
for feat in "-e" "-e -L -S SHA256" "-D -e -S SHA512" "-D -EE -L -e -S SKEIN512" "-e -S CRC64" "-e -P" "-e -L -P -S KECCAK256" "-D -e -L -S KECCAK512"
do
for seg in 2m 100m

View file

@ -12,8 +12,9 @@ do
for level in 1 3
do
for tf in combined.dat
for tf in `cat files.lst`
do
rm -f ${tf}.*
for seg in 1m 2m 3m
do
cmd="cat ${tf} | ../../pcompress -p -c ${algo} -l ${level} -s ${seg} > ${tf}.pz"

View file

@ -10,7 +10,7 @@ rm -f *.1
for algo in lzfx adapt2
do
for tf in comb_d.dat
for tf in `cat files.lst`
do
for feat in "-e" "-e -L" "-D -e" "-D -EE -L -e" "-e -S CRC64"
do

View file

@ -10,7 +10,7 @@ rm -f *.1
for algo in lzfx lz4 adapt adapt2
do
for tf in combined.dat comb_d.dat
for tf in `cat files.lst`
do
for feat in "-F" "-F -B3 -L" "-F -B4" "-F -B5 -L" "-F -P" "-F -L -P"
do

View file

@ -5,158 +5,179 @@ echo "####################################################"
echo "# Test out of range parameters and error conditions."
echo "####################################################"
#
# Select a large file from the list
#
tstf=
tsz=0
for tf in `cat files.lst`
do
sz=`ls -l ${tf} | awk '{ print $5 }'`
if [ $sz -gt $tsz ]
then
tsz=$sz
tstf="$tf"
fi
done
for feat in "-L" "-L -D" "-L -D -E" "-L -B5" "-L -D -E -B2" "-F" "-F -L"
do
cmd="../../pcompress -c dummy -l4 -s1m $feat combined.dat"
cmd="../../pcompress -c dummy -l4 -s1m $feat $tstf"
echo "Running $cmd"
eval $cmd
if [ $? -eq 0 ]
then
echo "FATAL: Compression DID NOT ERROR where expected"
rm -f ${tstf}.pz
exit 1
fi
rm -f ${tstf}.pz
break
done
for feat in "-B8 -s2m -l1" "-B0 -s2m -l1" "-D -s10k -l1" "-D -F -s2m -l1" "-p -e -s2m -l1" "-s2m -l15"
do
for algo in lzfx lz4 zlib bzip2 libbsc ppmd lzma
do
cmd="../../pcompress -c lzfx $feat combined.dat"
cmd="../../pcompress -c lzfx $feat $tstf"
echo "Running $cmd"
eval $cmd
if [ $? -eq 0 ]
then
echo "FATAL: Compression DID NOT ERROR where expected"
rm -f combined.dat.pz
rm -f ${tstf}.pz
exit 1
fi
rm -f ${tstf}.pz
break
done
done
for feat in "-S CRC64" "-S SKEIN256" "-S SKEIN512" "-S SHA256" "-S SHA512" "-S KECCAK256" "-S KECCAK512"
do
rm -f combined.dat.1.pz
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f ${tstf}.*
cmd="../../pcompress -c lzfx -l3 -s1m $feat combined.dat"
cmd="../../pcompress -c lzfx -l3 -s1m $feat ${tstf}"
echo "Running $cmd"
eval $cmd
if [ $? -ne 0 ]
then
echo "FATAL: Compression errored."
rm -f combined.dat.pz
rm -f ${tstf}.pz
d=`dirname ${tstf}`
rm -f ${d}/.pc*
exit 1
fi
echo "Corrupting file header ..."
dd if=/dev/urandom conv=notrunc of=combined.dat.pz bs=4 seek=1 count=1
cmd="../../pcompress -d combined.dat.pz combined.dat.1"
dd if=/dev/urandom conv=notrunc of=${tstf}.pz bs=4 seek=1 count=1
cmd="../../pcompress -d ${tstf}.pz ${tstf}.1"
eval $cmd
if [ $? -eq 0 ]
then
echo "FATAL: Decompression DID NOT ERROR where expected."
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f ${tstf}.pz
rm -f ${tstf}.1
exit 1
fi
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f ${tstf}.pz
rm -f ${tstf}.1
cmd="../../pcompress -c zlib -l3 -s1m $feat combined.dat"
cmd="../../pcompress -c zlib -l3 -s1m $feat ${tstf}"
echo "Running $cmd"
eval $cmd
if [ $? -ne 0 ]
then
echo "FATAL: Compression errored."
rm -f combined.dat.pz
rm -f ${tstf}.pz
exit 1
fi
cp combined.dat.pz combined.dat.1.pz
cp ${tstf}.pz ${tstf}.1.pz
echo "Corrupting file ..."
dd if=/dev/urandom conv=notrunc of=combined.dat.pz bs=4 seek=100 count=1
cmd="../../pcompress -d combined.dat.pz combined.dat.1"
dd if=/dev/urandom conv=notrunc of=${tstf}.pz bs=4 seek=100 count=1
cmd="../../pcompress -d ${tstf}.pz ${tstf}.1"
eval $cmd
if [ $? -eq 0 ]
then
echo "FATAL: Decompression DID NOT ERROR where expected."
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f combined.dat.1.pz
rm -f ${tstf}.pz
rm -f ${tstf}.1
rm -f ${tstf}.1.pz
exit 1
fi
rm -f combined.dat.1
cp combined.dat.1.pz combined.dat.pz
rm -f ${tstf}.1
cp ${tstf}.1.pz ${tstf}.pz
echo "Corrupting file ..."
dd if=/dev/urandom conv=notrunc of=combined.dat.1.pz bs=4 seek=51 count=1
cmd="../../pcompress -d combined.dat.1.pz combined.dat.1"
dd if=/dev/urandom conv=notrunc of=${tstf}.1.pz bs=4 seek=51 count=1
cmd="../../pcompress -d ${tstf}.1.pz ${tstf}.1"
eval $cmd
if [ $? -eq 0 ]
then
echo "FATAL: Decompression DID NOT ERROR where expected."
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f combined.dat.1.pz
rm -f ${tstf}.pz
rm -f ${tstf}.1
rm -f ${tstf}.1.pz
exit 1
fi
rm -f combined.dat.1 combined.dat.1.pz combined.dat.pz
rm -f ${tstf}.1 ${tstf}.1.pz ${tstf}.pz
echo "plainpass" > /tmp/pwf
cmd="../../pcompress -c zlib -l3 -s1m -e -w /tmp/pwf $feat combined.dat"
cmd="../../pcompress -c zlib -l3 -s1m -e -w /tmp/pwf $feat ${tstf}"
echo "Running $cmd"
eval $cmd
if [ $? -ne 0 ]
then
echo "FATAL: Compression errored."
rm -f combined.dat.pz
rm -f ${tstf}.pz
exit 1
fi
pw=`cat /tmp/pwf`
if [ "$pw" = "plainpasswd" ]
then
echo "FATAL: Password file was not zeroed"
rm -f /tmp/pwf combined.dat.pz
rm -f /tmp/pwf ${tstf}.pz
exit 1
fi
cp combined.dat.pz combined.dat.1.pz
cp ${tstf}.pz ${tstf}.1.pz
echo "Corrupting file ..."
dd if=/dev/urandom conv=notrunc of=combined.dat.pz bs=4 seek=115 count=1
dd if=/dev/urandom conv=notrunc of=${tstf}.pz bs=4 seek=115 count=1
echo "plainpass" > /tmp/pwf
cmd="../../pcompress -d -w /tmp/pwf combined.dat.pz combined.dat.1"
cmd="../../pcompress -d -w /tmp/pwf ${tstf}.pz ${tstf}.1"
eval $cmd
if [ $? -eq 0 ]
then
echo "FATAL: Decompression DID NOT ERROR where expected."
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f combined.dat.1.pz
rm -f ${tstf}.pz
rm -f ${tstf}.1
rm -f ${tstf}.1.pz
exit 1
fi
cp combined.dat.1.pz combined.dat.pz
rm -f combined.dat.1
cp ${tstf}.1.pz ${tstf}.pz
rm -f ${tstf}.1
echo "Corrupting file header ..."
dd if=/dev/urandom conv=notrunc of=combined.dat.pz bs=4 seek=10 count=1
dd if=/dev/urandom conv=notrunc of=${tstf}.pz bs=4 seek=10 count=1
echo "plainpass" > /tmp/pwf
cmd="../../pcompress -d -w /tmp/pwf combined.dat.pz combined.dat.1"
cmd="../../pcompress -d -w /tmp/pwf ${tstf}.pz ${tstf}.1"
eval $cmd
if [ $? -eq 0 ]
then
echo "FATAL: Decompression DID NOT ERROR where expected."
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f combined.dat.1.pz
rm -f ${tstf}.pz
rm -f ${tstf}.1
rm -f ${tstf}.1.pz
exit 1
fi
done
rm -f combined.dat.1.pz
rm -f combined.dat.pz
rm -f combined.dat.1
rm -f ${tstf}.1.pz
rm -f ${tstf}.pz
rm -f ${tstf}.1
rm -f /tmp/pwf
echo "#################################################"