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:   17-Feb-2009 00:54:24
  Branch: HEAD                             Handle: 2009021623542300

  Modified files:
    rpm/rpmio               rpmz.c

  Log:
    - jbj: swipe xz initialization for rpmz.

  Summary:
    Revision    Changes     Path
    1.8         +341 -246   rpm/rpmio/rpmz.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmz.c
  ============================================================================
  $ cvs diff -u -r1.7 -r1.8 rpmz.c
  --- rpm/rpmio/rpmz.c  16 Feb 2009 22:28:46 -0000      1.7
  +++ rpm/rpmio/rpmz.c  16 Feb 2009 23:54:23 -0000      1.8
  @@ -27,21 +27,21 @@
   #include "debug.h"
   
   enum tool_mode {
  -        MODE_COMPRESS,
  -        MODE_DECOMPRESS,
  -        MODE_TEST,
  -        MODE_LIST,
  +    MODE_COMPRESS,
  +    MODE_DECOMPRESS,
  +    MODE_TEST,
  +    MODE_LIST,
   };
   /*...@unchecked@*/
   static enum tool_mode opt_mode = MODE_COMPRESS;
   
   // NOTE: The order of these is significant in suffix.c.
   enum format_type {
  -     FORMAT_AUTO,
  -     FORMAT_XZ,
  -     FORMAT_LZMA,
  -     FORMAT_GZIP,
  -     FORMAT_RAW,
  +    FORMAT_AUTO,
  +    FORMAT_XZ,
  +    FORMAT_LZMA,
  +    FORMAT_GZIP,
  +    FORMAT_RAW,
   };
   /*...@unchecked@*/
   static enum format_type opt_format = FORMAT_AUTO;
  @@ -81,12 +81,10 @@
   
   /*...@unchecked@*/
   static int opt_threads;
  -#ifdef       NOTYET
   /*...@unchecked@*/
   static rpmuint64_t memlimit_encoder = 0;
   /*...@unchecked@*/
   static rpmuint64_t memlimit_decoder = 0;
  -#endif
   /*...@unchecked@*/
   static rpmuint64_t memlimit_custom = 0;
   
  @@ -96,22 +94,147 @@
   static size_t filter_count = 0;
   
   enum {
  -        OPT_SUBBLOCK = INT_MIN,
  -        OPT_X86,
  -        OPT_POWERPC,
  -        OPT_IA64,
  -        OPT_ARM,
  -        OPT_ARMTHUMB,
  -        OPT_SPARC,
  -        OPT_DELTA,
  -     OPT_LZMA1,
  -     OPT_LZMA2,
  +    OPT_SUBBLOCK = INT_MIN,
  +    OPT_X86,
  +    OPT_POWERPC,
  +    OPT_IA64,
  +    OPT_ARM,
  +    OPT_ARMTHUMB,
  +    OPT_SPARC,
  +    OPT_DELTA,
  +    OPT_LZMA1,
  +    OPT_LZMA2,
   
  -        OPT_FILES,
  -        OPT_FILES0,
  +    OPT_FILES,
  +    OPT_FILES0,
   };
   
   /*==============================================================*/
  +static int checkfd(const char * devnull, int fdno, int flags)
  +     /*...@*/
  +{
  +    struct stat sb;
  +    int ret = 0;
  +
  +    if (fstat(fdno, &sb) == -1 && errno == EBADF)
  +     ret = (open(devnull, flags) == fdno) ? 1 : 2;
  +    return ret;
  +}
  +
  +static void io_init(void)
  +     /*...@*/
  +{
  +    static int _oneshot = 0;
  +
  +    /* Insure that stdin/stdout/stderr are open, lest stderr end up in 
rpmdb. */
  +   if (!_oneshot) {
  +     static const char _devnull[] = "/dev/null";
  +#if defined(STDIN_FILENO)
  +     (void) checkfd(_devnull, STDIN_FILENO, O_RDONLY);
  +#endif
  +#if defined(STDOUT_FILENO)
  +     (void) checkfd(_devnull, STDOUT_FILENO, O_WRONLY);
  +#endif
  +#if defined(STDERR_FILENO)
  +     (void) checkfd(_devnull, STDERR_FILENO, O_WRONLY);
  +#endif
  +     _oneshot++;
  +    }
  +}
  +
  +/*==============================================================*/
  +#define      HAVE_PHYSMEM_SYSCONF    1       /* XXX hotwired for linux */
  +
  +static rpmuint64_t physmem(void)
  +     /*...@*/
  +{
  +    rpmuint64_t ret = 0;
  +
  +#if defined(HAVE_PHYSMEM_SYSCONF)
  +    {        const long pagesize = sysconf(_SC_PAGESIZE);
  +     const long pages = sysconf(_SC_PHYS_PAGES);
  +     if (pagesize != -1 || pages != -1)
  +         ret = (rpmuint64_t)(pagesize) * (rpmuint64_t)(pages);
  +    }
  +#elif defined(HAVE_PHYSMEM_SYSCTL)
  +    {        int name[2] = { CTL_HW, HW_PHYSMEM };
  +     unsigned long mem;
  +     size_t mem_ptr_size = sizeof(mem);
  +     if (!sysctl(name, 2, &mem, &mem_ptr_size, NULL, NULL)) {
  +         if (mem_ptr_size != sizeof(mem)) {
  +             if (mem_ptr_size == sizeof(unsigned int))
  +                 ret = *(unsigned int *)(&mem);
  +         } else {
  +             ret = mem;
  +         }
  +     }
  +    }
  +#endif
  +    return ret;
  +}
  +
  +#define      HAVE_NCPU_SYSCONF       1       /* XXX hotwired for linux */
  +
  +static void
  +hw_cores(void)
  +     /*...@globals opt_threads @*/
  +     /*...@modifies opt_threads @*/
  +{
  +#if defined(HAVE_NCPU_SYSCONF)
  +    {        const long cpus = sysconf(_SC_NPROCESSORS_ONLN);
  +     if (cpus > 0)
  +         opt_threads = (size_t)(cpus);
  +    }
  +
  +#elif defined(HAVE_NCPU_SYSCTL)
  +    {        int name[2] = { CTL_HW, HW_NCPU };
  +     int cpus;
  +     size_t cpus_size = sizeof(cpus);
  +     if (!sysctl(name, &cpus, &cpus_size, NULL, NULL)
  +      && cpus_size == sizeof(cpus) && cpus > 0)
  +         opt_threads = (size_t)(cpus);
  +    }
  +#endif
  +
  +#if defined(_SC_THREAD_THREADS_MAX)
  +    {        const long threads_max = sysconf(_SC_THREAD_THREADS_MAX);
  +     if (threads_max > 0 && (int)(threads_max) < opt_threads)
  +         opt_threads = (int)(threads_max);
  +    }
  +#elif defined(PTHREAD_THREADS_MAX)
  +    if (opt_threads > PTHREAD_THREADS_MAX)
  +     opt_threads = PTHREAD_THREADS_MAX;
  +#endif
  +
  +    return;
  +}
  +
  +static void
  +hw_memlimit_init(void)
  +     /*...@globals memlimit_decoder, memlimit_encoder @*/
  +     /*...@modifies memlimit_decoder, memlimit_encoder @*/
  +{
  +    rpmuint64_t mem = physmem();
  +
  +    /* Assume 16MB as minimum memory. */
  +    if (mem == 0)
  +         mem = 16 * 1024 * 1024;
  +
  +    /* Use 90% of RAM when encoding, 33% when decoding. */
  +    memlimit_encoder = mem - mem / 10;
  +    memlimit_decoder = mem / 3;
  +    return;
  +}
  +
  +static void
  +hw_init(void)
  +{
  +    hw_memlimit_init();
  +    hw_cores();
  +    return;
  +}
  +
  +/*==============================================================*/
   
   #define GZ_SUFFIX    ".gz"
   #define SUFFIX_LEN   (sizeof(GZ_SUFFIX)-1)
  @@ -219,18 +342,17 @@
   /*==============================================================*/
   
   typedef struct {
  -     const char *name;
  -     rpmuint64_t id;
  +    const char *name;
  +    rpmuint64_t id;
   } name_id_map;
   
   typedef struct {
  -     const char *name;
  -     const name_id_map *map;
  -     rpmuint64_t min;
  -     rpmuint64_t max;
  +    const char *name;
  +    const name_id_map *map;
  +    rpmuint64_t min;
  +    rpmuint64_t max;
   } option_map;
   
  -
   /// Parses option=value pairs that are separated with colons, semicolons,
   /// or commas: opt=val:opt=val;opt=val,opt=val
   ///
  @@ -258,141 +380,130 @@
                void *filter_options)
        /*...@*/
   {
  -     char * s;
  -     char *name;
  +    char * s;
  +    char *name;
   
  -     if (str == NULL || str[0] == '\0')
  -             return;
  +    if (str == NULL || str[0] == '\0')
  +     return;
   
  -     s = xstrdup(str);
  -     name = s;
  +    s = xstrdup(str);
  +    name = s;
   
  -     while (1) {
  -             char *split = strchr(name, ',');
  -             char *value;
  -             int found;
  -             size_t i;
  -
  -             if (split != NULL)
  -                     *split = '\0';
  -
  -             value = strchr(name, '=');
  -             if (value != NULL)
  -                     *value++ = '\0';
  +    while (1) {
  +     char *split = strchr(name, ',');
  +     char *value;
  +     int found;
  +     size_t i;
  +
  +     if (split != NULL)
  +         *split = '\0';
  +
  +     value = strchr(name, '=');
  +     if (value != NULL)
  +         *value++ = '\0';
   
  -             if (value == NULL || value[0] == '\0') {
  -                     fprintf(stderr, _("%s: %s: Options must be `name=value' 
"
  +     if (value == NULL || value[0] == '\0') {
  +         fprintf(stderr, _("%s: %s: Options must be `name=value' "
                                        "pairs separated with commas"),
                                        __progname, str);
  -                     /*...@-exitarg@*/ exit(2); /*...@=exitarg@*/
  -             }
  +         /*...@-exitarg@*/ exit(2); /*...@=exitarg@*/
  +     }
   
  -             // Look for the option name from the option map.
  -             found = 0;
  -             for (i = 0; opts[i].name != NULL; ++i) {
  -                     if (strcmp(name, opts[i].name) != 0)
  -                             continue;
  -
  -                     if (opts[i].map == NULL) {
  -                             // value is an integer.
  -                             rpmuint64_t v;
  +     // Look for the option name from the option map.
  +     found = 0;
  +     for (i = 0; opts[i].name != NULL; ++i) {
  +         if (strcmp(name, opts[i].name) != 0)
  +             continue;
  +
  +         if (opts[i].map == NULL) {
  +             // value is an integer.
  +             rpmuint64_t v;
   #ifdef NOTYET
  -                             v = str_to_uint64(name, value,
  -                                             opts[i].min, opts[i].max);
  +             v = str_to_uint64(name, value, opts[i].min, opts[i].max);
   #else
  -                             v = strtoull(value, NULL, 0);
  +             v = strtoull(value, NULL, 0);
   #endif
  -                             set(filter_options, i, v);
  -                     } else {
  -                             // value is a string which we should map
  -                             // to an integer.
  -                             size_t j;
  -                             for (j = 0; opts[i].map[j].name != NULL; ++j) {
  -                                     if (strcmp(opts[i].map[j].name, value)
  -                                                     == 0)
  -                                             break;
  -                             }
  -
  -                             if (opts[i].map[j].name == NULL) {
  -                                     fprintf(stderr, _("%s: %s: Invalid 
option "
  -                                                     "value"), __progname, 
value);
  -                                     /*...@-exitarg@*/ exit(2); 
/*...@=exitarg@*/
  -                             }
  -
  -                             set(filter_options, i, opts[i].map[j].id);
  -                     }
  -
  -                     found = 1;
  +             set(filter_options, i, v);
  +         } else {
  +             // value is a string which we should map
  +             // to an integer.
  +             size_t j;
  +             for (j = 0; opts[i].map[j].name != NULL; ++j) {
  +                 if (strcmp(opts[i].map[j].name, value) == 0)
                        break;
                }
   
  -             if (!found) {
  -                     fprintf(stderr, _("%s: %s: Invalid option name"), 
__progname, name);
  -                     /*...@-exitarg@*/ exit(2); /*...@=exitarg@*/
  +             if (opts[i].map[j].name == NULL) {
  +                 fprintf(stderr, _("%s: %s: Invalid option value"),
  +                     __progname, value);
  +                 /*...@-exitarg@*/ exit(2); /*...@=exitarg@*/
                }
   
  -             if (split == NULL)
  -                     break;
  +             set(filter_options, i, opts[i].map[j].id);
  +         }
   
  -             name = split + 1;
  +         found = 1;
  +         break;
        }
   
  -     free(s);
  -     return;
  +     if (!found) {
  +         fprintf(stderr, _("%s: %s: Invalid option name"), __progname, name);
  +         /*...@-exitarg@*/ exit(2); /*...@=exitarg@*/
  +     }
  +
  +     if (split == NULL)
  +         break;
  +
  +     name = split + 1;
  +    }
  +
  +    s = _free(s);
  +    return;
   }
   
   /* ===== Subblock ===== */
   enum {
  -     OPT_SIZE,
  -     OPT_RLE,
  -     OPT_ALIGN,
  +    OPT_SIZE,
  +    OPT_RLE,
  +    OPT_ALIGN,
   };
   
   static void
   set_subblock(void *options, rpmuint32_t key, rpmuint64_t value)
        /*...@*/
   {
  -     lzma_options_subblock *opt = options;
  +    lzma_options_subblock *opt = options;
   
  -     switch (key) {
  -     case OPT_SIZE:
  -             opt->subblock_data_size = value;
  -             break;
  -
  -     case OPT_RLE:
  -             opt->rle = value;
  -             break;
  -
  -     case OPT_ALIGN:
  -             opt->alignment = value;
  -             break;
  -     }
  +    switch (key) {
  +    case OPT_SIZE:   opt->subblock_data_size = value;        break;
  +    case OPT_RLE:    opt->rle = value;                       break;
  +    case OPT_ALIGN:  opt->alignment = value;                 break;
  +    }
   }
   
   static lzma_options_subblock *
   options_subblock(const char *str)
        /*...@*/
   {
  -     static const option_map opts[] = {
  -             { "size", NULL,   LZMA_SUBBLOCK_DATA_SIZE_MIN,
  -                               LZMA_SUBBLOCK_DATA_SIZE_MAX },
  -             { "rle",  NULL,   LZMA_SUBBLOCK_RLE_OFF,
  -                               LZMA_SUBBLOCK_RLE_MAX },
  -             { "align",NULL,   LZMA_SUBBLOCK_ALIGNMENT_MIN,
  -                               LZMA_SUBBLOCK_ALIGNMENT_MAX },
  -             { NULL,   NULL,   0, 0 }
  -     };
  -
  -     lzma_options_subblock *options
  -                     = xmalloc(sizeof(lzma_options_subblock));
  -     options->allow_subfilters = 0;
  -     options->alignment = LZMA_SUBBLOCK_ALIGNMENT_DEFAULT;
  -     options->subblock_data_size = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT;
  -     options->rle = LZMA_SUBBLOCK_RLE_OFF;
  +    static const option_map opts[] = {
  +     { "size", NULL,   LZMA_SUBBLOCK_DATA_SIZE_MIN,
  +                       LZMA_SUBBLOCK_DATA_SIZE_MAX },
  +     { "rle",  NULL,   LZMA_SUBBLOCK_RLE_OFF,
  +                       LZMA_SUBBLOCK_RLE_MAX },
  +     { "align",NULL,   LZMA_SUBBLOCK_ALIGNMENT_MIN,
  +                       LZMA_SUBBLOCK_ALIGNMENT_MAX },
  +     { NULL,   NULL,   0, 0 }
  +    };
  +
  +    lzma_options_subblock *options = xmalloc(sizeof(lzma_options_subblock));
  +    options->allow_subfilters = 0;
  +    options->alignment = LZMA_SUBBLOCK_ALIGNMENT_DEFAULT;
  +    options->subblock_data_size = LZMA_SUBBLOCK_DATA_SIZE_DEFAULT;
  +    options->rle = LZMA_SUBBLOCK_RLE_OFF;
   
  -     parse_options(str, opts, &set_subblock, options);
  +    parse_options(str, opts, &set_subblock, options);
   
  -     return options;
  +    return options;
   }
   
   /* ===== Delta ===== */
  @@ -406,150 +517,125 @@
   set_delta(void *options, rpmuint32_t key, rpmuint64_t value)
        /*...@*/
   {
  -     lzma_options_delta *opt = options;
  -     switch (key) {
  -     case OPT_DIST:
  -             opt->dist = value;
  -             break;
  -     }
  +    lzma_options_delta *opt = options;
  +    switch (key) {
  +    case OPT_DIST:   opt->dist = value;              break;
  +    }
   }
   
   static lzma_options_delta *
   options_delta(const char *str)
   {
  -     static const option_map opts[] = {
  -             { "dist",     NULL,  LZMA_DELTA_DIST_MIN,
  -                                  LZMA_DELTA_DIST_MAX },
  -             { NULL,       NULL,  0, 0 }
  -     };
  -
  -     lzma_options_delta *options = xmalloc(sizeof(lzma_options_delta));
  +    static const option_map opts[] = {
  +     { "dist",     NULL,  LZMA_DELTA_DIST_MIN,
  +                          LZMA_DELTA_DIST_MAX },
  +     { NULL,       NULL,  0, 0 }
  +    };
  +
  +    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.
  -     *options = (lzma_options_delta){
  -             // It's hard to give a useful default for this.
  -             .type = LZMA_DELTA_TYPE_BYTE,
  -             .dist = LZMA_DELTA_DIST_MIN,
  -     };
  +     .type = LZMA_DELTA_TYPE_BYTE,
  +     .dist = LZMA_DELTA_DIST_MIN,
  +    };
   
  -     parse_options(str, opts, &set_delta, options);
  +    parse_options(str, opts, &set_delta, options);
   
  -     return options;
  +    return options;
   }
   
   /* ===== LZMA ===== */
   enum {
  -     OPT_PRESET,
  -     OPT_DICT,
  -     OPT_LC,
  -     OPT_LP,
  -     OPT_PB,
  -     OPT_MODE,
  -     OPT_NICE,
  -     OPT_MF,
  -     OPT_DEPTH,
  +    OPT_PRESET,
  +    OPT_DICT,
  +    OPT_LC,
  +    OPT_LP,
  +    OPT_PB,
  +    OPT_MODE,
  +    OPT_NICE,
  +    OPT_MF,
  +    OPT_DEPTH,
   };
   
   static void
   set_lzma(void *options, rpmuint32_t key, rpmuint64_t value)
        /*...@*/
   {
  -     lzma_options_lzma *opt = options;
  +    lzma_options_lzma *opt = options;
   
  -     switch (key) {
  -     case OPT_PRESET:
  -             if (lzma_lzma_preset(options, (uint32_t)(value))) {
  -                     fprintf(stderr, "LZMA1/LZMA2 preset %u is not 
supported",
  +    switch (key) {
  +    case OPT_PRESET:
  +     if (lzma_lzma_preset(options, (uint32_t)(value))) {
  +         fprintf(stderr, _("LZMA1/LZMA2 preset %u is not supported"),
                                        (unsigned int)(value));
  -                     /*...@-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;
  -
  -     case OPT_PB:
  -             opt->pb = value;
  -             break;
  -
  -     case OPT_MODE:
  -             opt->mode = value;
  -             break;
  -
  -     case OPT_NICE:
  -             opt->nice_len = value;
  -             break;
  -
  -     case OPT_MF:
  -             opt->mf = value;
  -             break;
  -
  -     case OPT_DEPTH:
  -             opt->depth = value;
  -             break;
  +         /*...@-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;
  +    case OPT_PB:     opt->pb = value;                break;
  +    case OPT_MODE:   opt->mode = value;              break;
  +    case OPT_NICE:   opt->nice_len = value;          break;
  +    case OPT_MF:     opt->mf = value;                break;
  +    case OPT_DEPTH:  opt->depth = value;             break;
  +    }
   }
   
   static lzma_options_lzma *
   options_lzma(const char *str)
   {
  -     /*...@unchecked@*/ /*...@observer@*/
  -     static const name_id_map modes[] = {
  -             { "fast",   LZMA_MODE_FAST },
  -             { "normal", LZMA_MODE_NORMAL },
  -             { NULL,     0 }
  -     };
  -
  -     /*...@unchecked@*/ /*...@observer@*/
  -     static const name_id_map mfs[] = {
  -             { "hc3", LZMA_MF_HC3 },
  -             { "hc4", LZMA_MF_HC4 },
  -             { "bt2", LZMA_MF_BT2 },
  -             { "bt3", LZMA_MF_BT3 },
  -             { "bt4", LZMA_MF_BT4 },
  -             { NULL,  0 }
  -     };
  -
  -     /*...@unchecked@*/ /*...@observer@*/
  -     static const option_map opts[] = {
  -             { "preset", NULL,   1, 9 },
  -             { "dict",   NULL,   LZMA_DICT_SIZE_MIN,
  -                             (UINT32_C(1) << 30) + (UINT32_C(1) << 29) },
  -             { "lc",     NULL,   LZMA_LCLP_MIN, LZMA_LCLP_MAX },
  -             { "lp",     NULL,   LZMA_LCLP_MIN, LZMA_LCLP_MAX },
  -             { "pb",     NULL,   LZMA_PB_MIN, LZMA_PB_MAX },
  -             { "mode",   modes,  0, 0 },
  -             { "nice",   NULL,   2, 273 },
  -             { "mf",     mfs,    0, 0 },
  -             { "depth",  NULL,   0, UINT32_MAX },
  -             { NULL,     NULL,   0, 0 }
  -     };
  -
  -     lzma_options_lzma *options = xmalloc(sizeof(lzma_options_lzma));
  -
  -     options->dict_size = LZMA_DICT_SIZE_DEFAULT;
  -     options->preset_dict = NULL;
  -     options->preset_dict_size = 0,
  -     options->lc = LZMA_LC_DEFAULT;
  -     options->lp = LZMA_LP_DEFAULT;
  -     options->pb = LZMA_PB_DEFAULT;
  -     options->persistent = 0;
  -     options->mode = LZMA_MODE_NORMAL;
  -     options->nice_len = 64;
  -     options->mf = LZMA_MF_BT4;
  -     options->depth = 0;
  +    /*...@unchecked@*/ /*...@observer@*/
  +    static const name_id_map modes[] = {
  +     { "fast",   LZMA_MODE_FAST },
  +     { "normal", LZMA_MODE_NORMAL },
  +     { NULL,     0 }
  +    };
  +
  +    /*...@unchecked@*/ /*...@observer@*/
  +    static const name_id_map mfs[] = {
  +     { "hc3", LZMA_MF_HC3 },
  +     { "hc4", LZMA_MF_HC4 },
  +     { "bt2", LZMA_MF_BT2 },
  +     { "bt3", LZMA_MF_BT3 },
  +     { "bt4", LZMA_MF_BT4 },
  +     { NULL,  0 }
  +    };
  +
  +    /*...@unchecked@*/ /*...@observer@*/
  +    static const option_map opts[] = {
  +     { "preset", NULL,   1, 9 },
  +     { "dict",   NULL,   LZMA_DICT_SIZE_MIN,
  +                     (UINT32_C(1) << 30) + (UINT32_C(1) << 29) },
  +     { "lc",     NULL,   LZMA_LCLP_MIN, LZMA_LCLP_MAX },
  +     { "lp",     NULL,   LZMA_LCLP_MIN, LZMA_LCLP_MAX },
  +     { "pb",     NULL,   LZMA_PB_MIN, LZMA_PB_MAX },
  +     { "mode",   modes,  0, 0 },
  +     { "nice",   NULL,   2, 273 },
  +     { "mf",     mfs,    0, 0 },
  +     { "depth",  NULL,   0, UINT32_MAX },
  +     { NULL,     NULL,   0, 0 }
  +    };
  +
  +    lzma_options_lzma *options = xmalloc(sizeof(lzma_options_lzma));
  +
  +    options->dict_size = LZMA_DICT_SIZE_DEFAULT;
  +    options->preset_dict = NULL;
  +    options->preset_dict_size = 0,
  +    options->lc = LZMA_LC_DEFAULT;
  +    options->lp = LZMA_LP_DEFAULT;
  +    options->pb = LZMA_PB_DEFAULT;
  +    options->persistent = 0;
  +    options->mode = LZMA_MODE_NORMAL;
  +    options->nice_len = 64;
  +    options->mf = LZMA_MF_BT4;
  +    options->depth = 0;
   
  -     parse_options(str, opts, &set_lzma, options);
  +    parse_options(str, opts, &set_lzma, options);
   
  -     return options;
  +    return options;
   }
   
   static void
  @@ -880,8 +966,8 @@
        /*...@modifies __assert_program_name, _rpmrepo,
                rpmGlobalMacroContext, fileSystem, internalState @*/
   {
  -    poptContext optCon = rpmioInit(argc, argv, optionsTable);
  -    const char ** av = NULL;
  +    poptContext optCon;
  +    const char ** av;
       int ac;
       int rc = 1;              /* assume failure. */
       int i;
  @@ -890,6 +976,14 @@
       __progname = "rpmz";
   /*...@=observertrans =readonlytrans @*/
   
  +    /* Make sure that stdin/stdout/stderr are open. */
  +    io_init();
  +
  +    /* Set hardware specific parameters. */
  +    hw_init();
  +
  +    /* Parse options. */
  +    optCon = rpmioInit(argc, argv, optionsTable);
       av = poptGetArgs(optCon);
       if (av == NULL || av[0] == NULL) {
        poptPrintUsage(optCon, stderr, 0);
  @@ -897,6 +991,7 @@
       }
       ac = argvCount(av);
   
  +    /* Process arguments. */
       if (av != NULL)
       for (i = 0; i < ac; i++) {
        rpmRC frc;
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to