- Fix two inverted pointer checks, found by Amine Khaldi
[reactos.git] / reactos / dll / win32 / gdi32 / objects / eng.c
1 /* $Id: stubs.c 28533 2007-08-24 22:44:36Z greatlrd $
2 *
3 * reactos/lib/gdi32/misc/eng.c
4 *
5 * GDI32.DLL eng part
6 *
7 *
8 */
9
10 #include "precomp.h"
11
12 /*
13 * @implemented
14 */
15 VOID
16 WINAPI
17 EngAcquireSemaphore ( IN HSEMAPHORE hsem )
18 {
19 RtlEnterCriticalSection((PRTL_CRITICAL_SECTION)hsem);
20 }
21
22
23 /*
24 * @unimplemented
25 */
26 BOOL
27 copy_my_glyphset( FD_GLYPHSET *dst_glyphset , FD_GLYPHSET * src_glyphset, ULONG Size)
28 {
29 BOOL retValue = FALSE;
30
31 memcpy(src_glyphset, dst_glyphset, Size);
32 if (src_glyphset->cRuns == 0)
33 {
34 retValue = TRUE;
35 }
36
37 /* FIXME copy wrun */
38 return retValue;
39 }
40
41 /*
42 * @implemented
43 */
44 FD_GLYPHSET*
45 WINAPI
46 EngComputeGlyphSet(INT nCodePage,INT nFirstChar,INT cChars)
47 {
48 FD_GLYPHSET * ntfd_glyphset;
49 FD_GLYPHSET * myfd_glyphset = NULL;
50
51 ntfd_glyphset = NtGdiEngComputeGlyphSet(nCodePage,nFirstChar,cChars);
52
53 if (ntfd_glyphset)
54 {
55 if (ntfd_glyphset->cjThis)
56 {
57 myfd_glyphset = GlobalAlloc(0,ntfd_glyphset->cjThis);
58 if (myfd_glyphset)
59 {
60 if (copy_my_glyphset(myfd_glyphset,ntfd_glyphset,ntfd_glyphset->cjThis) == FALSE)
61 {
62 GlobalFree(myfd_glyphset);
63 myfd_glyphset = NULL;
64 }
65 }
66 }
67 }
68 return myfd_glyphset;
69 }
70
71 /*
72 * @implemented
73 */
74 HSEMAPHORE
75 WINAPI
76 EngCreateSemaphore ( VOID )
77 {
78 PRTL_CRITICAL_SECTION CritSect = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(RTL_CRITICAL_SECTION));
79 if (!CritSect)
80 {
81 return NULL;
82 }
83
84 RtlInitializeCriticalSection( CritSect );
85 return (HSEMAPHORE)CritSect;
86 }
87
88 /*
89 * @implemented
90 */
91 VOID
92 WINAPI
93 EngDeleteSemaphore ( IN HSEMAPHORE hsem )
94 {
95 if (hsem)
96 {
97 RtlDeleteCriticalSection( (PRTL_CRITICAL_SECTION) hsem );
98 RtlFreeHeap( GetProcessHeap(), 0, hsem );
99 }
100 }
101
102 /*
103 * @implemented
104 */
105 PVOID WINAPI
106 EngFindResource(HANDLE h,
107 int iName,
108 int iType,
109 PULONG pulSize)
110 {
111 HRSRC HRSrc;
112 DWORD Size = 0;
113 HGLOBAL Hg;
114 LPVOID Lock = NULL;
115
116 if ((HRSrc = FindResourceW( (HMODULE) h, MAKEINTRESOURCEW(iName), MAKEINTRESOURCEW(iType))))
117 {
118 if ((Size = SizeofResource( (HMODULE) h, HRSrc )))
119 {
120 if ((Hg = LoadResource( (HMODULE) h, HRSrc )))
121 {
122 Lock = LockResource( Hg );
123 }
124 }
125 }
126
127 *pulSize = Size;
128 return (PVOID) Lock;
129 }
130
131 /*
132 * @implemented
133 */
134 VOID WINAPI
135 EngFreeModule(HANDLE h)
136 {
137 FreeLibrary(h);
138 }
139
140 /*
141 * @implemented
142 */
143
144 VOID WINAPI
145 EngGetCurrentCodePage( OUT PUSHORT OemCodePage,
146 OUT PUSHORT AnsiCodePage)
147 {
148 *OemCodePage = GetOEMCP();
149 *AnsiCodePage = GetACP();
150 }
151
152
153 /*
154 * @implemented
155 */
156 LPWSTR WINAPI
157 EngGetDriverName(HDEV hdev)
158 {
159 // DHPDEV from NtGdiGetDhpdev must be from print driver.
160 PUMPDEV pPDev = (PUMPDEV)NtGdiGetDhpdev(hdev);
161
162 if (!pPDev) return NULL;
163
164 if (pPDev->Sig != PDEV_UMPD_ID)
165 {
166 pPDev = (PUMPDEV)pPDev->Sig;
167 }
168 return pPDev->pdi5Info->pDriverPath;
169 }
170
171 /*
172 * @implemented
173 */
174 LPWSTR WINAPI
175 EngGetPrinterDataFileName(HDEV hdev)
176 {
177 PUMPDEV pPDev = (PUMPDEV)NtGdiGetDhpdev(hdev);
178
179 if (!pPDev) return NULL;
180
181 if (pPDev->Sig != PDEV_UMPD_ID)
182 {
183 pPDev = (PUMPDEV)pPDev->Sig;
184 }
185 return pPDev->pdi5Info->pDataFile;
186 }
187
188 /*
189 * @implemented
190 */
191 HANDLE WINAPI
192 EngLoadModule(LPWSTR pwsz)
193 {
194 return LoadLibraryExW ( pwsz, NULL, LOAD_LIBRARY_AS_DATAFILE);
195 }
196
197 /*
198 * @implemented
199 */
200 INT WINAPI
201 EngMultiByteToWideChar(UINT CodePage,
202 LPWSTR WideCharString,
203 INT BytesInWideCharString,
204 LPSTR MultiByteString,
205 INT BytesInMultiByteString)
206 {
207 return MultiByteToWideChar(CodePage,0,MultiByteString,BytesInMultiByteString,WideCharString,BytesInWideCharString / sizeof(WCHAR));
208 }
209
210 /*
211 * @implemented
212 */
213 VOID WINAPI
214 EngQueryLocalTime(PENG_TIME_FIELDS etf)
215 {
216 SYSTEMTIME SystemTime;
217 GetLocalTime( &SystemTime );
218 etf->usYear = SystemTime.wYear;
219 etf->usMonth = SystemTime.wMonth;
220 etf->usWeekday = SystemTime.wDayOfWeek;
221 etf->usDay = SystemTime.wDay;
222 etf->usHour = SystemTime.wHour;
223 etf->usMinute = SystemTime.wMinute;
224 etf->usSecond = SystemTime.wSecond;
225 etf->usMilliseconds = SystemTime.wMilliseconds;
226 }
227
228 /*
229 * @implemented
230 */
231 VOID
232 WINAPI
233 EngReleaseSemaphore ( IN HSEMAPHORE hsem )
234 {
235 RtlLeaveCriticalSection( (PRTL_CRITICAL_SECTION) hsem);
236 }
237
238
239
240
241 /*
242 * @implemented
243 */
244 INT
245 WINAPI
246 EngWideCharToMultiByte( UINT CodePage,
247 LPWSTR WideCharString,
248 INT BytesInWideCharString,
249 LPSTR MultiByteString,
250 INT BytesInMultiByteString)
251 {
252 return WideCharToMultiByte(CodePage, 0, WideCharString, (BytesInWideCharString/sizeof(WCHAR)),
253 MultiByteString, BytesInMultiByteString, NULL, NULL);
254 }