From d674667cbaa84ff4cf82cfedacad0665ae6cb440 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Thu, 23 Jan 2014 01:16:14 -0500 Subject: [PATCH] shm_open: sync with logic in sem_open Signed-off-by: Mike Frysinger --- ChangeLog | 5 +++++ sysdeps/unix/sysv/linux/shm_open.c | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f59152e..34b2edf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2014-02-08 Mike Frysinger + * 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 + * manual/setjmp.texi: Fix typos/grammar errors. 2014-02-08 Mike Frysinger diff --git a/sysdeps/unix/sysv/linux/shm_open.c b/sysdeps/unix/sysv/linux/shm_open.c index 5f23515..fef8fd5 100644 --- a/sysdeps/unix/sysv/linux/shm_open.c +++ b/sysdeps/unix/sysv/linux/shm_open.c @@ -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); -- 2.7.4