mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-26 19:18:50 +00:00
Merge from Gnulib; use ‘open’ for O_CLOEXEC
This incorporates: 2017-08-15 renameat: ensure declaration in <stdio.h> on NetBSD 2017-08-15 extensions: enable NetBSD specific extensions 2017-08-14 open: support O_CLOEXEC 2017-08-13 reallocarray: new module * admin/merge-gnulib (AVOIDED_MODULES): Remove ‘open’, since it now supports O_CLOEXEC and this simplifies Emacs. * build-aux/config.guess, lib/fcntl.in.h, lib/stdio.in.h: * lib/stdlib.in.h, m4/extensions.m4, m4/stdlib_h.m4: Copy from Gnulib. * lib/cloexec.c, lib/cloexec.h, lib/open.c: * m4/mode_t.m4, m4/open-cloexec.m4, m4/open.m4: New files, copied from Gnulib. * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate. * lib-src/etags.c (O_CLOEXEC) [WINDOWSNT]: Remove, as Gnulib does this for us. * src/filelock.c (create_lock_file): * src/sysdep.c (emacs_open, emacs_pipe): Don’t worry about O_CLOEXEC == 0, as Gnulib no longer sets it to 0.
This commit is contained in:
parent
69f2b755f4
commit
794c3cd3a2
@ -48,7 +48,7 @@ GNULIB_MODULES='
|
||||
AVOIDED_MODULES='
|
||||
close dup fchdir fstat
|
||||
malloc-posix msvc-inval msvc-nothrow
|
||||
open openat-die opendir raise
|
||||
openat-die opendir raise
|
||||
save-cwd select setenv sigprocmask stat stdarg stdbool
|
||||
threadlib tzset unsetenv utime utime-h
|
||||
'
|
||||
|
5
build-aux/config.guess
vendored
5
build-aux/config.guess
vendored
@ -2,7 +2,7 @@
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright 1992-2017 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2017-07-19'
|
||||
timestamp='2017-08-08'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@ -259,6 +259,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
*:Sortix:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-sortix
|
||||
exit ;;
|
||||
*:Redox:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-redox
|
||||
exit ;;
|
||||
alpha:OSF1:*:*)
|
||||
case $UNAME_RELEASE in
|
||||
*4.0)
|
||||
|
@ -111,7 +111,6 @@ char pot_etags_version[] = "@(#) pot revision number is 17.38.1.4";
|
||||
# undef HAVE_NTGUI
|
||||
# undef DOS_NT
|
||||
# define DOS_NT
|
||||
# define O_CLOEXEC O_NOINHERIT
|
||||
#endif /* WINDOWSNT */
|
||||
|
||||
#include <limits.h>
|
||||
|
83
lib/cloexec.c
Normal file
83
lib/cloexec.c
Normal file
@ -0,0 +1,83 @@
|
||||
/* cloexec.c - set or clear the close-on-exec descriptor flag
|
||||
|
||||
Copyright (C) 1991, 2004-2006, 2009-2017 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
The code is taken from glibc/manual/llio.texi */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "cloexec.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true,
|
||||
or clear the flag if VALUE is false.
|
||||
Return 0 on success, or -1 on error with 'errno' set.
|
||||
|
||||
Note that on MingW, this function does NOT protect DESC from being
|
||||
inherited into spawned children. Instead, either use dup_cloexec
|
||||
followed by closing the original DESC, or use interfaces such as
|
||||
open or pipe2 that accept flags like O_CLOEXEC to create DESC
|
||||
non-inheritable in the first place. */
|
||||
|
||||
int
|
||||
set_cloexec_flag (int desc, bool value)
|
||||
{
|
||||
#ifdef F_SETFD
|
||||
|
||||
int flags = fcntl (desc, F_GETFD, 0);
|
||||
|
||||
if (0 <= flags)
|
||||
{
|
||||
int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC);
|
||||
|
||||
if (flags == newflags
|
||||
|| fcntl (desc, F_SETFD, newflags) != -1)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
|
||||
#else /* !F_SETFD */
|
||||
|
||||
/* Use dup2 to reject invalid file descriptors; the cloexec flag
|
||||
will be unaffected. */
|
||||
if (desc < 0)
|
||||
{
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
if (dup2 (desc, desc) < 0)
|
||||
/* errno is EBADF here. */
|
||||
return -1;
|
||||
|
||||
/* There is nothing we can do on this kind of platform. Punt. */
|
||||
return 0;
|
||||
#endif /* !F_SETFD */
|
||||
}
|
||||
|
||||
|
||||
/* Duplicates a file handle FD, while marking the copy to be closed
|
||||
prior to exec or spawn. Returns -1 and sets errno if FD could not
|
||||
be duplicated. */
|
||||
|
||||
int
|
||||
dup_cloexec (int fd)
|
||||
{
|
||||
return fcntl (fd, F_DUPFD_CLOEXEC, 0);
|
||||
}
|
38
lib/cloexec.h
Normal file
38
lib/cloexec.h
Normal file
@ -0,0 +1,38 @@
|
||||
/* cloexec.c - set or clear the close-on-exec descriptor flag
|
||||
|
||||
Copyright (C) 2004, 2009-2017 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true,
|
||||
or clear the flag if VALUE is false.
|
||||
Return 0 on success, or -1 on error with 'errno' set.
|
||||
|
||||
Note that on MingW, this function does NOT protect DESC from being
|
||||
inherited into spawned children. Instead, either use dup_cloexec
|
||||
followed by closing the original DESC, or use interfaces such as
|
||||
open or pipe2 that accept flags like O_CLOEXEC to create DESC
|
||||
non-inheritable in the first place. */
|
||||
|
||||
int set_cloexec_flag (int desc, bool value);
|
||||
|
||||
/* Duplicates a file handle FD, while marking the copy to be closed
|
||||
prior to exec or spawn. Returns -1 and sets errno if FD could not
|
||||
be duplicated. */
|
||||
|
||||
int dup_cloexec (int fd);
|
@ -213,7 +213,10 @@ _GL_WARN_ON_USE (openat, "openat is not portable - "
|
||||
#endif
|
||||
|
||||
#ifndef O_CLOEXEC
|
||||
# define O_CLOEXEC 0
|
||||
# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */
|
||||
# define GNULIB_defined_O_CLOEXEC 1
|
||||
#else
|
||||
# define GNULIB_defined_O_CLOEXEC 0
|
||||
#endif
|
||||
|
||||
#ifndef O_DIRECT
|
||||
|
@ -21,7 +21,7 @@
|
||||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=open --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stat --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=tzset --avoid=unsetenv --avoid=utime --avoid=utime-h --gnu-make --makefile-name=gnulib.mk.in --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-leading-zeros count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 d-type diffseq dtoastr dtotimespec dup2 environ execinfo explicit_bzero faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp flexmember fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr minmax mkostemp mktime nstrftime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strtoimax symlink sys_stat sys_time tempname time time_r time_rz timegm timer-time timespec-add timespec-sub unlocked-io update-copyright utimens vla warnings
|
||||
# Reproduce by: gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=close --avoid=dup --avoid=fchdir --avoid=fstat --avoid=malloc-posix --avoid=msvc-inval --avoid=msvc-nothrow --avoid=openat-die --avoid=opendir --avoid=raise --avoid=save-cwd --avoid=select --avoid=setenv --avoid=sigprocmask --avoid=stat --avoid=stdarg --avoid=stdbool --avoid=threadlib --avoid=tzset --avoid=unsetenv --avoid=utime --avoid=utime-h --gnu-make --makefile-name=gnulib.mk.in --conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files alloca-opt binary-io byteswap c-ctype c-strcase careadlinkat close-stream count-leading-zeros count-one-bits count-trailing-zeros crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512 d-type diffseq dtoastr dtotimespec dup2 environ execinfo explicit_bzero faccessat fcntl fcntl-h fdatasync fdopendir filemode filevercmp flexmember fstatat fsync getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog ignore-value intprops largefile lstat manywarnings memrchr minmax mkostemp mktime nstrftime pipe2 pselect pthread_sigmask putenv qcopy-acl readlink readlinkat sig2str socklen stat-time std-gnu11 stdalign stddef stdio stpcpy strtoimax symlink sys_stat sys_time tempname time time_r time_rz timegm timer-time timespec-add timespec-sub unlocked-io update-copyright utimens vla warnings
|
||||
|
||||
|
||||
MOSTLYCLEANFILES += core *.stackdump
|
||||
@ -255,6 +255,7 @@ GNULIB_READ = @GNULIB_READ@
|
||||
GNULIB_READDIR = @GNULIB_READDIR@
|
||||
GNULIB_READLINK = @GNULIB_READLINK@
|
||||
GNULIB_READLINKAT = @GNULIB_READLINKAT@
|
||||
GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@
|
||||
GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
|
||||
GNULIB_REALPATH = @GNULIB_REALPATH@
|
||||
GNULIB_REMOVE = @GNULIB_REMOVE@
|
||||
@ -465,6 +466,7 @@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
|
||||
HAVE_READDIR = @HAVE_READDIR@
|
||||
HAVE_READLINK = @HAVE_READLINK@
|
||||
HAVE_READLINKAT = @HAVE_READLINKAT@
|
||||
HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
|
||||
HAVE_REALPATH = @HAVE_REALPATH@
|
||||
HAVE_RENAMEAT = @HAVE_RENAMEAT@
|
||||
HAVE_REWINDDIR = @HAVE_REWINDDIR@
|
||||
@ -898,11 +900,13 @@ gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c = @gl_GNULIB_ENABLED_6099e973
|
||||
gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec = @gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec@
|
||||
gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1 = @gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1@
|
||||
gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36 = @gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36@
|
||||
gl_GNULIB_ENABLED_cloexec = @gl_GNULIB_ENABLED_cloexec@
|
||||
gl_GNULIB_ENABLED_dirfd = @gl_GNULIB_ENABLED_dirfd@
|
||||
gl_GNULIB_ENABLED_dosname = @gl_GNULIB_ENABLED_dosname@
|
||||
gl_GNULIB_ENABLED_euidaccess = @gl_GNULIB_ENABLED_euidaccess@
|
||||
gl_GNULIB_ENABLED_getdtablesize = @gl_GNULIB_ENABLED_getdtablesize@
|
||||
gl_GNULIB_ENABLED_getgroups = @gl_GNULIB_ENABLED_getgroups@
|
||||
gl_GNULIB_ENABLED_open = @gl_GNULIB_ENABLED_open@
|
||||
gl_GNULIB_ENABLED_strtoll = @gl_GNULIB_ENABLED_strtoll@
|
||||
gl_LIBOBJS = @gl_LIBOBJS@
|
||||
gl_LTLIBOBJS = @gl_LTLIBOBJS@
|
||||
@ -1085,6 +1089,18 @@ EXTRA_DIST += careadlinkat.h
|
||||
endif
|
||||
## end gnulib module careadlinkat
|
||||
|
||||
## begin gnulib module cloexec
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_cloexec))
|
||||
|
||||
ifneq (,$(gl_GNULIB_ENABLED_cloexec))
|
||||
libgnu_a_SOURCES += cloexec.c
|
||||
|
||||
endif
|
||||
EXTRA_DIST += cloexec.h
|
||||
|
||||
endif
|
||||
## end gnulib module cloexec
|
||||
|
||||
## begin gnulib module close-stream
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_close-stream))
|
||||
|
||||
@ -1817,6 +1833,19 @@ EXTRA_DIST += strftime.h
|
||||
endif
|
||||
## end gnulib module nstrftime
|
||||
|
||||
## begin gnulib module open
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_open))
|
||||
|
||||
ifneq (,$(gl_GNULIB_ENABLED_open))
|
||||
|
||||
endif
|
||||
EXTRA_DIST += open.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += open.c
|
||||
|
||||
endif
|
||||
## end gnulib module open
|
||||
|
||||
## begin gnulib module openat-h
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_openat-h))
|
||||
|
||||
@ -2311,6 +2340,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
|
||||
-e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
|
||||
-e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
|
||||
-e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
|
||||
-e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \
|
||||
-e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
|
||||
-e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
|
||||
-e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \
|
||||
@ -2341,6 +2371,7 @@ stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
|
||||
-e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \
|
||||
-e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
|
||||
-e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
|
||||
-e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \
|
||||
-e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
|
||||
-e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
|
||||
-e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \
|
||||
|
208
lib/open.c
Normal file
208
lib/open.c
Normal file
@ -0,0 +1,208 @@
|
||||
/* Open a descriptor to a file.
|
||||
Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
|
||||
|
||||
/* If the user's config.h happens to include <fcntl.h>, let it include only
|
||||
the system's <fcntl.h> here, so that orig_open doesn't recurse to
|
||||
rpl_open. */
|
||||
#define __need_system_fcntl_h
|
||||
#include <config.h>
|
||||
|
||||
/* Get the original definition of open. It might be defined as a macro. */
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#undef __need_system_fcntl_h
|
||||
|
||||
static int
|
||||
orig_open (const char *filename, int flags, mode_t mode)
|
||||
{
|
||||
return open (filename, flags, mode);
|
||||
}
|
||||
|
||||
/* Specification. */
|
||||
/* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates
|
||||
this include because of the preliminary #include <fcntl.h> above. */
|
||||
#include "fcntl.h"
|
||||
|
||||
#include "cloexec.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifndef REPLACE_OPEN_DIRECTORY
|
||||
# define REPLACE_OPEN_DIRECTORY 0
|
||||
#endif
|
||||
|
||||
int
|
||||
open (const char *filename, int flags, ...)
|
||||
{
|
||||
/* 0 = unknown, 1 = yes, -1 = no. */
|
||||
#if GNULIB_defined_O_CLOEXEC
|
||||
int have_cloexec = -1;
|
||||
#else
|
||||
static int have_cloexec;
|
||||
#endif
|
||||
|
||||
mode_t mode;
|
||||
int fd;
|
||||
|
||||
mode = 0;
|
||||
if (flags & O_CREAT)
|
||||
{
|
||||
va_list arg;
|
||||
va_start (arg, flags);
|
||||
|
||||
/* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4
|
||||
creates crashing code when 'mode_t' is smaller than 'int'. */
|
||||
mode = va_arg (arg, PROMOTED_MODE_T);
|
||||
|
||||
va_end (arg);
|
||||
}
|
||||
|
||||
#if GNULIB_defined_O_NONBLOCK
|
||||
/* The only known platform that lacks O_NONBLOCK is mingw, but it
|
||||
also lacks named pipes and Unix sockets, which are the only two
|
||||
file types that require non-blocking handling in open().
|
||||
Therefore, it is safe to ignore O_NONBLOCK here. It is handy
|
||||
that mingw also lacks openat(), so that is also covered here. */
|
||||
flags &= ~O_NONBLOCK;
|
||||
#endif
|
||||
|
||||
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
|
||||
if (strcmp (filename, "/dev/null") == 0)
|
||||
filename = "NUL";
|
||||
#endif
|
||||
|
||||
#if OPEN_TRAILING_SLASH_BUG
|
||||
/* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR
|
||||
is specified, then fail.
|
||||
Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
|
||||
says that
|
||||
"A pathname that contains at least one non-slash character and that
|
||||
ends with one or more trailing slashes shall be resolved as if a
|
||||
single dot character ( '.' ) were appended to the pathname."
|
||||
and
|
||||
"The special filename dot shall refer to the directory specified by
|
||||
its predecessor."
|
||||
If the named file already exists as a directory, then
|
||||
- if O_CREAT is specified, open() must fail because of the semantics
|
||||
of O_CREAT,
|
||||
- if O_WRONLY or O_RDWR is specified, open() must fail because POSIX
|
||||
<http://www.opengroup.org/susv3/functions/open.html> says that it
|
||||
fails with errno = EISDIR in this case.
|
||||
If the named file does not exist or does not name a directory, then
|
||||
- if O_CREAT is specified, open() must fail since open() cannot create
|
||||
directories,
|
||||
- if O_WRONLY or O_RDWR is specified, open() must fail because the
|
||||
file does not contain a '.' directory. */
|
||||
if (flags & (O_CREAT | O_WRONLY | O_RDWR))
|
||||
{
|
||||
size_t len = strlen (filename);
|
||||
if (len > 0 && filename[len - 1] == '/')
|
||||
{
|
||||
errno = EISDIR;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
fd = orig_open (filename,
|
||||
flags & ~(have_cloexec <= 0 ? O_CLOEXEC : 0), mode);
|
||||
|
||||
if (flags & O_CLOEXEC)
|
||||
{
|
||||
if (! have_cloexec)
|
||||
{
|
||||
if (0 <= fd)
|
||||
have_cloexec = 1;
|
||||
else if (errno == EINVAL)
|
||||
{
|
||||
fd = orig_open (filename, flags & ~O_CLOEXEC, mode);
|
||||
have_cloexec = -1;
|
||||
}
|
||||
}
|
||||
if (have_cloexec < 0 && 0 <= fd)
|
||||
set_cloexec_flag (fd, true);
|
||||
}
|
||||
|
||||
|
||||
#if REPLACE_FCHDIR
|
||||
/* Implementing fchdir and fdopendir requires the ability to open a
|
||||
directory file descriptor. If open doesn't support that (as on
|
||||
mingw), we use a dummy file that behaves the same as directories
|
||||
on Linux (ie. always reports EOF on attempts to read()), and
|
||||
override fstat() in fchdir.c to hide the fact that we have a
|
||||
dummy. */
|
||||
if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES
|
||||
&& ((flags & O_ACCMODE) == O_RDONLY
|
||||
|| (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH)))
|
||||
{
|
||||
struct stat statbuf;
|
||||
if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))
|
||||
{
|
||||
/* Maximum recursion depth of 1. */
|
||||
fd = open ("/dev/null", flags, mode);
|
||||
if (0 <= fd)
|
||||
fd = _gl_register_fd (fd, filename);
|
||||
}
|
||||
else
|
||||
errno = EACCES;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPEN_TRAILING_SLASH_BUG
|
||||
/* If the filename ends in a slash and fd does not refer to a directory,
|
||||
then fail.
|
||||
Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
|
||||
says that
|
||||
"A pathname that contains at least one non-slash character and that
|
||||
ends with one or more trailing slashes shall be resolved as if a
|
||||
single dot character ( '.' ) were appended to the pathname."
|
||||
and
|
||||
"The special filename dot shall refer to the directory specified by
|
||||
its predecessor."
|
||||
If the named file without the slash is not a directory, open() must fail
|
||||
with ENOTDIR. */
|
||||
if (fd >= 0)
|
||||
{
|
||||
/* We know len is positive, since open did not fail with ENOENT. */
|
||||
size_t len = strlen (filename);
|
||||
if (filename[len - 1] == '/')
|
||||
{
|
||||
struct stat statbuf;
|
||||
|
||||
if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
|
||||
{
|
||||
close (fd);
|
||||
errno = ENOTDIR;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if REPLACE_FCHDIR
|
||||
if (!REPLACE_OPEN_DIRECTORY && 0 <= fd)
|
||||
fd = _gl_register_fd (fd, filename);
|
||||
#endif
|
||||
|
||||
return fd;
|
||||
}
|
@ -111,9 +111,9 @@
|
||||
#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
|
||||
_GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
|
||||
|
||||
/* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>. */
|
||||
/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */
|
||||
/* But in any case avoid namespace pollution on glibc systems. */
|
||||
#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \
|
||||
#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \
|
||||
&& ! defined __GLIBC__
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
@ -765,6 +765,23 @@ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
|
||||
"use gnulib module realloc-posix for portability");
|
||||
#endif
|
||||
|
||||
|
||||
#if @GNULIB_REALLOCARRAY@
|
||||
# if ! @HAVE_REALLOCARRAY@
|
||||
_GL_FUNCDECL_SYS (reallocarray, void *,
|
||||
(void *ptr, size_t nmemb, size_t size));
|
||||
# endif
|
||||
_GL_CXXALIAS_SYS (reallocarray, void *,
|
||||
(void *ptr, size_t nmemb, size_t size));
|
||||
_GL_CXXALIASWARN (reallocarray);
|
||||
#elif defined GNULIB_POSIXCHECK
|
||||
# undef reallocarray
|
||||
# if HAVE_RAW_DECL_REALLOCARRAY
|
||||
_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - "
|
||||
"use gnulib module reallocarray for portability");
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if @GNULIB_REALPATH@
|
||||
# if @REPLACE_REALPATH@
|
||||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||
|
@ -1,4 +1,4 @@
|
||||
# serial 16 -*- Autoconf -*-
|
||||
# serial 17 -*- Autoconf -*-
|
||||
# Enable extensions on systems that normally disable them.
|
||||
|
||||
# Copyright (C) 2003, 2006-2017 Free Software Foundation, Inc.
|
||||
@ -68,6 +68,10 @@ dnl configure.ac when using autoheader 2.62.
|
||||
#ifndef _GNU_SOURCE
|
||||
# undef _GNU_SOURCE
|
||||
#endif
|
||||
/* Enable NetBSD extensions on NetBSD. */
|
||||
#ifndef _NETBSD_SOURCE
|
||||
# undef _NETBSD_SOURCE
|
||||
#endif
|
||||
/* Enable OpenBSD extensions on NetBSD. */
|
||||
#ifndef _OPENBSD_SOURCE
|
||||
# undef _OPENBSD_SOURCE
|
||||
@ -132,6 +136,7 @@ dnl configure.ac when using autoheader 2.62.
|
||||
AC_DEFINE([_ALL_SOURCE])
|
||||
AC_DEFINE([_DARWIN_C_SOURCE])
|
||||
AC_DEFINE([_GNU_SOURCE])
|
||||
AC_DEFINE([_NETBSD_SOURCE])
|
||||
AC_DEFINE([_OPENBSD_SOURCE])
|
||||
AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
|
||||
AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__])
|
||||
|
@ -53,6 +53,7 @@ AC_DEFUN([gl_EARLY],
|
||||
# Code from module c-strcase:
|
||||
# Code from module careadlinkat:
|
||||
# Code from module clock-time:
|
||||
# Code from module cloexec:
|
||||
# Code from module close-stream:
|
||||
# Code from module count-leading-zeros:
|
||||
# Code from module count-one-bits:
|
||||
@ -115,6 +116,7 @@ AC_DEFUN([gl_EARLY],
|
||||
# Code from module multiarch:
|
||||
# Code from module nocrash:
|
||||
# Code from module nstrftime:
|
||||
# Code from module open:
|
||||
# Code from module openat-h:
|
||||
# Code from module pipe2:
|
||||
# Code from module pselect:
|
||||
@ -413,6 +415,7 @@ AC_DEFUN([gl_INIT],
|
||||
gl_UTIMENS
|
||||
AC_C_VARARRAYS
|
||||
gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=false
|
||||
gl_gnulib_enabled_cloexec=false
|
||||
gl_gnulib_enabled_dirfd=false
|
||||
gl_gnulib_enabled_dosname=false
|
||||
gl_gnulib_enabled_euidaccess=false
|
||||
@ -422,6 +425,7 @@ AC_DEFUN([gl_INIT],
|
||||
gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=false
|
||||
gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9=false
|
||||
gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=false
|
||||
gl_gnulib_enabled_open=false
|
||||
gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7=false
|
||||
gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=false
|
||||
gl_gnulib_enabled_strtoll=false
|
||||
@ -431,6 +435,14 @@ AC_DEFUN([gl_INIT],
|
||||
if ! $gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b; then
|
||||
AC_LIBOBJ([openat-proc])
|
||||
gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=true
|
||||
func_gl_gnulib_m4code_open
|
||||
fi
|
||||
}
|
||||
func_gl_gnulib_m4code_cloexec ()
|
||||
{
|
||||
if ! $gl_gnulib_enabled_cloexec; then
|
||||
gl_MODULE_INDICATOR_FOR_TESTS([cloexec])
|
||||
gl_gnulib_enabled_cloexec=true
|
||||
fi
|
||||
}
|
||||
func_gl_gnulib_m4code_dirfd ()
|
||||
@ -536,6 +548,21 @@ AC_DEFUN([gl_INIT],
|
||||
gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=true
|
||||
fi
|
||||
}
|
||||
func_gl_gnulib_m4code_open ()
|
||||
{
|
||||
if ! $gl_gnulib_enabled_open; then
|
||||
gl_FUNC_OPEN
|
||||
if test $REPLACE_OPEN = 1; then
|
||||
AC_LIBOBJ([open])
|
||||
gl_PREREQ_OPEN
|
||||
fi
|
||||
gl_FCNTL_MODULE_INDICATOR([open])
|
||||
gl_gnulib_enabled_open=true
|
||||
if test $REPLACE_OPEN = 1; then
|
||||
func_gl_gnulib_m4code_cloexec
|
||||
fi
|
||||
fi
|
||||
}
|
||||
func_gl_gnulib_m4code_03e0aaad4cb89ca757653bd367a6ccb7 ()
|
||||
{
|
||||
if ! $gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7; then
|
||||
@ -622,6 +649,7 @@ AC_DEFUN([gl_INIT],
|
||||
fi
|
||||
m4_pattern_allow([^gl_GNULIB_ENABLED_])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b], [$gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_cloexec], [$gl_gnulib_enabled_cloexec])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_dirfd], [$gl_gnulib_enabled_dirfd])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_dosname], [$gl_gnulib_enabled_dosname])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_euidaccess], [$gl_gnulib_enabled_euidaccess])
|
||||
@ -631,6 +659,7 @@ AC_DEFUN([gl_INIT],
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], [$gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_2049e887c7e5308faad27b3f894bb8c9], [$gl_gnulib_enabled_2049e887c7e5308faad27b3f894bb8c9])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31], [$gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_open], [$gl_gnulib_enabled_open])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7], [$gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [$gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c])
|
||||
AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll])
|
||||
@ -800,6 +829,8 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||
lib/c-strncasecmp.c
|
||||
lib/careadlinkat.c
|
||||
lib/careadlinkat.h
|
||||
lib/cloexec.c
|
||||
lib/cloexec.h
|
||||
lib/close-stream.c
|
||||
lib/close-stream.h
|
||||
lib/count-leading-zeros.c
|
||||
@ -869,6 +900,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||
lib/mktime-internal.h
|
||||
lib/mktime.c
|
||||
lib/nstrftime.c
|
||||
lib/open.c
|
||||
lib/openat-priv.h
|
||||
lib/openat-proc.c
|
||||
lib/openat.h
|
||||
@ -987,10 +1019,13 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||
m4/minmax.m4
|
||||
m4/mkostemp.m4
|
||||
m4/mktime.m4
|
||||
m4/mode_t.m4
|
||||
m4/multiarch.m4
|
||||
m4/nocrash.m4
|
||||
m4/nstrftime.m4
|
||||
m4/off_t.m4
|
||||
m4/open-cloexec.m4
|
||||
m4/open.m4
|
||||
m4/pipe2.m4
|
||||
m4/pselect.m4
|
||||
m4/pthread_sigmask.m4
|
||||
|
26
m4/mode_t.m4
Normal file
26
m4/mode_t.m4
Normal file
@ -0,0 +1,26 @@
|
||||
# mode_t.m4 serial 2
|
||||
dnl Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# For using mode_t, it's sufficient to use AC_TYPE_MODE_T and
|
||||
# include <sys/types.h>.
|
||||
|
||||
# Define PROMOTED_MODE_T to the type that is the result of "default argument
|
||||
# promotion" (ISO C 6.5.2.2.(6)) of the type mode_t.
|
||||
AC_DEFUN([gl_PROMOTED_TYPE_MODE_T],
|
||||
[
|
||||
AC_REQUIRE([AC_TYPE_MODE_T])
|
||||
AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [
|
||||
dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int',
|
||||
dnl and to itself otherwise. This assumption is not guaranteed by the ISO C
|
||||
dnl standard, but we don't know of any real-world counterexamples.
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]],
|
||||
[[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])],
|
||||
[gl_cv_promoted_mode_t='int'],
|
||||
[gl_cv_promoted_mode_t='mode_t'])
|
||||
])
|
||||
AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t],
|
||||
[Define to the type that is the result of default argument promotions of type mode_t.])
|
||||
])
|
21
m4/open-cloexec.m4
Normal file
21
m4/open-cloexec.m4
Normal file
@ -0,0 +1,21 @@
|
||||
# Test whether O_CLOEXEC is defined.
|
||||
|
||||
dnl Copyright 2017 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
AC_DEFUN([gl_PREPROC_O_CLOEXEC],
|
||||
[
|
||||
AC_CACHE_CHECK([for O_CLOEXEC],
|
||||
[gl_cv_macro_O_CLOEXEC],
|
||||
[AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <fcntl.h>
|
||||
#ifndef O_CLOEXEC
|
||||
choke me;
|
||||
#endif
|
||||
]],
|
||||
[[return O_CLOEXEC;]])],
|
||||
[gl_cv_macro_O_CLOEXEC=yes],
|
||||
[gl_cv_macro_O_CLOEXEC=no])])
|
||||
])
|
95
m4/open.m4
Normal file
95
m4/open.m4
Normal file
@ -0,0 +1,95 @@
|
||||
# open.m4 serial 15
|
||||
dnl Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
AC_DEFUN([gl_FUNC_OPEN],
|
||||
[
|
||||
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||
AC_REQUIRE([gl_PREPROC_O_CLOEXEC])
|
||||
case "$host_os" in
|
||||
mingw* | pw*)
|
||||
REPLACE_OPEN=1
|
||||
;;
|
||||
*)
|
||||
dnl open("foo/") should not create a file when the file name has a
|
||||
dnl trailing slash. FreeBSD only has the problem on symlinks.
|
||||
AC_CHECK_FUNCS_ONCE([lstat])
|
||||
if test "$gl_cv_macro_O_CLOEXEC" != yes; then
|
||||
REPLACE_OPEN=1
|
||||
fi
|
||||
AC_CACHE_CHECK([whether open recognizes a trailing slash],
|
||||
[gl_cv_func_open_slash],
|
||||
[# Assume that if we have lstat, we can also check symlinks.
|
||||
if test $ac_cv_func_lstat = yes; then
|
||||
touch conftest.tmp
|
||||
ln -s conftest.tmp conftest.lnk
|
||||
fi
|
||||
AC_RUN_IFELSE(
|
||||
[AC_LANG_SOURCE([[
|
||||
#include <fcntl.h>
|
||||
#if HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
int main ()
|
||||
{
|
||||
int result = 0;
|
||||
#if HAVE_LSTAT
|
||||
if (open ("conftest.lnk/", O_RDONLY) != -1)
|
||||
result |= 1;
|
||||
#endif
|
||||
if (open ("conftest.sl/", O_CREAT, 0600) >= 0)
|
||||
result |= 2;
|
||||
return result;
|
||||
}]])],
|
||||
[gl_cv_func_open_slash=yes],
|
||||
[gl_cv_func_open_slash=no],
|
||||
[
|
||||
changequote(,)dnl
|
||||
case "$host_os" in
|
||||
freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
|
||||
gl_cv_func_open_slash="guessing no" ;;
|
||||
*)
|
||||
gl_cv_func_open_slash="guessing yes" ;;
|
||||
esac
|
||||
changequote([,])dnl
|
||||
])
|
||||
rm -f conftest.sl conftest.tmp conftest.lnk
|
||||
])
|
||||
case "$gl_cv_func_open_slash" in
|
||||
*no)
|
||||
AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1],
|
||||
[Define to 1 if open() fails to recognize a trailing slash.])
|
||||
REPLACE_OPEN=1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
dnl Replace open() for supporting the gnulib-defined fchdir() function,
|
||||
dnl to keep fchdir's bookkeeping up-to-date.
|
||||
m4_ifdef([gl_FUNC_FCHDIR], [
|
||||
if test $REPLACE_OPEN = 0; then
|
||||
gl_TEST_FCHDIR
|
||||
if test $HAVE_FCHDIR = 0; then
|
||||
REPLACE_OPEN=1
|
||||
fi
|
||||
fi
|
||||
])
|
||||
dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag.
|
||||
m4_ifdef([gl_NONBLOCKING_IO], [
|
||||
if test $REPLACE_OPEN = 0; then
|
||||
gl_NONBLOCKING_IO
|
||||
if test $gl_cv_have_open_O_NONBLOCK != yes; then
|
||||
REPLACE_OPEN=1
|
||||
fi
|
||||
fi
|
||||
])
|
||||
])
|
||||
|
||||
# Prerequisites of lib/open.c.
|
||||
AC_DEFUN([gl_PREREQ_OPEN],
|
||||
[
|
||||
AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T])
|
||||
:
|
||||
])
|
@ -21,9 +21,9 @@ AC_DEFUN([gl_STDLIB_H],
|
||||
#endif
|
||||
]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt
|
||||
initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps
|
||||
posix_openpt ptsname ptsname_r qsort_r random random_r realpath rpmatch
|
||||
secure_getenv setenv setstate setstate_r srandom srandom_r
|
||||
strtod strtoll strtoull unlockpt unsetenv])
|
||||
posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray
|
||||
realpath rpmatch secure_getenv setenv setstate setstate_r srandom
|
||||
srandom_r strtod strtoll strtoull unlockpt unsetenv])
|
||||
])
|
||||
|
||||
AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
|
||||
@ -58,6 +58,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
|
||||
GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R])
|
||||
GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM])
|
||||
GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R])
|
||||
GNULIB_REALLOCARRAY=0; AC_SUBST([GNULIB_REALLOCARRAY])
|
||||
GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
|
||||
GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH])
|
||||
GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH])
|
||||
@ -89,6 +90,7 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
|
||||
HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
|
||||
HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
|
||||
HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
|
||||
HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY])
|
||||
HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
|
||||
HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
|
||||
HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
|
||||
|
@ -403,8 +403,6 @@ create_lock_file (char *lfname, char *lock_info_str, bool force)
|
||||
else
|
||||
{
|
||||
ptrdiff_t lock_info_len;
|
||||
if (! O_CLOEXEC)
|
||||
fcntl (fd, F_SETFD, FD_CLOEXEC);
|
||||
lock_info_len = strlen (lock_info_str);
|
||||
err = 0;
|
||||
if (emacs_write (fd, lock_info_str, lock_info_len) != lock_info_len
|
||||
|
10
src/sysdep.c
10
src/sysdep.c
@ -2393,8 +2393,6 @@ emacs_open (const char *file, int oflags, int mode)
|
||||
oflags |= O_CLOEXEC;
|
||||
while ((fd = open (file, oflags, mode)) < 0 && errno == EINTR)
|
||||
maybe_quit ();
|
||||
if (! O_CLOEXEC && 0 <= fd)
|
||||
fcntl (fd, F_SETFD, FD_CLOEXEC);
|
||||
return fd;
|
||||
}
|
||||
|
||||
@ -2436,13 +2434,7 @@ emacs_pipe (int fd[2])
|
||||
#ifdef MSDOS
|
||||
return pipe (fd);
|
||||
#else /* !MSDOS */
|
||||
int result = pipe2 (fd, O_BINARY | O_CLOEXEC);
|
||||
if (! O_CLOEXEC && result == 0)
|
||||
{
|
||||
fcntl (fd[0], F_SETFD, FD_CLOEXEC);
|
||||
fcntl (fd[1], F_SETFD, FD_CLOEXEC);
|
||||
}
|
||||
return result;
|
||||
return pipe2 (fd, O_BINARY | O_CLOEXEC);
|
||||
#endif /* !MSDOS */
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user