shm_open: sync with logic in sem_open
authorMike Frysinger <vapier@gentoo.org>
Thu, 23 Jan 2014 06:16:14 +0000 (01:16 -0500)
committerMike Frysinger <vapier@gentoo.org>
Sat, 8 Feb 2014 13:17:16 +0000 (08:17 -0500)
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
ChangeLog
sysdeps/unix/sysv/linux/shm_open.c

index f59152e..34b2edf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2014-02-08  Mike Frysinger  <vapier@gentoo.org>
 
+       * sysdeps/unix/sysv/linux/shm_open.c (where_is_shmfs): Compare
+       f.f_type to RAMFS_MAGIC too.  Compare mp->mnt_type to shm too.
+
+2014-02-08  Mike Frysinger  <vapier@gentoo.org>
+
        * manual/setjmp.texi: Fix typos/grammar errors.
 
 2014-02-08  Mike Frysinger  <vapier@gentoo.org>
index 5f23515..fef8fd5 100644 (file)
@@ -62,7 +62,8 @@ where_is_shmfs (void)
 
   /* The canonical place is /dev/shm.  This is at least what the
      documentation tells everybody to do.  */
-  if (__statfs (defaultdir, &f) == 0 && f.f_type == SHMFS_SUPER_MAGIC)
+  if (__statfs (defaultdir, &f) == 0 && (f.f_type == SHMFS_SUPER_MAGIC
+                                        || f.f_type == RAMFS_MAGIC))
     {
       /* It is in the normal place.  */
       mountpoint.dir = (char *) defaultdir;
@@ -86,7 +87,8 @@ where_is_shmfs (void)
   while ((mp = __getmntent_r (fp, &resmem, buf, sizeof buf)) != NULL)
     /* The original name is "shm" but this got changed in early Linux
        2.4.x to "tmpfs".  */
-    if (strcmp (mp->mnt_type, "tmpfs") == 0)
+    if (strcmp (mp->mnt_type, "tmpfs") == 0
+       || strcmp (mp->mnt_type, "shm") == 0)
       {
        /* Found it.  There might be more than one place where the
            filesystem is mounted but one is enough for us.  */
@@ -95,7 +97,8 @@ where_is_shmfs (void)
        /* First make sure this really is the correct entry.  At least
           some versions of the kernel give wrong information because
           of the implicit mount of the shmfs for SysV IPC.  */
-       if (__statfs (mp->mnt_dir, &f) != 0 || f.f_type != SHMFS_SUPER_MAGIC)
+       if (__statfs (mp->mnt_dir, &f) != 0 || (f.f_type != SHMFS_SUPER_MAGIC
+                                               && f.f_type != RAMFS_MAGIC))
          continue;
 
        namelen = strlen (mp->mnt_dir);