aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2022-11-09 14:10:52 +0200
committerLasse Collin <lasse.collin@tukaani.org>2022-11-11 13:48:06 +0200
commita08be1c420501b1c75770a8f6103e3959486c895 (patch)
treed037387b6d4af302862ff52fe0937b318b01340a
parentxz: Fix displaying of file sizes in progress indicator in passthru mode. (diff)
downloadxz-a08be1c420501b1c75770a8f6103e3959486c895.tar.xz
xz: Add comments about stdin and src_st.st_size.
"xz -v < regular_file > out.xz" doesn't display the percentage and estimated remaining time because it doesn't even try to check the input file size when input is read from stdin. This could be improved but for now there's just a comment to remind about it.
-rw-r--r--src/xz/coder.c9
-rw-r--r--src/xz/file_io.c4
2 files changed, 13 insertions, 0 deletions
diff --git a/src/xz/coder.c b/src/xz/coder.c
index f952e80d..4f51e8d5 100644
--- a/src/xz/coder.c
+++ b/src/xz/coder.c
@@ -931,6 +931,15 @@ coder_run(const char *filename)
mytime_set_start_time();
// Initialize the progress indicator.
+ //
+ // NOTE: When reading from stdin, fstat()
+ // isn't called on it and thus src_st.st_size
+ // is zero. If stdin pointed to a regular
+ // file, it would still be possible to know
+ // the file size but then we would also need
+ // to take into account the current reading
+ // position since with stdin it isn't
+ // necessarily at the beginning of the file.
const bool is_passthru = init_ret
== CODER_INIT_PASSTHRU;
const uint64_t in_size
diff --git a/src/xz/file_io.c b/src/xz/file_io.c
index 76b1967e..41e4c2d8 100644
--- a/src/xz/file_io.c
+++ b/src/xz/file_io.c
@@ -755,6 +755,10 @@ io_open_src(const char *src_name)
// a statically allocated structure.
static file_pair pair;
+ // This implicitly also initializes src_st.st_size to zero
+ // which is expected to be <= 0 by default. fstat() isn't
+ // called when reading from standard input but src_st.st_size
+ // is still read.
pair = (file_pair){
.src_name = src_name,
.dest_name = NULL,