From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7383 invoked from network); 7 May 2001 18:15:15 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 7 May 2001 18:15:15 -0000 Received: (qmail 6685 invoked by alias); 7 May 2001 18:15:07 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 14248 Received: (qmail 6665 invoked from network); 7 May 2001 18:15:06 -0000 From: "Андрей Борзенков" To: zsh-workers@sunsite.dk Subject: Fix for zpty under Cygwin Mime-Version: 1.0 X-Mailer: mPOP Web-Mail 2.19 X-Originating-IP: [62.118.133.252] Reply-To: "Андрей Борзенков" Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit Message-Id: Date: Mon, 07 May 2001 22:15:01 +0400 Our office connection was down today and I had some spare time to get a look at this problem. It turned out to be quite simple (as usual). The problem is this line in Src/Modules/zpty.c: #if defined(__SVR4) || defined(sinix) || defined(__CYGWIN__) .... static int get_pty(int master, int *retfd) { ..... if ((sfd = open(name, O_RDWR|O_NOCTTY)) < 0) { It was O_NOCTTY. Looks like O_NOCTTY is "sticky" under Cygwin and prevents this tty from becoming ctty when dup()'ing it later. I do not remeber when it was put in, so there are two possibilities: - we added this and that broke things - at some point O_NOCTTY became sticky and that broke zpty (unfortunately, my current connection is so slow I really cannot connect to Sourceforge CVS to check it). So the fix under Cygwin is quite simple - just remove O_NOCTTY. Actually, I wonder what it does here at all - it is exactly the descriptor that *will* be ctty later. In case it may break on some system we can do it under ifdef __CYGWIN__ and then check again after 4.0.1 is out. I'd really like 4.0.1 to be as most feature complete on Cygwin as possible. Related problem is testing. Completion tests consistently failed; the reason was this line in comptest: zpty -b zsh "$comptest_zsh -f +Z" i.e. non-blocking mode. As a result the next read returned empty string and failed. I could not reproduce it in interactive shell, so I suspect some obscure scheduling issues here. Anyway, non-blocking mode looks wrong here to me. We cannot expect that the whole output will always be available when we try to read. In this case much more better would be read-with-timeout ... O.K. after 4.0.1 may be. With -b removed all completion tests passed under Cygwin. Peter, could you test if above two changes work for you? In this case could you commit it (unfortunately, my CVS is in office and it looks like connection is gone for several days at least). I'll drop a line to cygwin list when I'm back again. I still consider stickyness of O_NOCTTY a bug ... any comments? -andrej P.S. Could you please Cc me replies to this thread?