Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 9 Jun 2000 17:34:27 +0000 (17:34 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 9 Jun 2000 17:34:27 +0000 (17:34 +0000)
2000-06-09  Ulrich Drepper  <drepper@redhat.com>

* sysdeps/unix/sysv/linux/shm_open.c (where_is_shmfs): Try harder
to find correct mount point despite wrong information from the
kernel.

ChangeLog
sysdeps/unix/sysv/linux/shm_open.c

index 1ef00a8..5853d5e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2000-06-09  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/shm_open.c (where_is_shmfs): Try harder
+       to find correct mount point despite wrong information from the
+       kernel.
+
 2000-06-09  Jes Sorensen  <jes@linuxcare.com>
 
        * elf/dl-libc.c (__libc_dlsym): Use DL_SYMBOL_ADDRESS() to obtain
index 0cf7f5e..271b92d 100644 (file)
@@ -38,7 +38,7 @@ static struct
 } mountpoint;
 
 /* This is the default directory.  */
-const char defaultdir[] = "/dev/shm/";
+static const char defaultdir[] = "/dev/shm/";
 
 /* Protect the `mountpoint' variable above.  */
 __libc_once_define (static, once);
@@ -82,7 +82,15 @@ where_is_shmfs (void)
       {
        /* Found it.  There might be more than one place where the
            filesystem is mounted but one is enough for us.  */
-       size_t namelen = strlen (mp->mnt_dir);
+       size_t namelen;
+
+       /* 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)
+         continue;
+
+       namelen = strlen (mp->mnt_dir);
 
        if (namelen == 0)
          /* Hum, maybe some crippled entry.  Keep on searching.  */