diff options
author | ngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-11-06 17:07:08 +0000 |
---|---|---|
committer | ngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-11-06 17:07:08 +0000 |
commit | 6917c85afe95feefc63538a4cc8573a5e753da4b (patch) | |
tree | 6c17b41c3e6b980a1b4935a6b5b841b0beebdfc2 | |
parent | d0a301eb20ef18a5dce2a3c57be4a65612c31d6c (diff) | |
download | ruby-6917c85afe95feefc63538a4cc8573a5e753da4b.tar.gz |
* dir.c (dir_fileno, dirfd): support of Dir#fileno on Solaris 10.
Solaris 10 does not have dirfd, but the file descriptor of a
directory is stored in the d_fd or dd_fd member in the DIR struct.
Note that Solaris 11 has dirfd(3C).
* configure.in: checks for DIR.d_fd and DIR.dd_fd on Solaris 10.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | configure.in | 8 | ||||
-rw-r--r-- | dir.c | 13 |
3 files changed, 30 insertions, 0 deletions
@@ -1,3 +1,12 @@ +Sat Nov 7 01:32:06 2015 Naohisa Goto <ngotogenome@gmail.com> + + * dir.c (dir_fileno, dirfd): support of Dir#fileno on Solaris 10. + Solaris 10 does not have dirfd, but the file descriptor of a + directory is stored in the d_fd or dd_fd member in the DIR struct. + Note that Solaris 11 has dirfd(3C). + + * configure.in: checks for DIR.d_fd and DIR.dd_fd on Solaris 10. + Fri Nov 6 23:13:53 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org> * array.c: clarifies Array#reject! documentation. diff --git a/configure.in b/configure.in index 786b538b89..0d253a9547 100644 --- a/configure.in +++ b/configure.in @@ -2660,6 +2660,14 @@ if test "$ac_cv_func_setpgid:$ac_cv_func_setpgrp" = no:yes; then AC_FUNC_SETPGRP fi +if test x"$ac_cv_func_dirfd" = xno; then + AS_CASE(["$target_os"],[solaris*], + [AC_CHECK_MEMBERS([DIR.d_fd, DIR.dd_fd],,,[ +#include <sys/types.h> +#include <dirent.h> +])]) +fi + if test x"$target_cpu" = xia64; then AC_LIBOBJ([ia64]) AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base, @@ -619,6 +619,19 @@ dir_inspect(VALUE dir) return rb_funcallv(dir, rb_intern("to_s"), 0, 0); } +/* Workaround for Solaris 10 that does not have dirfd. + Note: Solaris 11 (POSIX.1-2008 compliant) has dirfd(3C). + */ +#if defined(__sun) && !defined(HAVE_DIRFD) +# if defined(HAVE_DIR_D_FD) +# define dirfd(x) ((x)->d_fd) +# define HAVE_DIRFD 1 +# elif defined(HAVE_DIR_DD_FD) +# define dirfd(x) ((x)->dd_fd) +# define HAVE_DIRFD 1 +# endif +#endif + #ifdef HAVE_DIRFD /* * call-seq: |