diff --git a/archive/pc_archive.c b/archive/pc_archive.c index bf9a710..2df93dc 100644 --- a/archive/pc_archive.c +++ b/archive/pc_archive.c @@ -1810,6 +1810,14 @@ detect_type_by_data(uchar_t *buf, size_t len) // At least a few bytes. 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. if (identify_wav_type(buf, len)) return (TYPE_BINARY|TYPE_WAV); diff --git a/pcompress.c b/pcompress.c index 2f6eb03..3eb7682 100644 --- a/pcompress.c +++ b/pcompress.c @@ -288,7 +288,7 @@ preproc_compress(pc_ctx_t *pctx, compress_func_ptr cmp_func, void *src, uint64_t b_type = btype; if (analyzed) b_type = actx.forty_pct.btype; - + if (PC_TYPE(b_type) != TYPE_BINARY) { hashsize = lzp_hash_size(level); 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; 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; int64_t chunksize; @@ -3300,6 +3300,10 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[]) pctx->meta_stream = -1; break; + case 'n': + pctx->enable_archive_sort = -1; + break; + case '?': default: return (2); @@ -3568,6 +3572,15 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[]) 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. * 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->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; } @@ -3615,14 +3626,6 @@ init_pc_context(pc_ctx_t *pctx, int argc, char *argv[]) pctx->preprocess_mode = 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) { struct filter_flags ff; /*