On 08/11/14 at 12:42pm, Andrew Gregory wrote:
> 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;

c should be initialized to -1 or we'll only ever check the
environment.  Fixed on my 4.2 branch.

> -     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;
>       }
>  

Reply via email to