Check for errors in PSDRV_Init.
diff --git a/dlls/wineps/init.c b/dlls/wineps/init.c
index f17a3bb..c09b262 100644
--- a/dlls/wineps/init.c
+++ b/dlls/wineps/init.c
@@ -243,24 +243,56 @@
TRACE("(0x%4x, 0x%08lx, %p)\n", hinst, reason, reserved);
switch(reason) {
+
case DLL_PROCESS_ATTACH:
- /* FIXME: return FALSE if we fail any of these steps */
- PSDRV_Heap = HeapCreate(0, 0x10000, 0);
- PSDRV_GetFontMetrics();
- PSDRV_DefaultFont = CreateFontIndirectA(&DefaultLogFont);
- /* Register driver as "WINEPS", "WINEPS.DLL" and "WINEPS.DRV"
- to allow an easy configuring for users */
- DRIVER_RegisterDriver( "WINEPS", &PSDRV_Funcs );
- DRIVER_RegisterDriver( "WINEPS.DLL", &PSDRV_Funcs );
- DRIVER_RegisterDriver( "WINEPS.DRV", &PSDRV_Funcs );
- break;
+
+ PSDRV_Heap = HeapCreate(0, 0x10000, 0);
+ if (PSDRV_Heap == (HANDLE)NULL)
+ return FALSE;
+
+ if (PSDRV_GetFontMetrics() == FALSE) {
+ HeapDestroy(PSDRV_Heap);
+ return FALSE;
+ }
+
+ PSDRV_DefaultFont = CreateFontIndirectA(&DefaultLogFont);
+ if (PSDRV_DefaultFont == (HANDLE)NULL) {
+ HeapDestroy(PSDRV_Heap);
+ return FALSE;
+ }
+
+ /* Register driver as "WINEPS", "WINEPS.DLL" and "WINEPS.DRV"
+ to allow an easy configuring for users */
+
+ if (DRIVER_RegisterDriver("WINEPS", &PSDRV_Funcs) == FALSE) {
+ HeapDestroy(PSDRV_Heap);
+ return FALSE;
+ }
+
+ if (DRIVER_RegisterDriver("WINEPS.DLL", &PSDRV_Funcs) == FALSE) {
+ DRIVER_UnregisterDriver("WINEPS");
+ HeapDestroy(PSDRV_Heap);
+ return FALSE;
+ }
+
+ if (DRIVER_RegisterDriver("WINEPS.DRV", &PSDRV_Funcs) == FALSE) {
+ DRIVER_UnregisterDriver("WINEPS");
+ DRIVER_UnregisterDriver("WINEPS.DLL");
+ HeapDestroy(PSDRV_Heap);
+ return FALSE;
+ }
+
+ break;
+
case DLL_PROCESS_DETACH:
- DeleteObject( PSDRV_DefaultFont );
- HeapDestroy( PSDRV_Heap );
- DRIVER_UnregisterDriver( "WINEPS" );
- DRIVER_UnregisterDriver( "WINEPS.DLL" );
- DRIVER_UnregisterDriver( "WINEPS.DRV" );
- break;
+
+ DeleteObject( PSDRV_DefaultFont );
+ HeapDestroy( PSDRV_Heap );
+ DRIVER_UnregisterDriver( "WINEPS" );
+ DRIVER_UnregisterDriver( "WINEPS.DLL" );
+ DRIVER_UnregisterDriver( "WINEPS.DRV" );
+
+ break;
}
return TRUE;