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: test2.c
8**
9** Purpose: Tests the PAL implementation of the CopyFileW function
10** Attempt to copy a file to itself
11**
12**
13**===================================================================*/
14
15#include <palsuite.h>
16
17int __cdecl main(int argc, char *argv[])
18{
19 LPSTR szSrcExisting = "src_existing.tmp";
20 WCHAR* wcSource;
21 BOOL bRc = TRUE;
22 FILE* tempFile = NULL;
23 DWORD temp;
24 int retCode;
25
26 if (0 != PAL_Initialize(argc,argv))
27 {
28 return FAIL;
29 }
30
31 /* create the src_existing file */
32 tempFile = fopen(szSrcExisting, "w");
33 if (tempFile != NULL)
34 {
35 retCode = fputs("CopyFileA test file: src_existing.tmp ", tempFile);
36 if(retCode < 0)
37 {
38 Fail("CopyFileW: ERROR-> Couldn't write to %s with error "
39 "%u.\n", szSrcExisting, GetLastError());
40 }
41 retCode = fclose(tempFile);
42 if(retCode != 0)
43 {
44 Fail("CopyFileW: ERROR-> Couldn't close file: %s with error "
45 "%u.\n", szSrcExisting, GetLastError());
46 }
47 }
48 else
49 {
50 Fail("CopyFileW: ERROR-> Couldn't create %s.\n", szSrcExisting);
51 }
52
53 /* convert source string to wide character */
54 wcSource = convert(szSrcExisting);
55
56 /* Get file attributes of source */
57 temp = GetFileAttributes(szSrcExisting);
58 if (temp == -1)
59 {
60 free(wcSource);
61 Fail("CopyFileW: GetFileAttributes of source file "
62 "failed with error code %ld. \n",
63 GetLastError());
64 }
65
66 /* make sure a file can't copy to itself
67 first testing with IfFileExists flag set to true */
68 bRc = CopyFileW(wcSource,wcSource,TRUE);
69 if(bRc)
70 {
71 free(wcSource);
72 Fail("ERROR: Cannot copy a file to itself, %u",GetLastError());
73 }
74
75 /* try to get file attributes of desitnation */
76 if (GetFileAttributesA(szSrcExisting) == -1)
77 {
78 free(wcSource);
79 Fail("CopyFileW: GetFileAttributes of destination file "
80 "failed with error code %ld. \n",
81 GetLastError());
82 }
83 else
84 {
85 /* verify attributes of destination file to source file*/
86 if(temp != GetFileAttributes(szSrcExisting))
87 {
88 free(wcSource);
89 Fail("CopyFileW : The file attributes of the "
90 "destination file do not match the file "
91 "attributes of the source file.\n");
92 }
93 }
94
95 /* testing with IfFileExists flags set to false
96 should fail in Windows and pass in UNIX */
97 bRc = CopyFileW(wcSource,wcSource,FALSE);
98 free(wcSource);
99 if(bRc && (GetLastError() != ERROR_ALREADY_EXISTS))
100 {
101 Fail("ERROR: Cannot copy a file to itself, %u",GetLastError());
102 }
103
104 if (GetFileAttributesA(szSrcExisting) == -1)
105 {
106 Fail("CopyFileW: GetFileAttributes of destination file "
107 "failed with error code %ld. \n",
108 GetLastError());
109 }
110 else
111 {
112 /* verify attributes of destination file to source file*/
113
114 if(temp != GetFileAttributes(szSrcExisting))
115 {
116 Fail("CopyFileW : The file attributes of the "
117 "destination file do not match the file "
118 "attributes of the source file.\n");
119 }
120 }
121
122 PAL_Terminate();
123 return PASS;
124}
125