RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  [email protected]
  Module: rpm                              Date:   20-Feb-2009 17:13:46
  Branch: HEAD                             Handle: 2009022016134600

  Modified files:
    rpm/rpmio               rpmz.c

  Log:
    - jbj: refactor lzma filters and preset count into struct rpmz_s.

  Summary:
    Revision    Changes     Path
    1.18        +82 -88     rpm/rpmio/rpmz.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmz.c
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 rpmz.c
  --- rpm/rpmio/rpmz.c  20 Feb 2009 15:28:45 -0000      1.17
  +++ rpm/rpmio/rpmz.c  20 Feb 2009 16:13:46 -0000      1.18
  @@ -63,32 +63,16 @@
   static int opt_preserve_name;
   #endif
   
  -#ifdef       DYING
  -/*...@unchecked@*/ /*...@observer@*/
  -static const char *stdin_filename = "(stdin)";
  -/*...@unchecked@*/ /*...@observer@*/
  -static const char *stdout_filename = "(stdout)";
  -
  -/*...@unchecked@*/
  -static int opt_threads;
  -/*...@unchecked@*/
  -static rpmuint64_t memlimit_encoder = 0;
  -/*...@unchecked@*/
  -static rpmuint64_t memlimit_decoder = 0;
  -/*...@unchecked@*/
  -static rpmuint64_t memlimit_custom = 0;
  -#endif
  -
   #ifdef       NOTYET
   /*...@unchecked@*/
   static lzma_stream strm = LZMA_STREAM_INIT;
   #endif
  -/*...@unchecked@*/
  -static lzma_filter filters[LZMA_FILTERS_MAX + 1];
  -/*...@unchecked@*/
  -static size_t filters_count = 0;
  +
  +#ifdef       NOTYET
   /*...@unchecked@*/
   static size_t preset_number = 6;
  +#endif
  +
   #ifdef       NOTYET
   /// True if we should auto-adjust the compression settings to use less memory
   /// if memory usage limit is too low for the original settings.
  @@ -107,8 +91,10 @@
   #endif
   #endif
   
  +#ifdef       DYING
   /*...@unchecked@*/
   static lzma_check opt_check = LZMA_CHECK_CRC64;
  +#endif
   
   enum {
       OPT_SUBBLOCK = INT_MIN,
  @@ -135,7 +121,7 @@
       RPMZ_FLAGS_FORCE         = _ZFB(1),      /*< -f, --force ... */
       RPMZ_FLAGS_KEEP          = _ZFB(2),      /*< -k, --keep ... */
       RPMZ_FLAGS_RECURSE               = _ZFB(3),      /*< -r, --recursive ... 
*/
  -    RPMZ_FLAGS_EXTREME               = _ZFB(4),      /*< -r, --recursive ... 
*/
  +    RPMZ_FLAGS_EXTREME               = _ZFB(4),      /*<     --extreme ... */
   
   #ifdef       NOTYET
       RPMZ_FLAGS_SUBBLOCK              = INT_MIN,
  @@ -159,6 +145,7 @@
       enum rpmzFlags_e flags;          /*!< Control bits. */
       enum rpmzFormat_e format;                /*!< Compression format. */
       enum rpmzMode_e mode;            /*!< Operation mode. */
  +    unsigned int level;                      /*!< Compression level. */
   
       rpmuint64_t mem;                 /*!< Physical memory. */
       rpmuint64_t memlimit_encoder;
  @@ -207,6 +194,12 @@
   
   /*...@null@*/
       const char * suffix;
  +
  +    /* LZMA specific configuration. */
  +    lzma_check checksum;
  +    lzma_filter filters[LZMA_FILTERS_MAX + 1];
  +    size_t filters_count;
  +
   };
   
   /*...@unchecked@*/
  @@ -214,6 +207,7 @@
       .flags   = RPMZ_FLAGS_NONE,
       .format  = RPMZ_FORMAT_AUTO,
       .mode    = RPMZ_MODE_COMPRESS,
  +    .level   = 6,            /* XXX compression level is type specific. */
   
       .stdin_filename = "(stdin)",
       .stdout_filename = "(stdout)",
  @@ -222,6 +216,9 @@
       .ifmode  = "rb",
       .ofmode  = "wb",
       .suffix  = "",
  +
  +    .checksum        = LZMA_CHECK_CRC64,
  +
   };
   /*...@unchecked@*/
   static rpmz _rpmz = &__rpmz;
  @@ -361,14 +358,14 @@
   /*...@relnull@*/
       const char * usuffix;
   } suffixPairs[] = {
  -    { RPMZ_FORMAT_XZ,        ".xz",  "" },
  -    { RPMZ_FORMAT_XZ,        ".txz", ".tar" },
  -    { RPMZ_FORMAT_LZMA,      ".lzma","" },
  -    { RPMZ_FORMAT_LZMA,      ".tlz", ".tar" },
  -    { RPMZ_FORMAT_GZIP,      ".gz",  "" },
  -    { RPMZ_FORMAT_GZIP,      ".tgz", ".tar" },
  -    { RPMZ_FORMAT_BZIP2,".bz2",      "" },
  -    { RPMZ_FORMAT_RAW,       NULL,   NULL }
  +    { RPMZ_FORMAT_XZ,                ".xz",  "" },
  +    { RPMZ_FORMAT_XZ,                ".txz", ".tar" },
  +    { RPMZ_FORMAT_LZMA,              ".lzma","" },
  +    { RPMZ_FORMAT_LZMA,              ".tlz", ".tar" },
  +    { RPMZ_FORMAT_GZIP,              ".gz",  "" },
  +    { RPMZ_FORMAT_GZIP,              ".tgz", ".tar" },
  +    { RPMZ_FORMAT_BZIP2,     ".bz2", "" },
  +    { RPMZ_FORMAT_RAW,               NULL,   NULL }
   };
   
   /**
  @@ -953,11 +950,8 @@
   
       lzma_options_delta *options = xmalloc(sizeof(lzma_options_delta));
       // It's hard to give a useful default for this.
  -    *options = (lzma_options_delta) {
  -     // It's hard to give a useful default for this.
  -     .type = LZMA_DELTA_TYPE_BYTE,
  -     .dist = LZMA_DELTA_DIST_MIN,
  -    };
  +    options->type = LZMA_DELTA_TYPE_BYTE;
  +    options->dist = LZMA_DELTA_DIST_MIN;
   
       parse_options(str, opts, &set_delta, options);
   
  @@ -991,7 +985,6 @@
            /*...@-exitarg@*/ exit(2); /*...@=exitarg@*/
        }
        break;
  -
       case OPT_DICT:   opt->dict_size = value;         break;
       case OPT_LC:     opt->lc = value;                break;
       case OPT_LP:     opt->lp = value;                break;
  @@ -1058,42 +1051,41 @@
   }
   
   static void
  -coder_add_filter(lzma_vli id, void *options)
  -     /*...@globals filters, filters_count @*/
  -     /*...@modifies filters, filters_count @*/
  +coder_add_filter(rpmz z, lzma_vli id, void *options)
  +     /*...@modifies z @*/
   {
  -    if (filters_count == LZMA_FILTERS_MAX) {
  +    if (z->filters_count == LZMA_FILTERS_MAX) {
        fprintf(stderr, _("%s: Maximum number of filters is %d\n"),
                __progname, LZMA_FILTERS_MAX);
        /*...@-exitarg@*/ exit(2); /*...@=exitarg@*/
       }
   
  -    filters[filters_count].id = id;
  -    filters[filters_count].options = options;
  -    ++filters_count;
  +    z->filters[z->filters_count].id = id;
  +    z->filters[z->filters_count].options = options;
  +    z->filters_count++;
   
       return;
   }
   
   static void
   coder_set_compression_settings(rpmz z)
  -     /*...@globals filters, filters_count, preset_default, preset_number @*/
  -     /*...@modifies z, filters, filters_count, preset_default, preset_number 
@*/
  +     /*...@globals preset_default, preset_number @*/
  +     /*...@modifies z, preset_default, preset_number @*/
   {
   
       /* Add the per-architecture filters. */
       if (F_ISSET(z->flags, X86))
  -     coder_add_filter(LZMA_FILTER_X86, NULL);
  +     coder_add_filter(z, LZMA_FILTER_X86, NULL);
       if (F_ISSET(z->flags, POWERPC))
  -     coder_add_filter(LZMA_FILTER_POWERPC, NULL);
  +     coder_add_filter(z, LZMA_FILTER_POWERPC, NULL);
       if (F_ISSET(z->flags, IA64))
  -     coder_add_filter(LZMA_FILTER_IA64, NULL);
  +     coder_add_filter(z, LZMA_FILTER_IA64, NULL);
       if (F_ISSET(z->flags, ARM))
  -     coder_add_filter(LZMA_FILTER_ARM, NULL);
  +     coder_add_filter(z, LZMA_FILTER_ARM, NULL);
       if (F_ISSET(z->flags, ARMTHUMB))
  -     coder_add_filter(LZMA_FILTER_ARMTHUMB, NULL);
  +     coder_add_filter(z, LZMA_FILTER_ARMTHUMB, NULL);
       if (F_ISSET(z->flags, SPARC))
  -     coder_add_filter(LZMA_FILTER_SPARC, NULL);
  +     coder_add_filter(z, LZMA_FILTER_SPARC, NULL);
   
   #ifdef       NOTYET
        // Options for LZMA1 or LZMA2 in case we are using a preset.
  @@ -1101,8 +1093,9 @@
        uint64_t memory_usage;
        uint64_t memory_limit;
        size_t thread_limit;
  +     size_t preset_number = z->level;
   
  -     if (filters_count == 0) {
  +     if (z->filters_count == 0) {
                // We are using a preset. This is not a good idea in raw mode
                // except when playing around with things. Different versions
                // of this software may use different options in presets, and
  @@ -1125,35 +1118,35 @@
                        message_bug();
   
                // Use LZMA2 except with --format=lzma we use LZMA1.
  -             filters[0].id = z->format == RPMZ_FORMAT_LZMA
  +             z->filters[0].id = z->format == RPMZ_FORMAT_LZMA
                                ? LZMA_FILTER_LZMA1 : LZMA_FILTER_LZMA2;
  -             filters[0].options = &opt_lzma;
  -             filters_count = 1;
  +             z->filters[0].options = &opt_lzma;
  +             z->filters_count = 1;
        } else {
                preset_default = false;
        }
   
        // Terminate the filter options array.
  -     filters[filters_count].id = LZMA_VLI_UNKNOWN;
  +     z->filters[z->filters_count].id = LZMA_VLI_UNKNOWN;
   
        // If we are using the LZMA_Alone format, allow exactly one filter
        // which has to be LZMA.
  -     if (z->format == RPMZ_FORMAT_LZMA && (filters_count != 1
  -                     || filters[0].id != LZMA_FILTER_LZMA1))
  +     if (z->format == RPMZ_FORMAT_LZMA && (z->filters_count != 1
  +                     || z->filters[0].id != LZMA_FILTER_LZMA1))
                message_fatal(_("With --format=lzma only the LZMA1 filter "
                                "is supported"));
   
        // Print the selected filter chain.
  -     message_filters(V_DEBUG, filters);
  +     message_filters(V_DEBUG, z->filters);
   
        // If using --format=raw, we can be decoding. The memusage function
        // also validates the filter chain and the options used for the
        // filters.
        if (z->mode == RPMZ_MODE_COMPRESS) {
  -             memory_usage = lzma_raw_encoder_memusage(filters);
  +             memory_usage = lzma_raw_encoder_memusage(z->filters);
                memory_limit = hardware_memlimit_encoder();
        } else {
  -             memory_usage = lzma_raw_decoder_memusage(filters);
  +             memory_usage = lzma_raw_decoder_memusage(z->filters);
                memory_limit = hardware_memlimit_decoder();
        }
   
  @@ -1193,9 +1186,9 @@
                // Look for the last filter if it is LZMA2 or LZMA1, so
                // we can make it use less RAM. With other filters we don't
                // know what to do.
  -             while (filters[i].id != LZMA_FILTER_LZMA2
  -                             && filters[i].id != LZMA_FILTER_LZMA1) {
  -                     if (filters[i].id == LZMA_VLI_UNKNOWN)
  +             while (z->filters[i].id != LZMA_FILTER_LZMA2
  +                             && z->filters[i].id != LZMA_FILTER_LZMA1) {
  +                     if (z->filters[i].id == LZMA_VLI_UNKNOWN)
                                memlimit_too_small(memory_usage, memory_limit);
   
                        ++i;
  @@ -1203,7 +1196,7 @@
   
                // Decrease the dictionary size until we meet the memory
                // usage limit. First round down to full mebibytes.
  -             opt = filters[i].options;
  +             opt = z->filters[i].options;
                orig_dict_size = opt->dict_size;
                opt->dict_size &= ~((UINT32_C(1) << 20) - 1);
                while (true) {
  @@ -1217,7 +1210,7 @@
                        if (opt->dict_size < (UINT32_C(1) << 20))
                                memlimit_too_small(memory_usage, memory_limit);
   
  -                     memory_usage = lzma_raw_encoder_memusage(filters);
  +                     memory_usage = lzma_raw_encoder_memusage(z->filters);
                        if (memory_usage == UINT64_MAX)
                                message_bug();
   
  @@ -1241,7 +1234,7 @@
                                        "%'u MiB to not exceed "
                                        "the memory usage limit of "
                                        "%'llu MiB",
  -                                     filters[i].id == LZMA_FILTER_LZMA2
  +                                     z->filters[i].id == LZMA_FILTER_LZMA2
                                                ? '2' : '1',
                                        (unsigned)(orig_dict_size >> 20),
                                        (unsigned)(opt->dict_size >> 20),
  @@ -1253,7 +1246,7 @@
                                        "%'" PRIu32 " MiB to not exceed "
                                        "the memory usage limit of "
                                        "%'" PRIu64 " MiB",
  -                                     filters[i].id == LZMA_FILTER_LZMA2
  +                                     z->filters[i].id == LZMA_FILTER_LZMA2
                                                ? '2' : '1',
                                        orig_dict_size >> 20,
                                        opt->dict_size >> 20,
  @@ -1394,13 +1387,13 @@
       }        break;
       case 'C':
        if (!strcmp(arg, "none"))
  -         opt_check = LZMA_CHECK_NONE;
  +         z->checksum = LZMA_CHECK_NONE;
        else if (!strcmp(arg, "crc32"))
  -         opt_check = LZMA_CHECK_CRC32;
  +         z->checksum = LZMA_CHECK_CRC32;
        else if (!strcmp(arg, "crc64"))
  -         opt_check = LZMA_CHECK_CRC64;
  +         z->checksum = LZMA_CHECK_CRC64;
        else if (!strcmp(arg, "sha256"))
  -         opt_check = LZMA_CHECK_SHA256;
  +         z->checksum = LZMA_CHECK_SHA256;
        else {
            fprintf(stderr, _("%s: Unknown integrity check method \"%s\"\n"),
                __progname, arg);
  @@ -1438,16 +1431,16 @@
        break;
   
       case OPT_SUBBLOCK:
  -     coder_add_filter(LZMA_FILTER_SUBBLOCK, options_subblock(optarg));
  +     coder_add_filter(z, LZMA_FILTER_SUBBLOCK, options_subblock(optarg));
        break;
       case OPT_DELTA:
  -     coder_add_filter(LZMA_FILTER_DELTA, options_delta(optarg));
  +     coder_add_filter(z, LZMA_FILTER_DELTA, options_delta(optarg));
        break;
       case OPT_LZMA1:
  -     coder_add_filter(LZMA_FILTER_LZMA1, options_lzma(optarg));
  +     coder_add_filter(z, LZMA_FILTER_LZMA1, options_lzma(optarg));
        break;
       case OPT_LZMA2:
  -     coder_add_filter(LZMA_FILTER_LZMA2, options_lzma(optarg));
  +     coder_add_filter(z, LZMA_FILTER_LZMA2, options_lzma(optarg));
        break;
   
       default:
  @@ -1515,30 +1508,31 @@
        N_("use maximum of NUM (de)compression threads"), N_("NUM") },
   
     /* ===== Compression options */
  -  { "extreme", 'e', POPT_BIT_SET|POPT_ARGFLAG_TOGGLE,        &preset_number, 
 LZMA_PRESET_EXTREME,
  +  /* XXX LZMA specific flag needs to be set some other way. */
  +  { "extreme", 'e', POPT_BIT_SET|POPT_ARGFLAG_TOGGLE,        &__rpmz.level,  
LZMA_PRESET_EXTREME,
        N_("extreme compression"), NULL },
  -  { "fast", '\0', POPT_ARG_VAL,                              &preset_number, 
 1,
  +  { "fast", '\0', POPT_ARG_VAL,                              &__rpmz.level,  
1,
        N_("fast compression"), NULL },
  -  { "best", '\0', POPT_ARG_VAL,                              &preset_number, 
 9,
  +  { "best", '\0', POPT_ARG_VAL,                              &__rpmz.level,  
9,
        N_("best compression"), NULL },
   
  -  { NULL, '1', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  1,
  +  { NULL, '1', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  1,
        NULL, NULL },
  -  { NULL, '2', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  2,
  +  { NULL, '2', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  2,
        NULL, NULL },
  -  { NULL, '3', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  3,
  +  { NULL, '3', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  3,
        NULL, NULL },
  -  { NULL, '4', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  4,
  +  { NULL, '4', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  4,
        NULL, NULL },
  -  { NULL, '5', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  5,
  +  { NULL, '5', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  5,
        NULL, NULL },
  -  { NULL, '6', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  6,
  +  { NULL, '6', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  6,
        NULL, NULL },
  -  { NULL, '7', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  7,
  +  { NULL, '7', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  7,
        NULL, NULL },
  -  { NULL, '8', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  8,
  +  { NULL, '8', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  8,
        NULL, NULL },
  -  { NULL, '9', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &preset_number,  9,
  +  { NULL, '9', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &__rpmz.level,  9,
        NULL, NULL },
   
     /* ===== Custom filters */
  @@ -1812,7 +1806,7 @@
       if (z->mode == RPMZ_MODE_COMPRESS) {
        int xx;
        xx = snprintf(z->ofmode, sizeof(z->ofmode)-1, "wb%u",
  -             (unsigned)(preset_number % 10));
  +             (unsigned)(__rpmz.level % 10));
       }
       z->suffix = opt_suffix;
   
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to