about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter TB Brett <peter@peter-b.co.uk>2014-04-07 21:56:12 +0100
committerOndřej Bílka <neleai@seznam.cz>2014-04-09 20:09:56 +0200
commita88ddc902b804a6156f6e5e5feb979754a3e789a (patch)
tree78aa9baadcac6ec1f08747d270d3fb2f3744c92d
parent01f8eac224421f07f28f91cc05db7459ea433ea4 (diff)
downloadglibc-a88ddc902b804a6156f6e5e5feb979754a3e789a.tar.gz
glibc-a88ddc902b804a6156f6e5e5feb979754a3e789a.tar.xz
glibc-a88ddc902b804a6156f6e5e5feb979754a3e789a.zip
Use statvfs64() for pathconf(_PC_NAME_MAX).
pathconf(_PC_NAME_MAX) was implemented on top of statfs().  The 32bit
version therefore fails EOVERFLOW if the filesystem blockcount is
sufficiently large.

Most pathconf() queries use statvfs64(), which avoids this issue.  This
patch modifies pathconf(_PC_NAME_MAX) to do likewise.
-rw-r--r--ChangeLog6
-rw-r--r--NEWS12
-rw-r--r--sysdeps/posix/pathconf.c14
3 files changed, 15 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index ae8cab2b75..414e04356d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-04-09  Peter Brett  <peter@peter-b.co.uk>
+
+	[BZ #15514]
+	* sysdeps/posix/pathconf.c (__pathconf): Use statvfs64() for
+	pathconf(_PC_NAME_MAX).
+
 2014-04-09  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
 	* nptl/sysdeps/pthread/pthread.h (__PTHREAD_MUTEX_HAVE_ELISION):
diff --git a/NEWS b/NEWS
index db8cc103ee..441eae3be1 100644
--- a/NEWS
+++ b/NEWS
@@ -9,12 +9,12 @@ Version 2.20
 
 * The following bugs are resolved with this release:
 
-  6804, 13347, 15347, 15804, 15894, 16002, 16198, 16284, 16348, 16349,
-  16357, 16362, 16447, 16532, 16545, 16574, 16599, 16600, 16609, 16610,
-  16611, 16613, 16623, 16632, 16634, 16639, 16642, 16648, 16649, 16670,
-  16674, 16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707, 16712,
-  16713, 16714, 16731, 16739, 16743, 16758, 16759, 16760, 16770, 16786,
-  16789, 16799, 16800, 16815.
+  6804, 13347, 15347, 15514, 15804, 15894, 16002, 16198, 16284, 16348,
+  16349, 16357, 16362, 16447, 16532, 16545, 16574, 16599, 16600, 16609,
+  16610, 16611, 16613, 16623, 16632, 16634, 16639, 16642, 16648, 16649,
+  16670, 16674, 16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707,
+  16712, 16713, 16714, 16731, 16739, 16743, 16758, 16759, 16760, 16770,
+  16786, 16789, 16799, 16800, 16815.
 
 * Running the testsuite no longer terminates as soon as a test fails.
   Instead, a file tests.sum (xtests.sum from "make xcheck") is generated,
diff --git a/sysdeps/posix/pathconf.c b/sysdeps/posix/pathconf.c
index 8aa55e0856..ac617d4a08 100644
--- a/sysdeps/posix/pathconf.c
+++ b/sysdeps/posix/pathconf.c
@@ -65,10 +65,10 @@ __pathconf (const char *path, int name)
     case _PC_NAME_MAX:
 #ifdef	NAME_MAX
       {
-	struct statfs buf;
+	struct statvfs64 sv;
 	int save_errno = errno;
 
-	if (__statfs (path, &buf) < 0)
+	if (__statvfs64 (path, &sv) < 0)
 	  {
 	    if (errno == ENOSYS)
 	      {
@@ -79,15 +79,7 @@ __pathconf (const char *path, int name)
 	  }
 	else
 	  {
-#ifdef _STATFS_F_NAMELEN
-	    return buf.f_namelen;
-#else
-# ifdef _STATFS_F_NAME_MAX
-	    return buf.f_name_max;
-# else
-	    return NAME_MAX;
-# endif
-#endif
+	    return sv.f_namemax;
 	  }
       }
 #else