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: SetFilePointer.c (test 1)
8**
9** Purpose: Tests the PAL implementation of the SetFilePointer function.
10** Set the file pointer using a NULL handle and other invalid
11** options.
12**
13**
14**===================================================================*/
15
16#include <palsuite.h>
17
18
19const char* szTextFile = "text.txt";
20
21
22int __cdecl main(int argc, char *argv[])
23{
24 HANDLE hFile = NULL;
25 DWORD dwByteCount = 0;
26 DWORD dwOffset = 25;
27 DWORD dwRc = 0;
28 BOOL bRc = FALSE;
29 char buffer[100];
30
31
32 if (0 != PAL_Initialize(argc,argv))
33 {
34 return FAIL;
35 }
36
37 /* set the file pointer on a NULL file handle */
38 dwRc = SetFilePointer(NULL, dwOffset, NULL, FILE_BEGIN);
39 if (dwRc != INVALID_SET_FILE_POINTER)
40 {
41 Fail("SetFilePointer: ERROR -> Call to SetFilePointer succeeded "
42 "with a NULL pointer\n");
43 }
44
45
46 /* create a test file without proper permission */
47 hFile = CreateFile(szTextFile,
48 0,
49 0,
50 NULL,
51 CREATE_ALWAYS,
52 FILE_ATTRIBUTE_NORMAL,
53 NULL);
54
55 if(hFile == INVALID_HANDLE_VALUE)
56 {
57 Fail("SetFilePointer: ERROR -> Unable to create file \"%s\".\n",
58 szTextFile);
59 }
60
61 /* ReadFile fails as expected */
62 bRc = ReadFile(hFile, buffer, 1, &dwByteCount, NULL);
63 if (bRc != FALSE)
64 {
65 Trace("SetFilePointer: ERROR -> ReadFile was successful when it was "
66 "expected to fail\n");
67 if (!CloseHandle(hFile))
68 {
69 Trace("SetFilePointer: ERROR -> Unable to close file \"%s\".\n",
70 szTextFile);
71 }
72 if (!DeleteFileA(szTextFile))
73 {
74 Trace("SetFilePointer: ERROR -> Unable to delete file \"%s\".\n",
75 szTextFile);
76 }
77 PAL_TerminateEx(FAIL);
78 return FAIL;
79 }
80
81 /* move the file pointer before the beginning of the file */
82 dwRc = SetFilePointer(hFile, -1, NULL, FILE_BEGIN);
83 if (dwRc != INVALID_SET_FILE_POINTER)
84 {
85 Trace("SetFilePointer: ERROR -> Was able to move the pointer before "
86 "the beginning of the file.\n");
87 bRc = CloseHandle(hFile);
88 if (bRc != TRUE)
89 {
90 Trace("SetFilePointer: ERROR -> Unable to close file \"%s\".\n",
91 szTextFile);
92 }
93 if (!DeleteFileA(szTextFile))
94 {
95 Trace("SetFilePointer: ERROR -> Unable to delete file \"%s\".\n",
96 szTextFile);
97 }
98 PAL_TerminateEx(FAIL);
99 return FAIL;
100 }
101
102 bRc = CloseHandle(hFile);
103 if (bRc != TRUE)
104 {
105 Trace("SetFilePointer: ERROR -> Unable to close file \"%s\".\n",
106 szTextFile);
107 if (!DeleteFileA(szTextFile))
108 {
109 Trace("SetFilePointer: ERROR -> Unable to delete file \"%s\".\n",
110 szTextFile);
111 }
112 PAL_TerminateEx(FAIL);
113 return FAIL;
114 }
115
116 if (!DeleteFileA(szTextFile))
117 {
118 Fail("SetFilePointer: ERROR -> Unable to delete file \"%s\".\n",
119 szTextFile);
120 }
121 PAL_Terminate();
122 return PASS;
123}
124