6#include <winpr/windows.h>
8static const char* get_dir(
char* filename,
size_t len)
11 if ((len == 0) || (strnlen_s(filename, len) == len))
13 char* ptr = strrchr(filename,
'\\');
15 if ((len == 0) || (strnlen(filename, len) == len))
17 char* ptr = strrchr(filename,
'/');
25static BOOL get_tmp(
char* path,
size_t len)
28 const char template[] =
"tmpdir.XXXXXX";
29 strncmp(path,
template, strnlen_s(
template, len) + 1);
32 return winpr_str_append(
"testfile", path, len,
"\\");
34 const char template[] =
"/tmp/tmpdir.XXXXXX";
35 if (!strncpy(path,
template, strnlen(
template, len) + 1))
39 return winpr_str_append(
"testfile", path, len,
"/");
43static BOOL test_write(
const char* filename,
const char* data,
size_t datalen)
47 WINPR_ASSERT(filename);
49 WINPR_ASSERT(datalen > 0);
51 HANDLE hdl = winpr_CreateFile(filename, GENERIC_WRITE, 0,
nullptr, CREATE_NEW,
52 FILE_ATTRIBUTE_NORMAL,
nullptr);
53 if (!hdl || (hdl == INVALID_HANDLE_VALUE))
57 if (!WriteFile(hdl, data, datalen, &written,
nullptr))
59 if (written != datalen)
62 if (!FlushFileBuffers(hdl))
71static BOOL test_read(
const char* filename,
const char* data,
size_t datalen)
75 WINPR_ASSERT(filename);
77 WINPR_ASSERT(datalen > 0);
79 char* cmp = calloc(datalen + 1,
sizeof(
char));
80 HANDLE hdl = winpr_CreateFile(filename, GENERIC_READ, 0,
nullptr, OPEN_EXISTING,
81 FILE_ATTRIBUTE_NORMAL,
nullptr);
82 if (!hdl || (hdl == INVALID_HANDLE_VALUE) || !cmp)
86 if (!ReadFile(hdl, cmp, datalen, &read,
nullptr))
90 if (memcmp(data, cmp, datalen) != 0)
92 if (FlushFileBuffers(hdl))
102int TestFileWriteFile(
int argc,
char* argv[])
104 const char data[] =
"sometesttext\nanother line\r\ngogogo\r\tfoo\t\r\n\r";
105 char filename[MAX_PATH] = WINPR_C_ARRAY_INIT;
108 if (!get_tmp(filename,
sizeof(filename)))
111 if (!test_write(filename, data,
sizeof(data)))
114 if (!test_read(filename, data,
sizeof(data)))
119 if (!winpr_DeleteFile(filename))
122 const char* d = get_dir(filename,
sizeof(filename));
125 if (!winpr_RemoveDirectory(d))