From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 8755 invoked from network); 15 Jan 2021 04:30:03 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 15 Jan 2021 04:30:03 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1610685003; b=xTWLqfAhwC9ZVpdAMkB2HsMpmfby6ptNkkrbnpWIyXix+kwlVleB78Elb2d97e7a+ILf3gFlpH fmPsI7KyysTTIN5MkohqM/HAKFwhrGmvwA9HYs5nQ0Va5STxpRZ5LaRbFoFIlJN5nKZmgSHibE CQ9qCM10FM/PqAPRO8DYw2+hILLYNgKU39CjAiATeJ0T4FRkDnbsdoOEez2dnk1iAuErSnJXro QGZ3h6rwnKpyzZ/ao3GADMUnVWQ2d/ZJXujBF8d2lNANMSdsp+2+vw6KEN5p4uewBO5omeUeII 8cP3b/dTwaZLv52YswWKVcvcBvVCX2fxd4s4wXmeY911wA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-pl1-f177.google.com) smtp.remote-ip=209.85.214.177; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1610685003; bh=7UC1JWVycFZXWYmY4VMCX4MysK/6+gFkC4PdUu8r1DI=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=M/cnoMgzNSGVwK/LXg56iPL4VxXRb1N/mv+Wj3oOT9q8uLPmDHmkJ2hO9F+RUwNPVU5oh9+7+E TQAoLUSn/iFokaR1nTEJqxPxSJuKxrkEVN1WVSB+jHQlH2pYVRYIqPL9Vih8DPlrU9r+VByDVi lvQdmBuPrqksSJEGQiaoYd2fdMOKW+tV7IIJZExpJUQBpf7qLnW4skmftvHx+1nozgx1ITA5Qo bHEFdI0IgZWnhL2STlUv5lyc4QPSTbHvhlogjNegYFzEWc/TrDslVMXXtPYI8gxZe2HSUF576+ cEiT9TXBnETelNNQ+apXzpWEaYimuXVK3mpL4ROWsv89Kg==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=9SgDxUcBjd4z7BIR10XKnS7LpqSzhDjjHYXky33wzPM=; b=iAd3RHbL6gmfntMiYCLDMSFepc DseFXDUYa81/WEFGolpLi+em0lQJEqejgUINYhZ4/7JgIUvkp1iTuC9DSPiZ02pRIrrPkyKoeroGN ogWkWJs9nSUDhiXDf6IXJXbd/Hq+Jral5y8Hgy5WPq1XlDIgsRAKwZQCgvvFhk0M8btgQXdEnp1LY OAfHOf9NWnT5soFkep9Gjzf3D2oG8B7eqEl1n2l+WokwaZVwW1p1gO1e59kXeBmVPFE4hZXXPL7+8 5iguYDpwOLJFVIsYEmj3cVzs52BfTGOBvz1nAZkujYgbaasBg+73HTUgET9GFmwCaeHPXYkQ3YnMC 2G3lWYCQ==; Received: from authenticated user by zero.zsh.org with local id 1l0GkL-000JAb-90; Fri, 15 Jan 2021 04:30:01 +0000 Authentication-Results: zsh.org; iprev=pass (mail-pl1-f177.google.com) smtp.remote-ip=209.85.214.177; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-pl1-f177.google.com ([209.85.214.177]:37115) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1l0Gk3-000J12-AC; Fri, 15 Jan 2021 04:29:44 +0000 Received: by mail-pl1-f177.google.com with SMTP id be12so4061039plb.4 for ; Thu, 14 Jan 2021 20:29:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=9SgDxUcBjd4z7BIR10XKnS7LpqSzhDjjHYXky33wzPM=; b=NDKhPnUU80889ZzM7Kfiqb2w4/D6pF0bI1JqUAeJcCE5Z+JY4ZFTSZ0hX3uz1T/ZQN EVrTHqPWTzwa1S85pmF7JbaoKwxuXTdDnFqsveK3kwdEmXdmSM8AIosb9QOfcWx1WubU QFQZ06PNSSj1qYhbVpacEacLlkSXrzXOcpqBkXvKt1rRRWy5BO2JXqyKlF+zweqnVS0S Tqw5G/O0IKo4MBkBQbX9vKWKlRtCSTNNueeCYecwDMuHicvu86TCR8UddC2HUlB1goOJ fYHIGuXCLqpD8DCp/ALIwMo99I9xuVl92pqv2fitKYEwDRtWC1KPrh1dnuSXuiPeLVmf iciA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=9SgDxUcBjd4z7BIR10XKnS7LpqSzhDjjHYXky33wzPM=; b=DnEZWqrt2d167S0ZEF9gYfD8y872px6iTog/8DuUVm9cZ4j3O5RnVlkuE3rxhk6EGi gCPwqzmEhmZ7/35plbGTYik4uL30iWSRzNMqPZKbmQaKMWDCjLxB4jUFHu8TRLBAmYqs sO5fooCi6nifwK8RX8HX0BboIalQEoqMNJWw0vslzOwm2SVvVZDL839ZvY9wpES2MGDb KOsNYX9SAX1YB2bPZxJz04n4erbJcaeuKkeJnnvykODXwyZ7VKRG6dPCOYje+peAb4/C rCmTfpNSoEvC9uhYGBrS3oJpR87qAonXCpcdeVBaDIj8PbHU6vaPXqkBLkNG0oPx9dCB ct2A== X-Gm-Message-State: AOAM531B33TADpSzmWJK6/ggO20KGcbIiZEtwDv+o4+Rcka0sykFh7Zu fOGnE6A8o7U/+H0Por0qvcPKkzc9xKG3ZjDjcK/goCB7YQF6Zg== X-Google-Smtp-Source: ABdhPJwNXDYiQTPZbis7ltlwb1WOdOklmvOC1TS/BA91HjJPr1zpA4Qym11/HpD+rVNGAPbe12OBkqBw4DYFmJQi7Ko= X-Received: by 2002:a17:902:8ec4:b029:de:26a5:1b39 with SMTP id x4-20020a1709028ec4b02900de26a51b39mr10836804plo.24.1610684981604; Thu, 14 Jan 2021 20:29:41 -0800 (PST) MIME-Version: 1.0 From: Peiyuan Song Date: Fri, 15 Jan 2021 12:29:33 +0800 Message-ID: Subject: [PATCH v2] Make zpty module work in the cygwin and msys2 To: zsh-workers@zsh.org Content-Type: text/plain; charset="UTF-8" X-Seq: 47835 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: cygwin have /dev/ptmx, need defined `_GNU_SOURCE 1` to use it, but configure check /dev/ptmx is usable only defined it for linux. Another probleam is cygwin upstream have an issue https://cygwin.com/pipermail/cygwin-developers/2021-January/012030.html, because of that issue, movefd will broken the fd opened by posix_openpt, so that we mast disable movefd in zpty until cygwin fix that issue. v2 change: make fdtable[master] --- Src/Modules/zpty.c | 28 ++++++++++++++++++++++++++++ configure.ac | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c index 45fd15ee0..624da13f1 100644 --- a/Src/Modules/zpty.c +++ b/Src/Modules/zpty.c @@ -299,6 +299,29 @@ get_pty(int master, int *retfd) #endif /* /dev/ptmx or alternatives */ +#ifdef __CYGWIN__ +/* + * Ensure the fdtable is large enough for fd, and that the + * maximum fd is set appropriately. + */ +static void +check_fd_table(int fd) +{ + if (fd <= max_zsh_fd) + return; + + if (fd >= fdtable_size) { + int old_size = fdtable_size; + while (fd >= fdtable_size) + fdtable = zrealloc(fdtable, + (fdtable_size *= 2)*sizeof(*fdtable)); + memset(fdtable + old_size, 0, + (fdtable_size - old_size) * sizeof(*fdtable)); + } + max_zsh_fd = fd; +} +#endif + static int newptycmd(char *nam, char *pname, char **args, int echo, int nblock) { @@ -428,6 +451,7 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock) mypid = 0; /* trick to ensure we _exit() */ zexit(lastval, ZEXIT_NORMAL); } +#ifndef __CYGWIN__ master = movefd(master); if (master == -1) { zerrnam(nam, "cannot duplicate fd %d: %e", master, errno); @@ -435,6 +459,10 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock) ineval = oineval; return 1; } +#else + check_fd_table(master); + fdtable[master] = FDT_INTERNAL; +#endif p = (Ptycmd) zalloc(sizeof(*p)); diff --git a/configure.ac b/configure.ac index 549cae3d6..16dafac05 100644 --- a/configure.ac +++ b/configure.ac @@ -2460,7 +2460,7 @@ if test x$ac_cv_have_dev_ptmx = xyes -o x$ac_cv_func_posix_openpt = xyes && \ test x$ac_cv_func_ptsname = xyes; then AC_CACHE_CHECK([if /dev/ptmx is usable], ac_cv_use_dev_ptmx, - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef __linux + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if defined(__linux) || defined(__CYGWIN__) #define _GNU_SOURCE 1 #endif #include -- 2.30.0.windows.1