1 /*
2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for NtGdiAddFontResourceW
5 * PROGRAMMERS: Víctor Martínez Calvo ( victor.martinez@reactos.org )
6 */
7
8 #include "precomp.h"
9
10 #include <ndk/rtlfuncs.h>
11
12 INT
13 APIENTRY
14 NtGdiAddFontResourceW(
15 _In_reads_(cwc) WCHAR *pwszFiles,
16 _In_ ULONG cwc,
17 _In_ ULONG cFiles,
18 _In_ FLONG f,
19 _In_ DWORD dwPidTid,
20 _In_opt_ DESIGNVECTOR *pdv);
21
Test_NtGdiAddFontResourceW()22 void Test_NtGdiAddFontResourceW()
23 {
24 WCHAR lpszFontPath[MAX_PATH];
25 WCHAR lpszFontSearch[MAX_PATH];
26
27 INT ret;
28 UNICODE_STRING NtAbsPath;
29 WIN32_FIND_DATAW FindFileData;
30 HANDLE hFind;
31 ULONG cwc;
32
33 // Create "Font" folder Path
34 GetWindowsDirectoryW(lpszFontPath, MAX_PATH);
35 StringCbCatW(lpszFontPath, sizeof(lpszFontPath), L"\\Fonts\\");
36
37 // Search first .ttf file in Fonts Path
38 StringCbCopyW(lpszFontSearch, sizeof(lpszFontSearch), lpszFontPath);
39 StringCbCatW(lpszFontSearch, sizeof(lpszFontSearch), L"*.ttf");
40
41 hFind = FindFirstFileW(lpszFontSearch, &FindFileData);
42
43 if (hFind == INVALID_HANDLE_VALUE)
44 {
45 skip("Unable to find fonts in Font directory!\n");
46 return;
47 }
48
49 // File found. Create FontPath to File.
50 StringCbCatW(lpszFontPath, sizeof(lpszFontPath), FindFileData.cFileName);
51
52 // Fail due "cwc" being zero.
53 SetLastError(0xdeaddead);
54 RtlInitUnicodeString(&NtAbsPath, NULL);
55 RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL);
56 cwc = 0;
57 ret = NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0);
58
59 ok(ret == 0, "Expected 0 files added. Added: %d\n", ret);
60 ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError());
61
62 RtlFreeUnicodeString(&NtAbsPath);
63
64 // "cwc" must count the null terminator. Otherwise fails.
65 SetLastError(0xdeaddead);
66 RtlInitUnicodeString(&NtAbsPath, NULL);
67 RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL);
68 cwc = NtAbsPath.Length / sizeof(WCHAR);
69 ret = NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0);
70
71 ok(ret == 0, "Expected 0 files added. Added: %d\n", ret);
72 ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError());
73
74 RtlFreeUnicodeString(&NtAbsPath);
75
76 // Correct "cwc" value.
77 SetLastError(0xdeaddead);
78 RtlInitUnicodeString(&NtAbsPath, NULL);
79 RtlDosPathNameToNtPathName_U(lpszFontPath, &NtAbsPath, NULL, NULL);
80 cwc = NtAbsPath.Length / sizeof(WCHAR) + 1;
81 ret = NtGdiAddFontResourceW(NtAbsPath.Buffer, cwc, 1, 0, 0, 0);
82
83 ok(ret == 1, "Expected 1 files added. Added: %d\n", ret);
84 ok(GetLastError() == 0xdeaddead, "Expected 0xdeaddead. Obtained: 0x%lx\n", GetLastError());
85
86 RtlFreeUnicodeString(&NtAbsPath);
87
88 // Test an invalid pointer.
89 SetLastError(0xdeadbeef);
90 ret = NtGdiAddFontResourceW((PVOID)-4, 123, 1, 0, 0, NULL);
91
92 ok(ret == 0, "Expected 0 files added. Added: %d\n", ret);
93 ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef. Obtained: 0x%lx\n", GetLastError());
94 }
95
START_TEST(NtGdiAddFontResource)96 START_TEST(NtGdiAddFontResource)
97 {
98 Test_NtGdiAddFontResourceW();
99 }
100