diff options
| author | Paul Eggert | 2015-03-19 12:32:42 -0700 |
|---|---|---|
| committer | Paul Eggert | 2015-03-19 12:33:44 -0700 |
| commit | ccf00107f7aa8897cde017bec3717ecc350515f7 (patch) | |
| tree | f92f5f4c4a8f61f8f1f73a3ebb61304b409471ec /lib | |
| parent | 8aa13d07fe72b8a00ded10602f5c5ce773181b40 (diff) | |
| download | emacs-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.h | 2 | ||||
| -rw-r--r-- | lib/dirfd.c | 32 | ||||
| -rw-r--r-- | lib/fdopendir.c | 13 | ||||
| -rw-r--r-- | lib/gnulib.mk | 11 |
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 | |||
| 25 | int | ||
| 26 | dirfd (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). */ |
| 99 | static DIR * | 99 | static 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 | |||
| 242 | if gl_GNULIB_ENABLED_dirfd | ||
| 243 | |||
| 244 | endif | ||
| 245 | EXTRA_DIST += dirfd.c | ||
| 246 | |||
| 247 | EXTRA_libgnu_a_SOURCES += dirfd.c | ||
| 248 | |||
| 249 | ## end gnulib module dirfd | ||
| 250 | |||
| 240 | ## begin gnulib module dosname | 251 | ## begin gnulib module dosname |
| 241 | 252 | ||
| 242 | if gl_GNULIB_ENABLED_dosname | 253 | if gl_GNULIB_ENABLED_dosname |