Commit in reactos/subsys/win32k/objects on MAIN
dc.c+65-261.129 -> 1.130
set proper errorcode in some functions

reactos/subsys/win32k/objects
dc.c 1.129 -> 1.130
diff -u -r1.129 -r1.130
--- dc.c	25 Apr 2004 11:34:13 -0000	1.129
+++ dc.c	25 Apr 2004 12:51:53 -0000	1.130
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: dc.c,v 1.129 2004/04/25 11:34:13 weiden Exp $
+/* $Id: dc.c,v 1.130 2004/04/25 12:51:53 weiden Exp $
  *
  * DC.C - Device context functions
  *
@@ -72,6 +72,7 @@
   PDC  dc = DC_LockDc( hdc );  \
   if (!dc)                          \
   {                                 \
+    SetLastWin32Error(ERROR_INVALID_HANDLE); \
     return 0;                       \
   }                                 \
   ft = dc->dc_field;                \
@@ -83,22 +84,38 @@
  * important that the function has the right signature, for the implementation
  * we can do whatever we want.
  */
-#define DC_GET_VAL_EX( NtGdiFuncName, IntFuncName, ret_x, ret_y, type ) \
-VOID FASTCALL IntFuncName ( PDC dc, LP##type pt )  \
-{                                                  \
-  ASSERT ( dc );                                   \
-  ASSERT ( pt );                                   \
-  ((LPPOINT)pt)->x = dc->ret_x;                    \
-  ((LPPOINT)pt)->y = dc->ret_y;                    \
-}                                                  \
-BOOL STDCALL NtGdiFuncName ( HDC hdc, LP##type pt ) \
-{                                                  \
-  PDC dc = DC_LockDc ( hdc );                 \
-  if ( !dc )                                       \
-    return FALSE;                                  \
-  IntFuncName ( dc, pt );                          \
-  DC_UnlockDc ( hdc );                           \
-  return TRUE;                                     \
+#define DC_GET_VAL_EX( FuncName, ret_x, ret_y, type, ax, ay ) \
+VOID FASTCALL Int##FuncName ( PDC dc, LP##type pt) \
+{ \
+  ASSERT(dc); \
+  ASSERT(pt); \
+  pt->ax = dc->ret_x; \
+  pt->ay = dc->ret_y; \
+} \
+BOOL STDCALL NtGdi##FuncName ( HDC hdc, LP##type pt ) \
+{ \
+  NTSTATUS Status; \
+  type Safept; \
+  PDC dc; \
+  if(!pt) \
+  { \
+    SetLastWin32Error(ERROR_INVALID_PARAMETER); \
+    return FALSE; \
+  } \
+  if(!(dc = DC_LockDc(hdc))) \
+  { \
+    SetLastWin32Error(ERROR_INVALID_HANDLE); \
+    return FALSE; \
+  } \
+  Int##FuncName( dc, &Safept); \
+  DC_UnlockDc(hdc); \
+  Status = MmCopyToCaller(pt, &Safept, sizeof( type )); \
+  if(!NT_SUCCESS(Status)) \
+  { \
+    SetLastNtError(Status); \
+    return FALSE; \
+  } \
+  return TRUE; \
 }
 
 #define DC_SET_MODE( func_name, dc_field, min_val, max_val ) \
@@ -107,10 +124,16 @@
   INT  prevMode;                            \
   PDC  dc;                                  \
   if ((mode < min_val) || (mode > max_val)) \
+  { \
+    SetLastWin32Error(ERROR_INVALID_PARAMETER); \
     return 0;                               \
+  } \
   dc = DC_LockDc ( hdc );              \
   if ( !dc )                                \
+  { \
+    SetLastWin32Error(ERROR_INVALID_HANDLE); \
     return 0;                               \
+  } \
   prevMode = dc->dc_field;                  \
   dc->dc_field = mode;                      \
   DC_UnlockDc ( hdc );                    \
@@ -933,7 +956,7 @@
 
 DC_GET_VAL( COLORREF, NtGdiGetBkColor, w.backgroundColor )
 DC_GET_VAL( INT, NtGdiGetBkMode, w.backgroundMode )
-DC_GET_VAL_EX( NtGdiGetBrushOrgEx, IntGetBrushOrgEx, w.brushOrgX, w.brushOrgY, POINT )
+DC_GET_VAL_EX( GetBrushOrgEx, w.brushOrgX, w.brushOrgY, POINT, x, y )
 DC_GET_VAL( HRGN, NtGdiGetClipRgn, w.hClipRgn )
 
 HGDIOBJ STDCALL
@@ -942,7 +965,7 @@
   UNIMPLEMENTED;
 }
 
-DC_GET_VAL_EX ( NtGdiGetCurrentPositionEx, IntGetCurrentPositionEx, w.CursPosX, w.CursPosY, POINT )
+DC_GET_VAL_EX ( GetCurrentPositionEx, w.CursPosX, w.CursPosY, POINT, x, y )
 
 BOOL FASTCALL
 IntGdiGetDCOrgEx(DC *dc, LPPOINT  Point)
@@ -992,11 +1015,14 @@
 NtGdiSetBkColor(HDC hDC, COLORREF color)
 {
   COLORREF oldColor;
-  PDC  dc = DC_LockDc(hDC);
+  PDC dc;
   HBRUSH hBrush;
 
-  if ( !dc )
-    return 0x80000000;
+  if (!(dc = DC_LockDc(hDC)))
+  {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
+    return CLR_INVALID;
+  }
 
   oldColor = dc->w.backgroundColor;
   dc->w.backgroundColor = color;
@@ -1015,6 +1041,7 @@
   dc = DC_LockDc(hDC);
   if (dc == NULL)
   {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
     return 0;
   }
 
@@ -1213,8 +1240,11 @@
       DC_UnlockDc ( hDCSave );
     } else {
       DC_UnlockDc ( hDC );
+      SetLastWin32Error(ERROR_INVALID_HANDLE);
     }
   }
+  else
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
 }
 
 INT STDCALL
@@ -1228,6 +1258,7 @@
   dc = DC_LockDc(hDC);
   if (dc == NULL)
   {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
     return 0;
   }
 
@@ -1436,6 +1467,7 @@
   GdiObject = GDIOBJ_LockObj(Handle, GDI_OBJECT_TYPE_DONTCARE);
   if (NULL == GdiObject)
     {
+      SetLastWin32Error(ERROR_INVALID_HANDLE);
       return 0;
     }
   
@@ -1519,7 +1551,10 @@
 
   ptr = GDIOBJ_LockObj(handle, GDI_OBJECT_TYPE_DONTCARE);
   if (ptr == 0)
+  {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
     return 0;
+  }
 
   objectType = GDIOBJ_GetObjectType(handle);
   switch(objectType)
@@ -1576,10 +1611,10 @@
 DC_GET_VAL( INT, NtGdiGetStretchBltMode, w.stretchBltMode )
 DC_GET_VAL( UINT, NtGdiGetTextAlign, w.textAlign )
 DC_GET_VAL( COLORREF, NtGdiGetTextColor, w.textColor )
-DC_GET_VAL_EX( NtGdiGetViewportExtEx, IntGetViewportExtEx, vportExtX, vportExtY, SIZE )
-DC_GET_VAL_EX( NtGdiGetViewportOrgEx, IntGetViewportOrgEx, vportOrgX, vportOrgY, POINT )
-DC_GET_VAL_EX( NtGdiGetWindowExtEx, IntGetWindowExtEx, wndExtX, wndExtY, SIZE )
-DC_GET_VAL_EX( NtGdiGetWindowOrgEx, IntGetWindowOrgEx, wndOrgX, wndOrgY, POINT )
+DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY, SIZE, cx, cy )
+DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY, POINT, x, y )
+DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY, SIZE, cx, cy )
+DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY, POINT, x, y )
 
 HDC STDCALL
 NtGdiResetDC(HDC  hDC, CONST DEVMODEW *InitData)
@@ -1596,6 +1631,7 @@
   dc = DC_LockDc(hDC);
   if(!dc)
   {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
     return FALSE;
   }
 
@@ -1664,12 +1700,14 @@
   dcs = DC_LockDc (hdcs);
   if (dcs == NULL)
   {
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
     return 0;
   }
   dc = DC_LockDc (hDC);
   if (dc == NULL)
   {
     DC_UnlockDc(dc);
+    SetLastWin32Error(ERROR_INVALID_HANDLE);
     return 0;
   }
 
@@ -1925,6 +1963,7 @@
 
   if (NULL == dc)
     {
+      SetLastWin32Error(ERROR_INVALID_HANDLE);
       return 0;
     }
 
CVSspam 0.2.8