/* shm_open -- open a POSIX shared memory object. Generic POSIX file version.
- Copyright (C) 2001-2017 Free Software Foundation, Inc.
+ Copyright (C) 2001-2019 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
+ <https://www.gnu.org/licenses/>. */
#include <unistd.h>
#else
# include <fcntl.h>
+# include <pthread.h>
# include <shm-directory.h>
{
SHM_GET_NAME (EINVAL, -1, "");
- oflag |= O_NOFOLLOW;
-# ifdef O_CLOEXEC
- oflag |= O_CLOEXEC;
-# endif
+ oflag |= O_NOFOLLOW | O_CLOEXEC;
/* Disable asynchronous cancellation. */
int state;
object names and the standard does not mention EISDIR. */
__set_errno (EINVAL);
-# ifndef O_CLOEXEC
- if (fd != -1)
- {
- /* We got a descriptor. Now set the FD_CLOEXEC bit. */
- int flags = fcntl (fd, F_GETFD, 0);
-
- if (__glibc_likely (flags != -1))
- {
- flags |= FD_CLOEXEC;
- flags = fcntl (fd, F_SETFD, flags);
- }
-
- if (flags == -1)
- {
- /* Something went wrong. We cannot return the descriptor. */
- int save_errno = errno;
- close (fd);
- fd = -1;
- __set_errno (save_errno);
- }
- }
-# endif
-
pthread_setcancelstate (state, NULL);
return fd;