1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-10 05:03:06 +03:00

tst-ftell-active-handler: Open file with O_TRUNC for w modes

The test case fails to truncate the file when a file is intended to be
opened in w or w+ mode.  Add O_TRUNC to fix this.  The test still
succeeds with this change.
This commit is contained in:
Siddhesh Poyarekar
2014-12-04 08:11:07 +05:30
parent be349d7042
commit 61b4f792e0
2 changed files with 14 additions and 8 deletions

View File

@@ -1,5 +1,11 @@
2914-12-04 Siddhesh Poyarekar <siddhesh@redhat.com> 2914-12-04 Siddhesh Poyarekar <siddhesh@redhat.com>
* libio/tst-ftell-active-handler.c (do_ftruncate_test): Add
O_TRUNC flag for w and w+ modes.
(do_rewind_test): Likewise.
(do_ftell_test): Likewise.
(do_write_test): Likewise.
[BZ #17647] [BZ #17647]
* libio/fileops.c (do_ftell): Seek only when there are * libio/fileops.c (do_ftell): Seek only when there are
unflushed writes. unflushed writes.

View File

@@ -104,8 +104,8 @@ do_ftruncate_test (const char *filename)
int fd_mode; int fd_mode;
} test_modes[] = { } test_modes[] = {
{"r+", O_RDWR}, {"r+", O_RDWR},
{"w", O_WRONLY}, {"w", O_WRONLY | O_TRUNC},
{"w+", O_RDWR}, {"w+", O_RDWR | O_TRUNC},
{"a", O_WRONLY}, {"a", O_WRONLY},
{"a+", O_RDWR} {"a+", O_RDWR}
}; };
@@ -189,8 +189,8 @@ do_rewind_test (const char *filename)
size_t old_off; size_t old_off;
size_t new_off; size_t new_off;
} test_modes[] = { } test_modes[] = {
{"w", O_WRONLY, 0, data_len}, {"w", O_WRONLY | O_TRUNC, 0, data_len},
{"w+", O_RDWR, 0, data_len}, {"w+", O_RDWR | O_TRUNC, 0, data_len},
{"r+", O_RDWR, 0, data_len}, {"r+", O_RDWR, 0, data_len},
/* The new offsets for 'a' and 'a+' modes have to factor in the /* The new offsets for 'a' and 'a+' modes have to factor in the
previous writes since they always append to the end of the previous writes since they always append to the end of the
@@ -294,8 +294,8 @@ do_ftell_test (const char *filename)
/* In w, w+ and r+ modes, the file position should be at the /* In w, w+ and r+ modes, the file position should be at the
beginning of the file. After the write, the offset should be beginning of the file. After the write, the offset should be
updated to data_len. */ updated to data_len. */
{"w", O_WRONLY, 0, data_len}, {"w", O_WRONLY | O_TRUNC, 0, data_len},
{"w+", O_RDWR, 0, data_len}, {"w+", O_RDWR | O_TRUNC, 0, data_len},
{"r+", O_RDWR, 0, data_len}, {"r+", O_RDWR, 0, data_len},
/* For the 'a' mode, the initial file position should be the /* For the 'a' mode, the initial file position should be the
current end of file. After the write, the offset has data_len current end of file. After the write, the offset has data_len
@@ -375,8 +375,8 @@ do_write_test (const char *filename)
const char *mode; const char *mode;
int fd_mode; int fd_mode;
} test_modes[] = { } test_modes[] = {
{"w", O_WRONLY}, {"w", O_WRONLY | O_TRUNC},
{"w+", O_RDWR}, {"w+", O_RDWR | O_TRUNC},
{"r+", O_RDWR} {"r+", O_RDWR}
}; };