summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/file_io/GetTempFileNameA/test3/gettempfilenamea.c
blob: 8eccc3d2e8e1269eadc1c0a36a55e20ecb6c5f5a (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
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

/*=====================================================================
**
** Source:  GetTempFileNameA.c (test 3)
**
** Purpose: Tests the PAL implementation of the GetTempFileNameA 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:
**          GetFileAttributesA
**          CloseHandle
**          DeleteFileA
**          CreateFileA
**          GetFileSize
**
**
**===================================================================*/

#include <palsuite.h>



int __cdecl main(int argc, char *argv[])
{
    const UINT uUnique = 0;
    UINT uiError;
    const char* szDot = {"."};
    char szReturnedName[MAX_LONGPATH];
    char szReturnedName_02[MAX_LONGPATH];
    DWORD dwFileSize = 0;
    HANDLE hFile;

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


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

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

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

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

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


    if (!CloseHandle(hFile))
    {
        Fail("GetTempFileNameA: ERROR -> CloseHandle failed. "
            "GetLastError returned: %u.\n", 
            GetLastError());
    }

    if (DeleteFileA(szReturnedName) != TRUE)
    {
        Fail("GetTempFileNameA: ERROR -> DeleteFileA 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 = GetTempFileNameA(szDot, NULL, uUnique, szReturnedName_02);
    if (uiError == 0)
    {
        Fail("GetTempFileNameA: ERROR -> Call failed with a valid path "
            "with the error code: %u.\n", 
            GetLastError());
    }

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

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


    PAL_Terminate();
    return PASS;
}