summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pacman/util.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 2671e54c..3f2ed83b 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) {
@@ -187,22 +191,26 @@ static int getcols_fd(int fd)
unsigned short getcols(void)
{
const char *e;
- int c = 0;
+ int c = -1;
- 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;
}