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.
This commit is contained in:
Peter TB Brett 2014-04-07 21:56:12 +01:00 committed by Ondřej Bílka
parent 01f8eac224
commit a88ddc902b
3 changed files with 15 additions and 17 deletions

View File

@ -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):

12
NEWS
View File

@ -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,

View File

@ -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