Fix misuse of \r (potentially) in flac -d or -t output.
authorErik de Castro Lopo <erikd@mega-nerd.com>
Sun, 12 Feb 2012 09:37:16 +0000 (20:37 +1100)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Sun, 12 Feb 2012 09:37:16 +0000 (20:37 +1100)
Patch from Joshua Kwan <joshk@triplehelix.org> via Debian.
Closes Debian bug #138828.

src/flac/decode.c

index ce152a2..4aa70d3 100644 (file)
@@ -1414,6 +1414,7 @@ void print_error_with_state(const DecoderSession *d, const char *message)
 
 void print_stats(const DecoderSession *decoder_session)
 {
+       static int count = 0;
        if(flac__utils_verbosity_ >= 2) {
 #if defined _MSC_VER || defined __MINGW32__
                /* with MSVC you have to spoon feed it the casting */
@@ -1422,7 +1423,13 @@ void print_stats(const DecoderSession *decoder_session)
                const double progress = (double)decoder_session->samples_processed / (double)decoder_session->total_samples * 100.0;
 #endif
                if(decoder_session->total_samples > 0) {
-                       fprintf(stderr, "\r%s: %s%u%% complete",
+                       while (count > 0 && count--)
+                               fprintf(stderr, "\b");
+
+                       if ((unsigned)floor(progress + 0.5) == 100)
+                               return;
+
+                       count = fprintf(stderr, "%s: %s%u%% complete",
                                decoder_session->inbasefilename,
                                decoder_session->test_only? "testing, " : decoder_session->analysis_mode? "analyzing, " : "",
                                (unsigned)floor(progress + 0.5)