1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5/*=====================================================================
6**
7** Source: WriteFile.c (test 5)
8**
9** Purpose: Tests the PAL implementation of the WriteFile function.
10** Performs writing a huge file.
11**
12** dependency:
13** CreateFile.
14** GetFileSize.
15** FlushFileBuffers
16** CloseHandle
17** DeleteFile
18**
19**
20**===================================================================*/
21
22
23#include <palsuite.h>
24
25BOOL CleanUp(HANDLE hFile, const char * fileName)
26{
27 BOOL bRc = TRUE;
28 if (CloseHandle(hFile) != TRUE)
29 {
30 bRc = FALSE;
31 Trace("WriteFile: ERROR -> Unable to close file \"%s\","
32 " error: %ld.\n", fileName, GetLastError());
33 }
34 if (!DeleteFileA(fileName))
35 {
36 bRc = FALSE;
37 Trace("WriteFile: ERROR -> Unable to delete file \"%s\","
38 " error: %ld.\n", fileName, GetLastError());
39 }
40 return bRc;
41}
42
43
44int __cdecl main(int argc, char *argv[])
45{
46
47 HANDLE hFile = NULL;
48 DWORD dwBytesWritten;
49 const char* hugeStringTest =
50 "1234567890123456789012345678901234567890";
51 const char* szWritableFile = "writeable.txt";
52 int i =0;
53 if (0 != PAL_Initialize(argc,argv))
54 {
55 return FAIL;
56 }
57
58 /* create the test file */
59 hFile = CreateFile(szWritableFile,
60 GENERIC_WRITE,
61 FILE_SHARE_WRITE,
62 NULL,
63 CREATE_ALWAYS,
64 FILE_ATTRIBUTE_NORMAL,
65 NULL);
66
67 if(hFile == INVALID_HANDLE_VALUE)
68 {
69 Fail("WriteFile: ERROR -> Unable to create file \"%s\".\n",
70 szWritableFile);
71 }
72
73 /* write 4000 000 chars to the file.*/
74 for (i=0; i<100000;i++)
75 {
76 if( WriteFile(hFile, /* HANDLE handle to file */
77 hugeStringTest, /* data buffer */
78 strlen(hugeStringTest), /* number of bytes to write */
79 &dwBytesWritten, /* number of bytes written */
80 NULL) /* overlapped buffer */
81 ==0)
82 {
83 Trace("WriteFile: ERROR -> Unable to write to file error: %ld \n",
84 GetLastError());
85 CleanUp(hFile,szWritableFile);
86 Fail("");
87
88 }
89 }
90
91 if(!FlushFileBuffers(hFile))
92 {
93 Trace("WriteFile: ERROR -> Call to FlushFileBuffers failed"
94 "error %ld \n",GetLastError());
95 CleanUp(hFile,szWritableFile);
96 Fail("");
97 }
98
99 /* test if the size changed properly. */
100 if(GetFileSize(hFile,NULL) != 4000000)
101 {
102 Trace("WriteFile: ERROR -> file size did not change properly"
103 " after writing 4000 000 chars to it ( size= %u )\n",
104 GetFileSize(hFile,NULL));
105 CleanUp(hFile,szWritableFile);
106 Fail("");
107
108 }
109
110 if (!CleanUp(hFile,szWritableFile))
111 {
112 Fail("");
113 }
114
115 PAL_Terminate();
116 return PASS;
117}
118