>> From: Achim Gratz >> To: cygwin >> Cc: >> Date: 2019/3/6, Wed 04:24 >> Subject: Re: Patch request to qt 5.9.4 (Re: [ANNOUNCEMENT] Qt 5.9.4) >> >> T atsuro MATSUOKA writes: >>> I contacted with Enrico who tells me the patch that I have shown. >> >> Yes, but that monkeys around the real problem. What Yaakov is telling >> you is that there are two options and we don't know yet which one we >> have to deal with. >> >> If O_NONBLOCK is needed, but does not work correctly under Cygwin, then >> that's a bug in Cygwin. For this case, Corinna asks you to create an >> STC that demonstrates the bug so it can be triaged without having to >> work with something as complex as the Qt terminal in Cygwin. >> >> If on the other hand O_NONBLOCK is in fact not needed and just shows >> different behaviour on different systems without a bug in the >> implementation being present, then upstream should remove that argument. >> >> >> Regards, >> Achim. > > Seeing ML archive that Enrico indicated, > > Re: select() and named pipes > > #include <stdio.h> > #include <stdlib.h> > #include <errno.h> > #include <sys/select.h> > #include <sys/types.h> > #include <sys/stat.h> > #include <fcntl.h> > #include <unistd.h> > > #define FIFONAME "/tmp/pipe" > > int main(void) > { > int fd; > int nsel; > fd_set readfds; > FD_ZERO(&readfds); > > if (mkfifo(FIFONAME, 0600) < 0) { > perror("mkfifo"); > exit(1); > } > > fd = open(FIFONAME, O_RDONLY | O_NONBLOCK); > > if (fd < 0) { > perror("open"); > remove(FIFONAME); > exit(2); > } > > FD_SET(fd, &readfds); > do { > nsel = select(fd + 1, &readfds, 0, 0, 0); > } while (nsel == -1 && (errno == EINTR || errno == EAGAIN)); > > if (nsel == -1) { > perror("select"); > exit(3); > } > > if (FD_ISSET(fd, &readfds)) { > char buf[100]; > int status; > int count = 0; > printf("%d: ", ++count); > while ((status = read(fd, buf, sizeof(buf) - 1))) { > if (status > 0) { > buf[status] = '\0'; > printf("%s", buf); > } else if (errno == EAGAIN) { > printf("\n%d: ", ++count); > } else { > perror("read"); > break; > } > } > } > > close(fd); > remove(FIFONAME); > return 0; > } > > > > As you wrote this is a issue of Cygwin issue. > But As long as O_NONBLOCK does not work on Cygwin, Enrico's workaround can > be attached for qt.
Apart from Qt maintainer accepts Enrico's patch, I will raise O_NONBLOCK issue by another post. Tatsuro -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple