File: CeCreateFile.cpp

package info (click to toggle)
librapi2 0.9.0-6
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,204 kB
  • ctags: 1,258
  • sloc: sh: 9,013; ansic: 5,743; cpp: 522; makefile: 171
file content (76 lines) | stat: -rw-r--r-- 2,031 bytes parent folder | download | duplicates (3)
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
//
// Test CeCreateFile, CeCloseHandle, CeWriteFile, CeReadFile, CeDeleteFile
//
#include "test.h"

int main()
{
	VERIFY_HRESULT(CeRapiInit());


	DWORD length;
	WCHAR filename[MAX_PATH];
	VERIFY_NOT_FALSE(length = CeGetSpecialFolderPath(CSIDL_PERSONAL, MAX_PATH, filename));
	wstr_append(filename, to_unicode("\\librapi test file.txt"), sizeof(filename));

	printf("File name: %s\n", from_unicode(filename));
	
	HANDLE handle;

	// Open file for writing, create if it does not exist
	TEST_NOT_EQUAL(INVALID_HANDLE_VALUE, handle = CeCreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));

	// Write data to file
	char* write_buffer = "Hej hopp!\r\n";
	const DWORD should_write = strlen(write_buffer);
	DWORD did_write = (DWORD)-1;
	TEST_NOT_FALSE(CeWriteFile(handle, write_buffer, should_write, &did_write, NULL));
	if (should_write != did_write)
	{
		printf("Only wrote %u bytes to file of %u possible.\n", did_write, should_write);
		return TEST_FAILED;
	}

	// Close file
	TEST_NOT_FALSE(CeCloseHandle(handle));

	// Open file for reading, fail if it does not exist
	TEST_NOT_EQUAL(INVALID_HANDLE_VALUE, handle = CeCreateFile(
				filename, 
				GENERIC_READ, 
				0, 
				NULL, 
				OPEN_EXISTING, 
				FILE_ATTRIBUTE_NORMAL, 
				0));
	
	// Read data from file
	char read_buffer[MAX_PATH];
	DWORD did_read = (DWORD)-1;
	TEST_NOT_FALSE(CeReadFile(handle, read_buffer, MAX_PATH, &did_read, NULL));
	if (did_read != did_write)
	{
		printf("Wrote %u bytes but read %u.\n", did_write, did_read);
		return TEST_FAILED;
	}
	
	read_buffer[did_read] = 0;
	if (strcmp(write_buffer, read_buffer) != 0)
	{
		printf("Wrote \"%s\" but read \"%s\".\n", write_buffer, read_buffer);
		return TEST_FAILED;
	}
	
	// Delete file, should fail because it is open.
	TEST_EQUAL(0, CeDeleteFile(filename));
	
	// Close file, should succeed.
	TEST_NOT_FALSE(CeCloseHandle(handle));

	// Delete file, should succeed.
	TEST_NOT_FALSE(CeDeleteFile(filename));
	
	VERIFY_HRESULT(CeRapiUninit());
	return TEST_SUCCEEDED;
}