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 strcat_s(path, len,
"\\testfile");
32 if (strnlen_s(path, len) + 10 > len)
35 const char template[] =
"/tmp/tmpdir.XXXXXX";
36 if (!strncpy(path,
template, strnlen(
template, len) + 1))
40 if (strnlen(path, len) + 10 > len)
42 strcat(path,
"/testfile");
47static BOOL test_write(
const char* filename,
const char* data,
size_t datalen)
51 WINPR_ASSERT(filename);
53 WINPR_ASSERT(datalen > 0);
56 CreateFileA(filename, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
57 if (!hdl || (hdl == INVALID_HANDLE_VALUE))
61 if (!WriteFile(hdl, data, datalen, &written, NULL))
63 if (written != datalen)
66 if (!FlushFileBuffers(hdl))
75static BOOL test_read(
const char* filename,
const char* data,
size_t datalen)
79 WINPR_ASSERT(filename);
81 WINPR_ASSERT(datalen > 0);
83 char* cmp = calloc(datalen + 1,
sizeof(
char));
85 CreateFileA(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
86 if (!hdl || (hdl == INVALID_HANDLE_VALUE) || !cmp)
90 if (!ReadFile(hdl, cmp, datalen, &read, NULL))
94 if (memcmp(data, cmp, datalen) != 0)
96 if (FlushFileBuffers(hdl))
106int TestFileWriteFile(
int argc,
char* argv[])
108 const char data[] =
"sometesttext\nanother line\r\ngogogo\r\tfoo\t\r\n\r";
109 char filename[MAX_PATH] = { 0 };
112 if (!get_tmp(filename,
sizeof(filename)))
115 if (!test_write(filename, data,
sizeof(data)))
118 if (!test_read(filename, data,
sizeof(data)))
123 if (!DeleteFile(filename))
126 const char* d = get_dir(filename,
sizeof(filename));
129 if (!RemoveDirectory(d))