summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/file_io/GetTempFileNameW/test3/gettempfilenamew.c
blob: 648d1694a425c451b59cdd81c8c0fc92c50f20e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information. 
//

/*=====================================================================
**
** Source:  GetTempFileNameW.c (test 3)
**
** Purpose: Tests the PAL implementation of the GetTempFileNameW function.
**          Checks the file attributes and ensures that getting a file name,
**          deleting the file and getting another doesn't produce the same 
**          as the just deleted file. Also checks the file size is 0.
**
** Depends on:
**          GetFileAttributesW
**          DeleteFileW
**          CreateFileW
**          GetFileSize
**          CloseHandle
**
**
**===================================================================*/

#include <palsuite.h>



int __cdecl main(int argc, char *argv[])
{
    const UINT uUnique = 0;
    UINT uiError;
    WCHAR szwReturnedName[MAX_LONGPATH];
    WCHAR szwReturnedName_02[MAX_LONGPATH];
    DWORD dwFileSize = 0;
    HANDLE hFile;
    const WCHAR szwDot[] = {'.','\0'};
    const WCHAR szwPre[] = {'c','\0'};

    if (0 != PAL_Initialize(argc, argv))
    {
        return FAIL;
    }


    /* valid path with null prefix */
    uiError = GetTempFileNameW(szwDot, szwPre, uUnique, szwReturnedName);
    if (uiError == 0)
    {
        Fail("GetTempFileNameW: ERROR -> Call failed with a valid path "
            "with the error code: %u.\n", 
            GetLastError());
    }

    /* verify temp file was created */
    if (GetFileAttributesW(szwReturnedName) == -1) 
    {
        Fail("GetTempFileNameW: ERROR -> GetFileAttributes failed on the "
            "returned temp file \"%S\" with error code: %u.\n", 
            szwReturnedName,
            GetLastError());
    }

    /* 
    ** verify that the file size is 0 bytes
    */

    hFile = CreateFileW(szwReturnedName,
                        GENERIC_READ,
                        FILE_SHARE_READ,
                        NULL,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL,
                        NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        Trace("GetTempFileNameW: ERROR -> CreateFileW failed to open"
            " the created temp file with error code: %u.\n", 
            GetLastError());
        if (!DeleteFileW(szwReturnedName))
        {
            Trace("GetTempFileNameW: ERROR -> DeleteFileW failed to delete"
                " the created temp file with error code: %u.\n", 
                GetLastError());
        }
        Fail("");
    }

    if ((dwFileSize = GetFileSize(hFile, NULL)) != (DWORD)0)
    {
        Trace("GetTempFileNameW: ERROR -> GetFileSize returned %u whereas"
            "it should have returned 0.\n", 
            dwFileSize);
        if (!CloseHandle(hFile))
        {
            Trace("GetTempFileNameW: ERROR -> CloseHandle was unable to close the "
                "opened file. GetLastError returned %u.\n",
                GetLastError());
        }
        if (!DeleteFileW(szwReturnedName))
        {
            Trace("GetTempFileNameW: ERROR -> DeleteFileW failed to delete"
                " the created temp file with error code: %u.\n", 
                GetLastError());
        }
        Fail("");
    }

    if (!CloseHandle(hFile))
    {
        Fail("GetTempFileNameW: ERROR -> CloseHandle was unable to close the "
            "opened file. GetLastError returned %u.\n",
            GetLastError());
    }


    /* delete the file to see if we get the same name next time around */
    if (DeleteFileW(szwReturnedName) != TRUE)
    {
        Fail("GetTempFileNameW: ERROR -> DeleteFileW failed to delete"
            " the created temp file with error code: %u.\n", 
            GetLastError());
    }

    /* get another and make sure it's not the same as the last */
    uiError = GetTempFileNameW(szwDot, szwPre, uUnique, szwReturnedName_02);
    if (uiError == 0)
    {
        Fail("GetTempFileNameW: ERROR -> Call failed with a valid path "
            "with the error code: %u.\n", 
            GetLastError());
    }

    /* did we get different names? */
    if (wcsncmp(szwReturnedName, szwReturnedName_02, wcslen(szwReturnedName)) == 0)
    {
        Fail("GetTempFileNameW: ERROR -> The first call returned \"%S\". "
            "The second call returned \"%S\" and the two should not be"
            " the same.\n",
            szwReturnedName,
            szwReturnedName_02);
        if (!DeleteFileW(szwReturnedName_02))
        {
            Trace("GetTempFileNameW: ERROR -> DeleteFileW failed to delete"
                " the created temp file with error code: %u.\n", 
                GetLastError());
        }
        Fail("");
    }

    /* clean up */
    if (!DeleteFileW(szwReturnedName_02))
    {
        Fail("GetTempFileNameW: ERROR -> DeleteFileW failed to delete"
            " the created temp file with error code: %u.\n", 
            GetLastError());
    }


    PAL_Terminate();
    return PASS;
}