summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ext/pty/pty.c8
2 files changed, 7 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 86d686ea02..c2b4683e47 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,8 +6,9 @@ Tue Nov 8 14:50:55 2011 NAKAMURA Usaku <usa@ruby-lang.org>
Tue Nov 8 11:01:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/pty/pty.c (get_device_once): FreeBSD's posix_openpt doesn't
- support O_CLOEXEC and fails if specified.
+ * ext/pty/pty.c (get_device_once): FreeBSD 8 supported O_CLOEXEC flag
+ for posix_openpt, but FreeBSD 9's posix_openpt doesn't support
+ O_CLOEXEC and fails if specified.
Tue Nov 8 02:36:45 2011 NAKAMURA Usaku <usa@ruby-lang.org>
diff --git a/ext/pty/pty.c b/ext/pty/pty.c
index fafc2c55dd..9527004f3a 100644
--- a/ext/pty/pty.c
+++ b/ext/pty/pty.c
@@ -291,19 +291,19 @@ get_device_once(int *master, int *slave, char SlaveName[DEVICELEN], int nomesg,
dfl.sa_flags = 0;
sigemptyset(&dfl.sa_mask);
-#if defined(__sun)
+#if defined(__sun) || defined(__FreeBSD__)
/* workaround for Solaris 10: grantpt() doesn't work if FD_CLOEXEC is set. [ruby-dev:44688] */
+ /* FreeBSD 8 supported O_CLOEXEC for posix_openpt, but FreeBSD 9 removed it */
if ((masterfd = posix_openpt(O_RDWR|O_NOCTTY)) == -1) goto error;
if (sigaction(SIGCHLD, &dfl, &old) == -1) goto error;
if (grantpt(masterfd) == -1) goto grantpt_error;
rb_fd_fix_cloexec(masterfd);
#else
flags = O_RDWR|O_NOCTTY;
-# if defined(O_CLOEXEC) && !defined(__FreeBSD__)
+# if defined(O_CLOEXEC)
/* glibc posix_openpt() in GNU/Linux calls open("/dev/ptmx", flags) internally.
* So version dependency on GNU/Linux is same as O_CLOEXEC with open().
- * O_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it.
- * FreeBSD's posix_openpt doesn't support O_CLOEXEC and fails if specified*/
+ * O_CLOEXEC is available since Linux 2.6.23. Linux 2.6.18 silently ignore it. */
flags |= O_CLOEXEC;
# endif
if ((masterfd = posix_openpt(flags)) == -1) goto error;