Scripts that parse pacman's output (like pacsearch) generally do not
want wrapped lines.

Signed-off-by: Andrew Gregory <[email protected]>
---

* move isatty check to getcols_fd allowing COLUMNS to override
* allow COLUMNS=0

 src/pacman/util.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/pacman/util.c b/src/pacman/util.c
index 6a095fd..5686d92 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -46,7 +46,7 @@
 #include "conf.h"
 #include "callback.h"
 
-static int cached_columns = 0;
+static int cached_columns = -1;
 
 struct table_cell_t {
        char *label;
@@ -158,13 +158,17 @@ static int flush_term_input(int fd)
 
 void columns_cache_reset(void)
 {
-       cached_columns = 0;
+       cached_columns = -1;
 }
 
 static int getcols_fd(int fd)
 {
        int width = -1;
 
+       if(!isatty(fd)) {
+               return 0;
+       }
+
 #if defined(TIOCGSIZE)
        struct ttysize win;
        if(ioctl(fd, TIOCGSIZE, &win) == 0) {
@@ -189,20 +193,24 @@ unsigned short getcols(void)
        const char *e;
        int c = 0;
 
-       if(cached_columns > 0) {
+       if(cached_columns >= 0) {
                return cached_columns;
        }
 
        e = getenv("COLUMNS");
-       if(e) {
-               c = strtol(e, NULL, 10);
+       if(e && *e) {
+               char *p = NULL;
+               c = strtol(e, &p, 10);
+               if(*p != '\0') {
+                       c= -1;
+               }
        }
 
-       if(c <= 0) {
+       if(c < 0) {
                c = getcols_fd(STDOUT_FILENO);
        }
 
-       if(c <= 0) {
+       if(c < 0) {
                c = 80;
        }
 
-- 
2.0.1

Reply via email to