5#include <winpr/windows.h>
7static const char* get_dir(
char* filename,
size_t len)
10 if ((len == 0) || (strnlen_s(filename, len) == len))
12 char* ptr = strrchr(filename,
'\\');
14 if ((len == 0) || (strnlen(filename, len) == len))
16 char* ptr = strrchr(filename,
'/');
24static BOOL get_tmp(
char* path,
size_t len)
27 const char template[] =
"tmpdir.XXXXXX";
28 strncmp(path,
template, strnlen_s(
template, len) + 1);
31 return winpr_str_append(
"testfile", path, len,
"\\");
33 const char template[] =
"/tmp/tmpdir.XXXXXX";
34 if (!strncpy(path,
template, strnlen(
template, len) + 1))
38 return winpr_str_append(
"testfile", path, len,
"/");
42static BOOL test_write(
const char* filename,
const char* data,
size_t datalen)
46 WINPR_ASSERT(filename);
48 WINPR_ASSERT(datalen > 0);
51 CreateFileA(filename, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
52 if (!hdl || (hdl == INVALID_HANDLE_VALUE))
56 if (!WriteFile(hdl, data, datalen, &written, NULL))
58 if (written != datalen)
61 if (!FlushFileBuffers(hdl))
70static BOOL test_read(
const char* filename,
const char* data,
size_t datalen)
74 WINPR_ASSERT(filename);
76 WINPR_ASSERT(datalen > 0);
78 char* cmp = calloc(datalen + 1,
sizeof(
char));
80 CreateFileA(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
81 if (!hdl || (hdl == INVALID_HANDLE_VALUE) || !cmp)
85 if (!ReadFile(hdl, cmp, datalen, &read, NULL))
89 if (memcmp(data, cmp, datalen) != 0)
91 if (FlushFileBuffers(hdl))
101int TestFileWriteFile(
int argc,
char* argv[])
103 const char data[] =
"sometesttext\nanother line\r\ngogogo\r\tfoo\t\r\n\r";
104 char filename[MAX_PATH] = { 0 };
107 if (!get_tmp(filename,
sizeof(filename)))
110 if (!test_write(filename, data,
sizeof(data)))
113 if (!test_read(filename, data,
sizeof(data)))
118 if (!DeleteFile(filename))
121 const char* d = get_dir(filename,
sizeof(filename));
124 if (!RemoveDirectory(d))