[pacman-dev] [PATCH] don't wrap lines when we don't have a column size

Xavier Chantry shiningxc at gmail.com
Wed Aug 26 18:45:40 EDT 2009


From: Oleg Finkelshteyn <olegfink at gmail.com>

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 <shiningxc at gmail.com>
---
 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



More information about the pacman-dev mailing list