[PATCH 1/4] msvcrt/tests: Add test for fopen sequential access hint
Luke Deller
luke at deller.id.au
Mon Aug 2 09:35:18 CDT 2021
Test that adding "S" to the fopen mode results in the underlying file
handle having the sequential access hint set.
Signed-off-by: Luke Deller <luke at deller.id.au>
---
dlls/msvcrt/tests/file.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index fb242d81282..d02087be46c 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -35,6 +35,7 @@
#include <process.h>
#include <errno.h>
#include <locale.h>
+#include <winternl.h>
#define MSVCRT_FD_BLOCK_SIZE 32
typedef struct {
@@ -2731,6 +2732,39 @@ static void test_lseek(void)
DeleteFileA("_creat.tst");
}
+static void test_fopen_hints(void)
+{
+ char *tempf;
+ FILE *fp;
+ HANDLE handle;
+ FILE_MODE_INFORMATION mode_info;
+ IO_STATUS_BLOCK io;
+ NTSTATUS status;
+
+ /* create a test file */
+ tempf = _tempnam(".","wne");
+ fp = fopen(tempf, "wb");
+ ok(fp != NULL, "unable to create test file\n");
+ fwrite("abc\n", 1, 4, fp);
+ fclose(fp);
+
+ /* open test file with sequential access hint */
+ fp = fopen(tempf, "rbS");
+ ok(fp != NULL, "unable to open test file with sequential access hint\n");
+
+ /* check that sequential access hint is set on underlying file handle */
+ handle = (HANDLE)_get_osfhandle(_fileno(fp));
+ status = NtQueryInformationFile(handle, &io, &mode_info, sizeof(mode_info),
+ FileModeInformation);
+ ok(!status, "NtQueryInformationFile failed\n");
+ ok(mode_info.Mode & FILE_SEQUENTIAL_ONLY, "handle missing hint\n");
+
+ /* clean up */
+ fclose(fp);
+ unlink(tempf);
+ free(tempf);
+}
+
START_TEST(file)
{
int arg_c;
@@ -2803,6 +2837,7 @@ START_TEST(file)
test_close();
test__creat();
test_lseek();
+ test_fopen_hints();
/* Wait for the (_P_NOWAIT) spawned processes to finish to make sure the report
* file contains lines in the correct order
--
2.25.1
More information about the wine-devel
mailing list