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 20:20:38
  Branch: HEAD                             Handle: 2009022019203800

  Modified files:
    rpm/rpmio               rpmz.c

  Log:
    - jbj: stage message*() routines prior to using rpmlog().

  Summary:
    Revision    Changes     Path
    1.22        +303 -51    rpm/rpmio/rpmz.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmz.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 rpmz.c
  --- rpm/rpmio/rpmz.c  20 Feb 2009 18:33:05 -0000      1.21
  +++ rpm/rpmio/rpmz.c  20 Feb 2009 19:20:38 -0000      1.22
  @@ -111,8 +111,11 @@
       RPMZ_FLAGS_FORCE         = _ZFB(1),      /*< -f, --force ... */
       RPMZ_FLAGS_KEEP          = _ZFB(2),      /*< -k, --keep ... */
       RPMZ_FLAGS_RECURSE               = _ZFB(3),      /*< -r, --recursive ... 
*/
  -    /* XXX unused */
  -    RPMZ_FLAGS_EXTREME               = _ZFB(4),      /*<     --extreme ... */
  +    RPMZ_FLAGS_EXTREME               = _ZFB(4),      /*< -e, --extreme ... */
  +  /* XXX compressor specific flags need to be set some other way. */
  +  /* XXX unused */
  +    RPMZ_FLAGS_FAST          = _ZFB(5),      /*<     --fast ... */
  +    RPMZ_FLAGS_BEST          = _ZFB(6),      /*<     --best ... */
   
   #ifdef       NOTYET
       RPMZ_FLAGS_SUBBLOCK              = INT_MIN,
  @@ -696,7 +699,6 @@
       return terminating;
   }
   
  -#ifdef       NOTYET
   /*...@unchecked@*/
   static int signals_block_count;
   
  @@ -705,13 +707,14 @@
           /*...@globals errno, signals_block_count @*/
           /*...@modifies errno, signals_block_count @*/
   {
  -        if (signals_block_count++ == 0) {
  -                const int saved_errno = errno;
  -                mythread_sigmask(SIG_BLOCK, &hooked_signals, NULL);
  -                errno = saved_errno;
  -        }
  -
  -        return;
  +    if (signals_block_count++ == 0) {
  +#ifdef       NOTYET
  +     const int saved_errno = errno;
  +     mythread_sigmask(SIG_BLOCK, &hooked_signals, NULL);
  +     errno = saved_errno;
  +#endif
  +    }
  +    return;
   }
   
   static void
  @@ -719,40 +722,39 @@
           /*...@globals errno, signals_block_count @*/
           /*...@modifies errno, signals_block_count @*/
   {
  -        assert(signals_block_count > 0);
  -
  -        if (--signals_block_count == 0) {
  -                const int saved_errno = errno;
  -                mythread_sigmask(SIG_UNBLOCK, &hooked_signals, NULL);
  -                errno = saved_errno;
  -        }
  +    assert(signals_block_count > 0);
   
  -        return;
  -}
  +    if (--signals_block_count == 0) {
  +#ifdef       NOTYET
  +     const int saved_errno = errno;
  +     mythread_sigmask(SIG_UNBLOCK, &hooked_signals, NULL);
  +     errno = saved_errno;
   #endif
  +    }
  +    return;
  +}
   
   static void signals_exit(void)
        /*...@*/
   {
   #ifdef       NOTYET
  -     const int sig = exit_signal;
  -
  -     if (sig != 0) {
  -             struct sigaction sa;
  -             sa.sa_handler = SIG_DFL;
  -             sigfillset(&sa.sa_mask);
  -             sa.sa_flags = 0;
  -             sigaction(sig, &sa, NULL);
  -             raise(exit_signal);
  -     }
  +    const int sig = exit_signal;
   
  -     return;
  -}
  +    if (sig != 0) {
  +     struct sigaction sa;
  +     sa.sa_handler = SIG_DFL;
  +     sigfillset(&sa.sa_mask);
  +     sa.sa_flags = 0;
  +     sigaction(sig, &sa, NULL);
  +     raise(exit_signal);
  +    }
   
  +    return;
   #else
       signals_fini();
   #endif
   }
  +
   /*==============================================================*/
   
   typedef struct {
  @@ -1078,6 +1080,266 @@
       return z->memlimit_custom != 0 ? z->memlimit_custom : 
z->memlimit_decoder;
   }
   
  +/// Verbosity levels
  +enum message_verbosity {
  +    V_SILENT,        ///< No messages
  +    V_ERROR, ///< Only error messages
  +    V_WARNING,       ///< Errors and warnings
  +    V_VERBOSE,       ///< Errors, warnings, and verbose statistics
  +    V_DEBUG, ///< Debugging, FIXME remove?
  +};
  +
  +static void
  +vmessage(enum message_verbosity v, const char *fmt, va_list ap)
  +     /*...@globals progress_active @*/
  +     /*...@modifies ap, progress_active @*/
  +{
  +#ifdef       NOTYET
  +    if (v <= verbosity)
  +#endif
  +    {
  +     signals_block();
  +
  +#ifdef       NOTYET
  +     // If there currently is a progress message on the screen,
  +     // print a newline so that the progress message is left
  +     // readable. This is good, because it is nice to be able to
  +     // see where the error occurred. (The alternative would be
  +     // to clear the progress message and replace it with the
  +     // error message.)
  +     if (progress_active) {
  +         progress_active = false;
  +         fputc('\n', stderr);
  +     }
  +#endif
  +
  +     fprintf(stderr, "%s: ", __progname);
  +     vfprintf(stderr, fmt, ap);
  +     fputc('\n', stderr);
  +
  +     signals_unblock();
  +    }
  +
  +    return;
  +}
  +
  +static void
  +message(enum message_verbosity v, const char *fmt, ...)
  +{
  +    va_list ap;
  +    va_start(ap, fmt);
  +    vmessage(v, fmt, ap);
  +    va_end(ap);
  +    return;
  +}
  +
  +#ifdef       UNUSED
  +static void
  +message_warning(const char *fmt, ...)
  +{
  +    va_list ap;
  +    va_start(ap, fmt);
  +    vmessage(V_WARNING, fmt, ap);
  +    va_end(ap);
  +
  +#ifdef       NOTYET
  +    set_exit_status(E_WARNING);
  +#endif
  +    return;
  +}
  +
  +static void
  +message_error(const char *fmt, ...)
  +{
  +    va_list ap;
  +    va_start(ap, fmt);
  +    vmessage(V_ERROR, fmt, ap);
  +    va_end(ap);
  +
  +#ifdef       NOTYET
  +    set_exit_status(E_ERROR);
  +#endif
  +    return;
  +}
  +#endif       /* UNUSED */
  +
  +static void
  +message_fatal(const char *fmt, ...)
  +{
  +    va_list ap;
  +    va_start(ap, fmt);
  +    vmessage(V_ERROR, fmt, ap);
  +    va_end(ap);
  +
  +#ifdef       NOTYET
  +    my_exit(E_ERROR);
  +#else
  +    exit(EXIT_FAILURE);
  +#endif
  +}
  +
  +static void
  +message_bug(void)
  +{
  +    message_fatal(_("Internal error (bug)"));
  +}
  +
  +static void
  +message_filters(enum message_verbosity v, const lzma_filter *filters)
  +{
  +    size_t i;
  +
  +#ifdef       NOTYET
  +    if (v > verbosity)
  +             return;
  +#endif
  +
  +    fprintf(stderr, _("%s: Filter chain:"), __progname);
  +
  +    for (i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) {
  +     fprintf(stderr, " --");
  +
  +     switch (filters[i].id) {
  +     case LZMA_FILTER_LZMA1:
  +     case LZMA_FILTER_LZMA2: {
  +         const lzma_options_lzma *opt = filters[i].options;
  +         const char *mode;
  +         const char *mf;
  +
  +         switch (opt->mode) {
  +         case LZMA_MODE_FAST:
  +             mode = "fast";
  +             break;
  +
  +         case LZMA_MODE_NORMAL:
  +             mode = "normal";
  +             break;
  +
  +         default:
  +             mode = "UNKNOWN";
  +             break;
  +         }
  +
  +         switch (opt->mf) {
  +         case LZMA_MF_HC3:
  +             mf = "hc3";
  +             break;
  +
  +         case LZMA_MF_HC4:
  +             mf = "hc4";
  +             break;
  +
  +         case LZMA_MF_BT2:
  +             mf = "bt2";
  +             break;
  +
  +         case LZMA_MF_BT3:
  +             mf = "bt3";
  +             break;
  +
  +         case LZMA_MF_BT4:
  +             mf = "bt4";
  +             break;
  +
  +         default:
  +             mf = "UNKNOWN";
  +             break;
  +         }
  +
  +#ifdef       NOTYET
  +#if defined(__LCLINT__)
  +         fprintf(stderr, "lzma%c=dict=%u"
  +                     ",lc=%u,lp=%u"
  +                     ",pb=%u"
  +                     ",mode=%s,nice=%u,mf=%s"
  +                     ",depth=%u",
  +                     filters[i].id == LZMA_FILTER_LZMA2
  +                             ? '2' : '1',
  +                     (unsigned)opt->dict_size,
  +                     (unsigned)opt->lc, (unsigned)opt->lp, (unsigned)opt->pb,
  +                     mode, (unsigned)opt->nice_len, mf, 
(unsigned)opt->depth);
  +#else
  +         fprintf(stderr, "lzma%c=dict=%" PRIu32
  +                     ",lc=%" PRIu32 ",lp=%" PRIu32
  +                     ",pb=%" PRIu32
  +                     ",mode=%s,nice=%" PRIu32 ",mf=%s"
  +                     ",depth=%" PRIu32,
  +                     filters[i].id == LZMA_FILTER_LZMA2
  +                             ? '2' : '1',
  +                     opt->dict_size,
  +                     opt->lc, opt->lp, opt->pb,
  +                     mode, opt->nice_len, mf, opt->depth);
  +#endif       /* __LCLINT__ */
  +#endif       /* NOTYET */
  +         break;
  +     }
  +
  +     case LZMA_FILTER_X86:
  +         fprintf(stderr, "x86");
  +         break;
  +
  +     case LZMA_FILTER_POWERPC:
  +         fprintf(stderr, "powerpc");
  +         break;
  +
  +     case LZMA_FILTER_IA64:
  +         fprintf(stderr, "ia64");
  +         break;
  +
  +     case LZMA_FILTER_ARM:
  +         fprintf(stderr, "arm");
  +         break;
  +
  +     case LZMA_FILTER_ARMTHUMB:
  +         fprintf(stderr, "armthumb");
  +         break;
  +
  +     case LZMA_FILTER_SPARC:
  +         fprintf(stderr, "sparc");
  +         break;
  +
  +     case LZMA_FILTER_DELTA: {
  +#ifdef       NOTYET
  +         const lzma_options_delta *opt = filters[i].options;
  +#if defined(__LCLINT__)
  +         fprintf(stderr, "delta=dist=%u", (unsigned)opt->dist);
  +#else
  +         fprintf(stderr, "delta=dist=%" PRIu32, opt->dist);
  +#endif       /* __LCLINT__ */
  +#endif       /* NOTYET */
  +         break;
  +     }
  +
  +     default:
  +         fprintf(stderr, "UNKNOWN");
  +         break;
  +     }
  +    }
  +
  +    fputc('\n', stderr);
  +    return;
  +}
  +
  +static void lzma_attribute((noreturn))
  +memlimit_too_small(uint64_t memory_usage, uint64_t memory_limit)
  +     /*...@*/
  +{
  +#ifdef       NOTYET
  +#if defined(__LCLINT__)
  +    message_fatal(_("Memory usage limit (%ull MiB) is too small "
  +                     "for the given filter setup (%ull MiB)"),
  +                     (unsigned long long)(memory_limit >> 20),
  +                     (unsigned long long)(memory_usage >> 20));
  +#else
  +    message_fatal(_("Memory usage limit (%" PRIu64 " MiB) is too small "
  +                     "for the given filter setup (%" PRIu64 " MiB)"),
  +                     memory_limit >> 20, memory_usage >> 20);
  +#endif
  +#else
  +    exit(EXIT_FAILURE);
  +#endif
  +}
  +
   static void
   coder_set_compression_settings(rpmz z)
        /*...@globals preset_default, preset_number @*/
  @@ -1104,7 +1366,6 @@
        coder_add_filter(z, LZMA_FILTER_SPARC, NULL);
   
       if (z->_filters_count == 0) {
  -#ifdef       NOTYET
        // 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
  @@ -1118,18 +1379,15 @@
                                "presets may vary between software "
                                "versions."));
        }
  -#endif       /* NOTYET */
   
  -     {   size_t preset_number = z->level;    /* XXX eliminate */
  +     {   size_t preset_number = z->level;
   
  -#ifdef       NOTYET
            // Get the preset for LZMA1 or LZMA2.
  -         if (preset_extreme)
  +         if (F_ISSET(z->flags, EXTREME))
                preset_number |= LZMA_PRESET_EXTREME;
  -#endif       /* NOTYET */
   
  -         /* XXX error message on failure? */
  -         (void) lzma_lzma_preset(&z->_options, preset_number);
  +         if (lzma_lzma_preset(&z->_options, preset_number))
  +             message_bug();
        }
   
        // Use LZMA2 except with --format=lzma we use LZMA1.
  @@ -1146,7 +1404,6 @@
       // Terminate the filter options array.
       z->_filters[z->_filters_count].id = LZMA_VLI_UNKNOWN;
   
  -#ifdef       NOTYET
       // If we are using the LZMA_Alone format, allow exactly one filter
       // which has to be LZMA.
       if (z->format == RPMZ_FORMAT_LZMA && (z->_filters_count != 1
  @@ -1156,7 +1413,6 @@
   
       // Print the selected filter chain.
       message_filters(V_DEBUG, z->_filters);
  -#endif       /* NOTYET */
   
       // If using --format=raw, we can be decoding. The memusage function
       // also validates the filter chain and the options used for the
  @@ -1169,11 +1425,11 @@
        memory_limit = hw_memlimit_decoder(z);
       }
   
  -#ifdef       NOTYET
       if (memory_usage == UINT64_MAX)
        message_fatal("Unsupported filter chain or filter options");
   
       // Print memory usage info.
  +#ifdef       NOTYET
   #if defined(__LCLINT__)
       message(V_DEBUG, _("%'llu MiB (%'llu B) of memory is "
                        "required per thread, "
  @@ -1194,7 +1450,7 @@
       if (memory_usage > memory_limit) {
        size_t i = 0;
        lzma_options_lzma *opt;
  -     uint32_t orig_dict_size;
  +     rpmuint32_t orig_dict_size;
   
   #ifdef       NOTYET
        // If --no-auto-adjust was used or we didn't find LZMA1 or
  @@ -1229,18 +1485,15 @@
            // more, but let's see if many complain about this
            // version.
            //
  -#ifdef       NOTYET
            // FIXME: Displays the scaled memory usage instead
            // of the original.
            if (opt->dict_size < (UINT32_C(1) << 20))
                memlimit_too_small(memory_usage, memory_limit);
  -#endif       /* NOTYET */
   
            memory_usage = lzma_raw_encoder_memusage(z->_filters);
  -#ifdef       NOTYET
  +
            if (memory_usage == UINT64_MAX)
                message_bug();
  -#endif       /* NOTYET */
   
            // Accept it if it is low enough.
            if (memory_usage <= memory_limit)
  @@ -1283,6 +1536,7 @@
                                memory_limit >> 20);
   #endif       /* __LCLINT__ */
   #endif       /* NOTYET */
  +
       }
   
       // Limit the number of worker threads so that memory usage
  @@ -1534,8 +1788,8 @@
        N_("use maximum of NUM (de)compression threads"), N_("NUM") },
   
     /* ===== Compression options */
  -  /* XXX LZMA specific flag needs to be set some other way. */
  -  { "extreme", 'e', POPT_BIT_SET|POPT_ARGFLAG_TOGGLE,        &__rpmz.level,  
LZMA_PRESET_EXTREME,
  +  /* XXX compressor specific flags need to be set some other way. */
  +  { "extreme", 'e', POPT_BIT_SET|POPT_ARGFLAG_TOGGLE,        &__rpmz.flags,  
RPMZ_FLAGS_EXTREME,
        N_("extreme compression"), NULL },
     { "fast", '\0', POPT_ARG_VAL,                              &__rpmz.level,  
1,
        N_("fast compression"), NULL },
  @@ -1731,8 +1985,6 @@
   #ifdef       NOTYET
       if (strstr(name, "lz") != NULL) {
        format_compress_auto = RPMZ_FORMAT_LZMA;
  -     z->idio = z->odio = lzdio;
  -     z->osuffix = ".lzma";
        z->format = RPMZ_FORMAT_LZMA;
       }
   #endif
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                [email protected]

Reply via email to