1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

Readd O_LARGEFILE flag for openat64 (bug 18781)

This commit is contained in:
Andreas Schwab
2015-08-10 14:12:47 +02:00
parent d0649b2d8e
commit eb32b0d403
4 changed files with 33 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2015-08-10 Andreas Schwab <schwab@suse.de>
[BZ #18781]
* sysdeps/unix/sysv/linux/openat.c (__OPENAT) [MORE_OFLAGS]: Add
MORE_OFLAGS to oflag.
* io/test-lfs.c (do_test): Test openat64.
2015-08-10 Joseph Myers <joseph@codesourcery.com> 2015-08-10 Joseph Myers <joseph@codesourcery.com>
[BZ #18789] [BZ #18789]

2
NEWS
View File

@ -10,7 +10,7 @@ Version 2.23
* The following bugs are resolved with this release: * The following bugs are resolved with this release:
16517, 16519, 17905, 18265, 18480, 18525, 18618, 18647, 18661, 18674, 16517, 16519, 17905, 18265, 18480, 18525, 18618, 18647, 18661, 18674,
18787, 18789. 18781, 18787, 18789.
Version 2.22 Version 2.22

View File

@ -144,7 +144,7 @@ test_ftello (void)
int int
do_test (int argc, char *argv[]) do_test (int argc, char *argv[])
{ {
int ret; int ret, fd2;
struct stat64 statbuf; struct stat64 statbuf;
ret = lseek64 (fd, TWO_GB+100, SEEK_SET); ret = lseek64 (fd, TWO_GB+100, SEEK_SET);
@ -195,6 +195,25 @@ do_test (int argc, char *argv[])
error (EXIT_FAILURE, 0, "stat reported size %lld instead of %lld.", error (EXIT_FAILURE, 0, "stat reported size %lld instead of %lld.",
(long long int) statbuf.st_size, (TWO_GB + 100 + 5)); (long long int) statbuf.st_size, (TWO_GB + 100 + 5));
fd2 = openat64 (AT_FDCWD, name, O_RDWR);
if (fd2 == -1)
{
if (errno == ENOSYS)
{
/* Silently ignore this test. */
error (0, 0, "openat64 is not supported");
}
else
error (EXIT_FAILURE, errno, "openat64 failed to open big file");
}
else
{
ret = close (fd2);
if (ret == -1)
error (EXIT_FAILURE, errno, "error closing file");
}
test_ftello (); test_ftello ();
return 0; return 0;

View File

@ -68,6 +68,11 @@ __OPENAT (int fd, const char *file, int oflag, ...)
va_end (arg); va_end (arg);
} }
/* We have to add the O_LARGEFILE flag for openat64. */
#ifdef MORE_OFLAGS
oflag |= MORE_OFLAGS;
#endif
return SYSCALL_CANCEL (openat, fd, file, oflag, mode); return SYSCALL_CANCEL (openat, fd, file, oflag, mode);
} }
libc_hidden_def (__OPENAT) libc_hidden_def (__OPENAT)