Detect a few mozilla file signatures.

Add missing option to suppress pathname sorting.
Fix chunk sizing to properly auto-enable deduplication.
Fix default dedupe block size to 8KB.
This commit is contained in:
Moinak Ghosh 2014-11-16 22:57:47 +05:30
parent 29b5efc988
commit b257c83f33
2 changed files with 23 additions and 12 deletions

View file

@ -1810,6 +1810,14 @@ detect_type_by_data(uchar_t *buf, size_t len)
// At least a few bytes. // At least a few bytes.
if (len < 10) return (TYPE_UNKNOWN); if (len < 10) return (TYPE_UNKNOWN);
// Mozilla file types
if (len > 15) {
if (memcmp(buf, "XPCOM\nMozFASL\r\n\x1A", 16) == 0)
return (TYPE_BINARY);
if (memcmp(buf, "XPCOM\nTypeLib\r\n\032", 16) == 0)
return (TYPE_BINARY);
}
// WAV files. // WAV files.
if (identify_wav_type(buf, len)) if (identify_wav_type(buf, len))
return (TYPE_BINARY|TYPE_WAV); return (TYPE_BINARY|TYPE_WAV);

View file

@ -288,7 +288,7 @@ preproc_compress(pc_ctx_t *pctx, compress_func_ptr cmp_func, void *src, uint64_t
b_type = btype; b_type = btype;
if (analyzed) if (analyzed)
b_type = actx.forty_pct.btype; b_type = actx.forty_pct.btype;
if (PC_TYPE(b_type) != TYPE_BINARY) { if (PC_TYPE(b_type) != TYPE_BINARY) {
hashsize = lzp_hash_size(level); hashsize = lzp_hash_size(level);
result = lzp_compress((const uchar_t *)from, to, fromlen, result = lzp_compress((const uchar_t *)from, to, fromlen,
@ -3120,7 +3120,7 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[])
ff.enable_wavpack = 0; ff.enable_wavpack = 0;
pthread_mutex_lock(&opt_parse); pthread_mutex_lock(&opt_parse);
while ((opt = getopt(argc, argv, "dc:s:l:pt:MCDGEe:w:LPS:B:Fk:avmKjxiT")) != -1) { while ((opt = getopt(argc, argv, "dc:s:l:pt:MCDGEe:w:LPS:B:Fk:avmKjxiTn")) != -1) {
int ovr; int ovr;
int64_t chunksize; int64_t chunksize;
@ -3300,6 +3300,10 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[])
pctx->meta_stream = -1; pctx->meta_stream = -1;
break; break;
case 'n':
pctx->enable_archive_sort = -1;
break;
case '?': case '?':
default: default:
return (2); return (2);
@ -3568,6 +3572,15 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[])
return (1); return (1);
} }
if (pctx->chunksize == 0) {
if (pctx->level < 9) {
pctx->chunksize = DEFAULT_CHUNKSIZE;
} else {
pctx->chunksize = DEFAULT_CHUNKSIZE + (pctx->level - 8) *
DEFAULT_CHUNKSIZE/4;
}
}
/* /*
* Auto-select filters and preprocessing modes based on compresion level. * Auto-select filters and preprocessing modes based on compresion level.
* This is not done if user explicitly specified advanced options. * This is not done if user explicitly specified advanced options.
@ -3606,8 +3619,6 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[])
pctx->enable_rabin_split = 1; pctx->enable_rabin_split = 1;
} }
pctx->rab_blk_size = 2; pctx->rab_blk_size = 2;
if (pctx->level > 5) pctx->rab_blk_size = 1;
if (pctx->level > 8) pctx->rab_blk_size = 0;
} }
if (pctx->level > 9) pctx->delta2_nstrides = NSTRIDES_EXTRA; if (pctx->level > 9) pctx->delta2_nstrides = NSTRIDES_EXTRA;
} }
@ -3615,14 +3626,6 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[])
pctx->preprocess_mode = 1; pctx->preprocess_mode = 1;
pctx->enable_analyzer = 1; pctx->enable_analyzer = 1;
} }
if (pctx->chunksize == 0) {
if (pctx->level < 9) {
pctx->chunksize = DEFAULT_CHUNKSIZE;
} else {
pctx->chunksize = DEFAULT_CHUNKSIZE + (pctx->level - 8) *
DEFAULT_CHUNKSIZE/4;
}
}
} else if (pctx->do_uncompress) { } else if (pctx->do_uncompress) {
struct filter_flags ff; struct filter_flags ff;
/* /*