about summary refs log tree commit diff
diff options
context:
space:
mode:
authorHarald van Dijk <harald@gigawatt.nl>2019-11-03T21·46+0000
committerEelco Dolstra <edolstra@gmail.com>2020-01-04T12·40+0100
commit61855a4e7bbaeb26de5a73040d87c28944e76b13 (patch)
treeb562d07c5cffac615d0b0fd0764ae38e68340f1d
parent9b4e99801f26e985b6fd61ee1e8154c30cc5efa1 (diff)
Fix progress bar when nix-prefetch-url is piped.
The intent of the code was that if the window size cannot be determined,
it would be treated as having the maximum possible size. Because of a
missing assignment, it was actually treated as having a width of 0.

The reason the width could not be determined was because it was obtained
from stdout, not stderr, even though the printing was done to stderr.

This commit addresses both issues.

(cherry picked from commit c935ad3f025d5c3d8026711a1eb50b2917b61d59)
-rw-r--r--src/libutil/util.cc2
-rw-r--r--src/nix/progress-bar.cc2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 6f3bf7ae86e3..ad8cc1894c14 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -1452,7 +1452,7 @@ static Sync<std::pair<unsigned short, unsigned short>> windowSize{{0, 0}};
 static void updateWindowSize()
 {
     struct winsize ws;
-    if (ioctl(1, TIOCGWINSZ, &ws) == 0) {
+    if (ioctl(2, TIOCGWINSZ, &ws) == 0) {
         auto windowSize_(windowSize.lock());
         windowSize_->first = ws.ws_row;
         windowSize_->second = ws.ws_col;
diff --git a/src/nix/progress-bar.cc b/src/nix/progress-bar.cc
index 5c05d6b227ed..661966733d36 100644
--- a/src/nix/progress-bar.cc
+++ b/src/nix/progress-bar.cc
@@ -341,7 +341,7 @@ public:
         }
 
         auto width = getWindowSize().second;
-        if (width <= 0) std::numeric_limits<decltype(width)>::max();
+        if (width <= 0) width = std::numeric_limits<decltype(width)>::max();
 
         writeToStderr("\r" + filterANSIEscapes(line, false, width) + "\e[K");
     }