From bc97851fdbee84af1eb19a987b9bc08167b8d6f7 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Wed, 15 Apr 2015 18:40:34 +0200 Subject: [PATCH] xbps-query(8): do not truncate output if stdout is not a tty. --- NEWS | 4 ++++ bin/xbps-install/util.c | 14 ++++++++++---- bin/xbps-query/list.c | 2 +- bin/xbps-query/search.c | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index b2ddd568..40c92ea9 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,9 @@ xbps-0.45 (???): + * xbps-query(8): if piping or redirecting not a tty, don't enforce any columns limit. + We do not want truncation in that case; this makes it possible to pipe the output + to a pager without truncation. + * libfetch: added support for keep-alive connections even if the HTTP server returns 304 (Not Modified). This is a noticable performance improvement for `xbps-install -S`. diff --git a/bin/xbps-install/util.c b/bin/xbps-install/util.c index 1ce45d82..3c057385 100644 --- a/bin/xbps-install/util.c +++ b/bin/xbps-install/util.c @@ -41,10 +41,16 @@ get_maxcols(void) { struct winsize ws; - if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == 0) - return ws.ws_col ? ws.ws_col : 80; - - return 80; + if (!isatty(STDOUT_FILENO) && errno == ENOTTY) { + /* not a TTY, don't use any limit */ + return 0; + } + if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == -1) { + /* 80x24 terminal */ + return 80; + } + /* TTY columns */ + return ws.ws_col; } void diff --git a/bin/xbps-query/list.c b/bin/xbps-query/list.c index 45e0f075..542b8700 100644 --- a/bin/xbps-query/list.c +++ b/bin/xbps-query/list.c @@ -72,7 +72,7 @@ list_pkgs_in_dict(struct xbps_handle *xhp _unused, tmp[i] = '\0'; len = strlen(tmp) + strlen(short_desc) + 2; - if (len > lpc->maxcols) { + if (lpc->maxcols && len > lpc->maxcols) { out = malloc(lpc->maxcols+1); assert(out); snprintf(out, lpc->maxcols - 3, diff --git a/bin/xbps-query/search.c b/bin/xbps-query/search.c index c41ef5ec..c07f84c9 100644 --- a/bin/xbps-query/search.c +++ b/bin/xbps-query/search.c @@ -80,7 +80,7 @@ print_results(struct xbps_handle *xhp, struct search_data *sd) inststr = "[-]"; len = strlen(inststr) + strlen(tmp) + strlen(desc) + 3; - if ((int)len > sd->maxcols) { + if (sd->maxcols && (int)len > sd->maxcols) { out = malloc(sd->maxcols+1); assert(out); snprintf(out, sd->maxcols-3, "%s %s %s",