aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorPaul Eggert2015-03-19 12:32:42 -0700
committerPaul Eggert2015-03-19 12:33:44 -0700
commitccf00107f7aa8897cde017bec3717ecc350515f7 (patch)
treef92f5f4c4a8f61f8f1f73a3ebb61304b409471ec /lib
parent8aa13d07fe72b8a00ded10602f5c5ce773181b40 (diff)
downloademacs-ccf00107f7aa8897cde017bec3717ecc350515f7.tar.gz
emacs-ccf00107f7aa8897cde017bec3717ecc350515f7.zip
Merge from gnulib
This incorporates: 2015-03-19 fdopendir: port better to MinGW 2015-03-18 fdopendir: fix typo in comment 2015-02-24 glob, etc.: port to MSVC v18 on MS-Windows 8.1 * lib/dirent.in.h, lib/fdopendir.c: Update from gnulib. * lib/dirfd.c, m4/dirfd.m4: New files from gnulib. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
Diffstat (limited to 'lib')
-rw-r--r--lib/dirent.in.h2
-rw-r--r--lib/dirfd.c32
-rw-r--r--lib/fdopendir.c13
-rw-r--r--lib/gnulib.mk11
4 files changed, 56 insertions, 2 deletions
diff --git a/lib/dirent.in.h b/lib/dirent.in.h
index ddd3b84fbb2..154d2689e3d 100644
--- a/lib/dirent.in.h
+++ b/lib/dirent.in.h
@@ -77,6 +77,7 @@ typedef struct gl_directory DIR;
77# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 77# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
78# undef opendir 78# undef opendir
79# define opendir rpl_opendir 79# define opendir rpl_opendir
80# define GNULIB_defined_opendir 1
80# endif 81# endif
81_GL_FUNCDECL_RPL (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1))); 82_GL_FUNCDECL_RPL (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)));
82_GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name)); 83_GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name));
@@ -128,6 +129,7 @@ _GL_WARN_ON_USE (rewinddir, "rewinddir is not portable - "
128# if !(defined __cplusplus && defined GNULIB_NAMESPACE) 129# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
129# undef closedir 130# undef closedir
130# define closedir rpl_closedir 131# define closedir rpl_closedir
132# define GNULIB_defined_closedir 1
131# endif 133# endif
132_GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); 134_GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1)));
133_GL_CXXALIAS_RPL (closedir, int, (DIR *dirp)); 135_GL_CXXALIAS_RPL (closedir, int, (DIR *dirp));
diff --git a/lib/dirfd.c b/lib/dirfd.c
new file mode 100644
index 00000000000..c91f8e55872
--- /dev/null
+++ b/lib/dirfd.c
@@ -0,0 +1,32 @@
1/* dirfd.c -- return the file descriptor associated with an open DIR*
2
3 Copyright (C) 2001, 2006, 2008-2015 Free Software Foundation, Inc.
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18/* Written by Jim Meyering. */
19
20#include <config.h>
21
22#include <dirent.h>
23#include <errno.h>
24
25int
26dirfd (DIR *dir_p)
27{
28 int fd = DIR_TO_FD (dir_p);
29 if (fd == -1)
30 errno = ENOTSUP;
31 return fd;
32}
diff --git a/lib/fdopendir.c b/lib/fdopendir.c
index 9dc1e7b26dc..837a8219b33 100644
--- a/lib/fdopendir.c
+++ b/lib/fdopendir.c
@@ -93,7 +93,7 @@ fdopendir (int fd)
93 That way, barring race conditions, fd_clone_opendir returns a 93 That way, barring race conditions, fd_clone_opendir returns a
94 stream whose file descriptor is FD. 94 stream whose file descriptor is FD.
95 95
96 If REPLACE_CHDIR or CWD is null, use opendir ("/proc/self/fd/...", 96 If REPLACE_FCHDIR or CWD is null, use opendir ("/proc/self/fd/...",
97 falling back on fchdir metadata. Otherwise, CWD is a saved version 97 falling back on fchdir metadata. Otherwise, CWD is a saved version
98 of the working directory; use fchdir/opendir(".")/restore_cwd(CWD). */ 98 of the working directory; use fchdir/opendir(".")/restore_cwd(CWD). */
99static DIR * 99static DIR *
@@ -156,7 +156,16 @@ fd_clone_opendir (int fd, struct saved_cwd const *cwd)
156 if (! dir && EXPECTED_ERRNO (saved_errno)) 156 if (! dir && EXPECTED_ERRNO (saved_errno))
157 { 157 {
158 char const *name = _gl_directory_name (fd); 158 char const *name = _gl_directory_name (fd);
159 return (name ? opendir (name) : NULL); 159 DIR *dp = name ? opendir (name) : NULL;
160
161 /* The caller has done an elaborate dance to arrange for opendir to
162 consume just the right file descriptor. If dirfd returns -1,
163 though, we're on a system like mingw where opendir does not
164 consume a file descriptor. Consume it via 'dup' instead. */
165 if (dp && dirfd (dp) < 0)
166 dup (fd);
167
168 return dp;
160 } 169 }
161# endif 170# endif
162 errno = saved_errno; 171 errno = saved_errno;
diff --git a/lib/gnulib.mk b/lib/gnulib.mk
index 1b671e7f6de..7703cbfe283 100644
--- a/lib/gnulib.mk
+++ b/lib/gnulib.mk
@@ -237,6 +237,17 @@ EXTRA_DIST += dirent.in.h
237 237
238## end gnulib module dirent 238## end gnulib module dirent
239 239
240## begin gnulib module dirfd
241
242if gl_GNULIB_ENABLED_dirfd
243
244endif
245EXTRA_DIST += dirfd.c
246
247EXTRA_libgnu_a_SOURCES += dirfd.c
248
249## end gnulib module dirfd
250
240## begin gnulib module dosname 251## begin gnulib module dosname
241 252
242if gl_GNULIB_ENABLED_dosname 253if gl_GNULIB_ENABLED_dosname