]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - sysdeps/posix/shm_open.c
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / posix / shm_open.c
index 56a9965263b4c2cfa332ce90cde17d748fbea4c7..3c4eb08c901028756cfbdb88aed222da9896e38a 100644 (file)
@@ -1,5 +1,5 @@
 /* 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
@@ -14,7 +14,7 @@
 
    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>
 
@@ -25,6 +25,7 @@
 #else
 
 # include <fcntl.h>
+# include <pthread.h>
 # include <shm-directory.h>
 
 
@@ -34,10 +35,7 @@ shm_open (const char *name, int oflag, mode_t mode)
 {
   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;
@@ -50,29 +48,6 @@ shm_open (const char *name, int oflag, mode_t mode)
        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;