From: Oleg Finkelshteyn <[email protected]>

for example when we are not in a tty, there is no point in wrapping the
output. this actually makes the job harder for scripts.

$ pacman -Si binutils | grep Desc
Description           : A set of programs to assemble and manipulate binary and

the description was cut because the rest was on the following line.

Signed-off-by: Xavier Chantry <[email protected]>
---
 src/pacman/util.c |   45 ++++++++++++++++++---------------------------
 1 files changed, 18 insertions(+), 27 deletions(-)

diff --git a/src/pacman/util.c b/src/pacman/util.c
index 9c4b797..3c3379a 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -95,34 +95,18 @@ int needs_root(void)
 /* gets the current screen column width */
 int getcols(void)
 {
-       if(!isatty(1)) {
-               /* We will default to 80 columns if we're not a tty
-                * this seems a fairly standard file width.
-                */
-               return 80;
-       } else {
 #ifdef TIOCGSIZE
-               struct ttysize win;
-               if(ioctl(1, TIOCGSIZE, &win) == 0) {
-                       return win.ts_cols;
-               }
-#elif defined(TIOCGWINSZ)
-               struct winsize win;
-               if(ioctl(1, TIOCGWINSZ, &win) == 0) {
-                       return win.ws_col;
-               }
-#endif
-               /* If we can't figure anything out, we'll just assume 80 
columns */
-               /* TODO any problems caused by this assumption? */
-               return 80;
+       struct ttysize win;
+       if(ioctl(1, TIOCGSIZE, &win) == 0) {
+               return win.ts_cols;
        }
-       /* Original envvar way - prone to display issues
-       const char *cenv = getenv("COLUMNS");
-       if(cenv != NULL) {
-               return atoi(cenv);
+#elif defined(TIOCGWINSZ)
+       struct winsize win;
+       if(ioctl(1, TIOCGWINSZ, &win) == 0) {
+               return win.ws_col;
        }
-       return -1;
-       */
+#endif
+       return 0;
 }
 
 /* does the same thing as 'mkdir -p' */
@@ -266,6 +250,14 @@ void indentprint(const char *str, int indent)
                return;
        }
 
+       cols = getcols();
+
+       /* if we're a tty, just plain print the string */
+       if(cols == 0) {
+               fputs(str, stdout);
+               return;
+       }
+
        len = strlen(str) + 1;
        wcstr = calloc(len, sizeof(wchar_t));
        len = mbstowcs(wcstr, str, len);
@@ -275,7 +267,6 @@ void indentprint(const char *str, int indent)
        if(!p) {
                return;
        }
-       cols = getcols();
 
        while(*p) {
                if(*p == L' ') {
@@ -486,7 +477,7 @@ void list_display(const char *title, const alpm_list_t 
*list)
                        /* two additional spaces are added to the length */
                        s += 2;
                        int maxcols = getcols();
-                       if(s + cols > maxcols) {
+                       if(s + cols > maxcols && maxcols > 0) {
                                int j;
                                cols = len;
                                printf("\n");
-- 
1.6.4.1


Reply via email to