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)
This commit is contained in:
Harald van Dijk 2019-11-03 21:46:59 +00:00 committed by Eelco Dolstra
parent 9b4e99801f
commit 61855a4e7b
2 changed files with 2 additions and 2 deletions

View file

@ -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;

View file

@ -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");
}