[pacman-dev] [PATCH] Fix broken output when asking question and stdin is piped (FS#27909)

Dan McGee dpmcgee at gmail.com
Thu Jan 12 08:46:47 EST 2012


On Thu, Jan 12, 2012 at 7:10 AM, Olivier Brunel
<i.am.jack.mail at gmail.com> wrote:
> When asking question and stdin is piped, the response does not get printed out,
> resulting in a missing \n and broken output (FS#27909); printing the response
> fixes it.
>
> Signed-off-by: Olivier Brunel <i.am.jack.mail at gmail.com>
> ---
>  src/pacman/util.c |    7 +++++++
>  1 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index 2d88bac..876a15b 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -1429,6 +1429,13 @@ static int question(short preset, char *fmt, va_list args)
>                if(len == 0) {
>                        return preset;
>                }
> +
> +               /* if stdin is piped, response does not get printed out, and as a result
> +                * a \n is missing, resulting in broken output (FS#27909) */
> +               struct stat sb;
> +               if (fstat(STDIN_FILENO, &sb) == 0 && S_ISFIFO(sb.st_mode)) {
> +                       fprintf(stream, "%s\n", response);
> +               }
Noticing that our usual strategy is to use the isatty() function, e.g.,
if(isatty(fileno(stdin))) {
xxx
}

We probably want to stick with this convention if possible, especially
since we are already using that convention in flush_term_input() which
is called from question(). Otherwise this looks like the right
approach.

Thanks! (And minor note- please read HACKING for info on 'if(' vs 'if
(' coding convention.)

>
>                if(strcasecmp(response, _("Y")) == 0 || strcasecmp(response, _("YES")) == 0) {
>                        return 1;
> --
> 1.7.8.3
>
>


More information about the pacman-dev mailing list