Skip to content

Commit 0a9c3e0

Browse files
committed
[WIN32K]
- Check if required driver functions are available in LDEVOBJ_bLoadDriver - Unload the image in EngLoadImageEx instead of in LDEVOBJ_bLoadDriver - Implement PDEVOBJ_vDestroyPDEV and call if from PDEVOBJ_vRelease - Check for failure in PDEVOBJ_bEnablePDEV - Implement PDEVOBJ_CreatePDEV, which does the common PDEV creation tasks for display and font drivers svn path=/branches/GSoC_2011/GdiFontDriver/; revision=56003
1 parent f65426e commit 0a9c3e0

File tree

2 files changed

+196
-128
lines changed

2 files changed

+196
-128
lines changed

win32ss/gdi/eng/ldevobj.c

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,44 @@ LDEVOBJ_bEnableDriver(
273273
pldev->apfn[ded.pdrvfn[i].iFunc] = ded.pdrvfn[i].pfn;
274274
}
275275

276+
/* Check if the neccessary functions are there */
277+
if ((!pldev->pfn.EnablePDEV) ||
278+
(!pldev->pfn.CompletePDEV) ||
279+
(!pldev->pfn.UnloadFontFile))
280+
{
281+
DPRINT1("Missing function for gdi driver\n");
282+
return FALSE;
283+
}
284+
285+
if (pldev->ldevtype == LDEV_DEVICE_DISPLAY)
286+
{
287+
if ((!pldev->pfn.AssertMode) ||
288+
(!pldev->pfn.EnableSurface) ||
289+
(!pldev->pfn.DisableSurface) ||
290+
(!pldev->pfn.DisableDriver) ||
291+
(!pldev->pfn.DisablePDEV) ||
292+
(!pldev->pfn.GetModes))
293+
{
294+
DPRINT1("Missing function for display driver\n");
295+
return FALSE;
296+
}
297+
}
298+
else if (pldev->ldevtype == LDEV_FONT)
299+
{
300+
if ((!pldev->pfn.LoadFontFile) ||
301+
(!pldev->pfn.QueryAdvanceWidths) || // ?
302+
(!pldev->pfn.QueryFont) ||
303+
(!pldev->pfn.QueryFontCaps) || // ?
304+
(!pldev->pfn.QueryFontData) ||
305+
(!pldev->pfn.QueryFontFile) ||
306+
(!pldev->pfn.QueryFontTree) ||
307+
(!pldev->pfn.UnloadFontFile))
308+
{
309+
DPRINT1("Missing function for font driver\n");
310+
return FALSE;
311+
}
312+
}
313+
276314
/* Return success. */
277315
return TRUE;
278316
}
@@ -411,9 +449,9 @@ EngLoadImageEx(
411449
/* Load the image */
412450
if (!LDEVOBJ_bLoadImage(pldev, &strDriverName))
413451
{
452+
ERR("LDEVOBJ_bLoadImage failed\n");
414453
LDEVOBJ_vFreeLDEV(pldev);
415454
pldev = NULL;
416-
ERR("LDEVOBJ_bLoadImage failed\n");
417455
goto leave;
418456
}
419457

@@ -425,6 +463,9 @@ EngLoadImageEx(
425463
{
426464
ERR("LDEVOBJ_bEnableDriver failed\n");
427465

466+
/* Unload the image. */
467+
LDEVOBJ_vUnloadImage(pldev);
468+
428469
/* Unload the image. */
429470
LDEVOBJ_vUnloadImage(pldev);
430471
LDEVOBJ_vFreeLDEV(pldev);

0 commit comments

Comments
 (0)