diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2012-12-14 20:13:32 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2012-12-14 20:13:32 +0200 |
commit | e7b424d267a34803db8d92a3515528be2ed45abd (patch) | |
tree | 80da65be9f9c6b5488de6c1c24127738fad4bd3a /src/liblzma/common/common.c | |
parent | liblzma: Fix mythread_sync for nested locking. (diff) | |
download | xz-e7b424d267a34803db8d92a3515528be2ed45abd.tar.xz |
Make the progress indicator smooth in threaded mode.
This adds lzma_get_progress() to liblzma and takes advantage
of it in xz.
lzma_get_progress() collects progress information from
the thread-specific structures so that fairly accurate
progress information is available to applications. Adding
a new function seemed to be a better way than making the
information directly available in lzma_stream (like total_in
and total_out are) because collecting the information requires
locking mutexes. It's waste of time to do it more often than
the up to date information is actually needed by an application.
Diffstat (limited to '')
-rw-r--r-- | src/liblzma/common/common.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/liblzma/common/common.c b/src/liblzma/common/common.c index 5d4d2408..578d257a 100644 --- a/src/liblzma/common/common.c +++ b/src/liblzma/common/common.c @@ -328,6 +328,22 @@ lzma_end(lzma_stream *strm) } +extern LZMA_API(void) +lzma_get_progress(lzma_stream *strm, + uint64_t *progress_in, uint64_t *progress_out) +{ + if (strm->internal->next.get_progress != NULL) { + strm->internal->next.get_progress(strm->internal->next.coder, + progress_in, progress_out); + } else { + *progress_in = strm->total_in; + *progress_out = strm->total_out; + } + + return; +} + + extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm) { |