On 04/25/2014 09:54 AM, Keith Packard wrote:
Create load_cursor_image_check, load_cursor_argb_check,
LoadCursorImageCheck and LoadCursorARGBCheck that can return failure
and use them in preference to the old unchecked variants.

Signed-off-by: Keith Packard <kei...@keithp.com>
---

On IRC this morning, Hans and I thought this might provide the best
compatibility story -- existing driver sources should work with only a
recompile, which the existing ABI version checks will enforce. New
drivers can provide the newer entry point where necessary and the
server will choose the _check versions over the old ones when both are
available.

I've tested this with the upstream intel driver sources (without the
return value change) and it works correctly

  hw/xfree86/modes/xf86Crtc.h    |  8 ++++--
  hw/xfree86/modes/xf86Cursors.c | 56 +++++++++++++++++++++++++++++++++---------
  hw/xfree86/ramdac/IBM.c        |  4 +--
  hw/xfree86/ramdac/TI.c         |  2 +-
  hw/xfree86/ramdac/xf86Cursor.h | 36 +++++++++++++++++++++++++--
  hw/xfree86/ramdac/xf86HWCurs.c | 14 +++++------
  6 files changed, 95 insertions(+), 25 deletions(-)

[...]

diff --git a/hw/xfree86/ramdac/xf86Cursor.h b/hw/xfree86/ramdac/xf86Cursor.h
index 1ecbdcd..a389a99 100644
--- a/hw/xfree86/ramdac/xf86Cursor.h
+++ b/hw/xfree86/ramdac/xf86Cursor.h
@@ -12,7 +12,8 @@ typedef struct _xf86CursorInfoRec {
      int MaxHeight;
      void (*SetCursorColors) (ScrnInfoPtr pScrn, int bg, int fg);
      void (*SetCursorPosition) (ScrnInfoPtr pScrn, int x, int y);
-    Bool (*LoadCursorImage) (ScrnInfoPtr pScrn, unsigned char *bits);
+    void (*LoadCursorImage) (ScrnInfoPtr pScrn, unsigned char *bits);
+    Bool (*LoadCursorImageCheck) (ScrnInfoPtr pScrn, unsigned char *bits);

Doesn't this break the ABI vs. xorg-server-1.15.99.902? I think just moving the new-vs-ABI17 void-returning fields to the end would fix it since xf86CreateCursorInfoRec() uses calloc() to allocate the structure.

      void (*HideCursor) (ScrnInfoPtr pScrn);
      void (*ShowCursor) (ScrnInfoPtr pScrn);
      unsigned char *(*RealizeCursor) (struct _xf86CursorInfoRec *, CursorPtr);
@@ -20,11 +21,42 @@ typedef struct _xf86CursorInfoRec {

  #ifdef ARGB_CURSOR
      Bool (*UseHWCursorARGB) (ScreenPtr, CursorPtr);
-    Bool (*LoadCursorARGB) (ScrnInfoPtr, CursorPtr);
+    void (*LoadCursorARGB) (ScrnInfoPtr, CursorPtr);
+    Bool (*LoadCursorARGBCheck) (ScrnInfoPtr, CursorPtr);
  #endif

  } xf86CursorInfoRec, *xf86CursorInfoPtr;

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to