From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS57860 185.129.60.0/22 X-Spam-Status: No, score=-0.3 required=3.0 tests=BAYES_00,RCVD_IN_MSPIKE_BL, RCVD_IN_MSPIKE_ZBI,RCVD_IN_XBL,SPF_FAIL,SPF_HELO_FAIL,TO_EQ_FM_DOM_SPF_FAIL shortcircuit=no autolearn=no autolearn_force=no version=3.4.0 Received: from 80x24.org (tor01.zencurity.dk [185.129.62.62]) by dcvr.yhbt.net (Postfix) with ESMTP id DA0C01F40E for ; Thu, 4 Aug 2016 00:00:37 +0000 (UTC) From: Eric Wong To: spew@80x24.org Subject: [PATCH] redir: detect larger pipe sizes under Linux Date: Thu, 4 Aug 2016 00:00:25 +0000 Message-Id: <20160804000025.21515-1-e@80x24.org> List-Id: Not sure if it's worth it, 4K is a lot for heredoc SCRIPT=${SCRIPT-heredoc.sh} ( echo 'cat >/dev/null <"$SCRIPT" --- src/redir.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/redir.c b/src/redir.c index f96a76b..8a65951 100644 --- a/src/redir.c +++ b/src/redir.c @@ -285,6 +285,29 @@ err: sh_error("%d: %s", f, strerror(err)); } +static size_t +pipesize(int fd, int want) +{ +#if defined(F_GETPIPE_SZ) && defined(F_SETPIPE_SZ) + static int default_size; + + if (!default_size) { + int sz = fcntl(fd, F_GETPIPE_SZ, &sz); + + default_size = sz > 0 ? sz : PIPESIZE; + } + if (want > default_size) { + if (fcntl(fd, F_SETPIPE_SZ, &want) < 0) + return default_size; + + return want; + } + + return default_size; +#else + return PIPESIZE; +#endif +} /* * Handle here documents. Normally we fork off a process to write the @@ -309,7 +332,7 @@ openhere(union node *redir) } len = strlen(p); - if (len <= PIPESIZE) { + if (len <= pipesize(pip[0], len)) { xwrite(pip[1], p, len); goto out; } -- EW