[PATCH 2/2] input: print warnings if drivers don't initialize properly

Dave Airlie airlied at gmail.com
Thu May 9 17:29:24 PDT 2013


On Thu, May 9, 2013 at 2:30 PM, Peter Hutterer <peter.hutterer at who-t.net> wrote:
> If drivers supply incorrect values don't just quietly return False, spew to
> the log so we can detect what's going on. All these cases are driver bugs
> and should be fixed immediately.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

yay logged asserts.

Reviewed-by: Dave Airlie <airlied at redhat.com>
> ---
>  Xi/exevents.c | 16 ++++++++++------
>  dix/devices.c | 39 +++++++++++++++++++++++++++++++--------
>  xkb/xkbInit.c |  5 +++--
>  3 files changed, 44 insertions(+), 16 deletions(-)
>
> diff --git a/Xi/exevents.c b/Xi/exevents.c
> index 06f309a..e93b016 100644
> --- a/Xi/exevents.c
> +++ b/Xi/exevents.c
> @@ -2020,6 +2020,9 @@ InitProximityClassDeviceStruct(DeviceIntPtr dev)
>  {
>      ProximityClassPtr proxc;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->proximity != NULL, FALSE);
> +
>      proxc = (ProximityClassPtr) malloc(sizeof(ProximityClassRec));
>      if (!proxc)
>          return FALSE;
> @@ -2045,10 +2048,10 @@ InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval,
>  {
>      AxisInfoPtr ax;
>
> -    if (!dev || !dev->valuator || (minval > maxval && mode == Absolute))
> -        return FALSE;
> -    if (axnum >= dev->valuator->numAxes)
> -        return FALSE;
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->valuator == NULL, FALSE);
> +    BUG_RETURN_VAL(axnum >= dev->valuator->numAxes, FALSE);
> +    BUG_RETURN_VAL(minval > maxval && mode == Absolute, FALSE);
>
>      ax = dev->valuator->axes + axnum;
>
> @@ -2078,8 +2081,9 @@ SetScrollValuator(DeviceIntPtr dev, int axnum, enum ScrollType type,
>      InternalEvent dce;
>      DeviceIntPtr master;
>
> -    if (!dev || !dev->valuator || axnum >= dev->valuator->numAxes)
> -        return FALSE;
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->valuator == NULL, FALSE);
> +    BUG_RETURN_VAL(axnum >= dev->valuator->numAxes, FALSE);
>
>      switch (type) {
>      case SCROLL_TYPE_VERTICAL:
> diff --git a/dix/devices.c b/dix/devices.c
> index 3188fb7..b507fe0 100644
> --- a/dix/devices.c
> +++ b/dix/devices.c
> @@ -1276,6 +1276,9 @@ InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom *labels,
>      ButtonClassPtr butc;
>      int i;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->button != NULL, FALSE);
> +
>      butc = calloc(1, sizeof(ButtonClassRec));
>      if (!butc)
>          return FALSE;
> @@ -1336,8 +1339,7 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
>      int i;
>      ValuatorClassPtr valc;
>
> -    if (!dev)
> -        return FALSE;
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
>
>      if (numAxes > MAX_VALUATORS) {
>          LogMessage(X_WARNING,
> @@ -1446,6 +1448,9 @@ InitFocusClassDeviceStruct(DeviceIntPtr dev)
>  {
>      FocusClassPtr focc;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->focus != NULL, FALSE);
> +
>      focc = malloc(sizeof(FocusClassRec));
>      if (!focc)
>          return FALSE;
> @@ -1465,6 +1470,9 @@ InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
>  {
>      PtrFeedbackPtr feedc;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->ptrfeed != NULL, FALSE);
> +
>      feedc = malloc(sizeof(PtrFeedbackClassRec));
>      if (!feedc)
>          return FALSE;
> @@ -1506,6 +1514,9 @@ InitStringFeedbackClassDeviceStruct(DeviceIntPtr dev,
>      int i;
>      StringFeedbackPtr feedc;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->stringfeed != NULL, FALSE);
> +
>      feedc = malloc(sizeof(StringFeedbackClassRec));
>      if (!feedc)
>          return FALSE;
> @@ -1540,6 +1551,9 @@ InitBellFeedbackClassDeviceStruct(DeviceIntPtr dev, BellProcPtr bellProc,
>  {
>      BellFeedbackPtr feedc;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->bell != NULL, FALSE);
> +
>      feedc = malloc(sizeof(BellFeedbackClassRec));
>      if (!feedc)
>          return FALSE;
> @@ -1559,6 +1573,9 @@ InitLedFeedbackClassDeviceStruct(DeviceIntPtr dev, LedCtrlProcPtr controlProc)
>  {
>      LedFeedbackPtr feedc;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->leds != NULL, FALSE);
> +
>      feedc = malloc(sizeof(LedFeedbackClassRec));
>      if (!feedc)
>          return FALSE;
> @@ -1579,6 +1596,9 @@ InitIntegerFeedbackClassDeviceStruct(DeviceIntPtr dev,
>  {
>      IntegerFeedbackPtr feedc;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->intfeed != NULL, FALSE);
> +
>      feedc = malloc(sizeof(IntegerFeedbackClassRec));
>      if (!feedc)
>          return FALSE;
> @@ -1599,6 +1619,11 @@ InitPointerDeviceStruct(DevicePtr device, CARD8 *map, int numButtons,
>  {
>      DeviceIntPtr dev = (DeviceIntPtr) device;
>
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->button != NULL, FALSE);
> +    BUG_RETURN_VAL(dev->valuator != NULL, FALSE);
> +    BUG_RETURN_VAL(dev->ptrfeed != NULL, FALSE);
> +
>      return (InitButtonClassDeviceStruct(dev, numButtons, btn_labels, map) &&
>              InitValuatorClassDeviceStruct(dev, numAxes, axes_labels,
>                                            numMotionEvents, Relative) &&
> @@ -1619,14 +1644,12 @@ InitTouchClassDeviceStruct(DeviceIntPtr device, unsigned int max_touches,
>      TouchClassPtr touch;
>      int i;
>
> -    if (device->touch || !device->valuator)
> -        return FALSE;
> +    BUG_RETURN_VAL(device == NULL, FALSE);
> +    BUG_RETURN_VAL(device->touch != NULL, FALSE);
>
>      /* Check the mode is valid, and at least X and Y axes. */
> -    if (mode != XIDirectTouch && mode != XIDependentTouch)
> -        return FALSE;
> -    if (num_axes < 2)
> -        return FALSE;
> +    BUG_RETURN_VAL(mode != XIDirectTouch && mode != XIDependentTouch, FALSE);
> +    BUG_RETURN_VAL(num_axes < 2, FALSE);
>
>      if (num_axes > MAX_VALUATORS) {
>          LogMessage(X_WARNING,
> diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
> index ed01114..8f36fff 100644
> --- a/xkb/xkbInit.c
> +++ b/xkb/xkbInit.c
> @@ -488,8 +488,9 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet * rmlvo,
>      XkbEventCauseRec cause;
>      XkbRMLVOSet rmlvo_dflts = { NULL };
>
> -    if (dev->key || dev->kbdfeed)
> -        return FALSE;
> +    BUG_RETURN_VAL(dev == NULL, FALSE);
> +    BUG_RETURN_VAL(dev->key != NULL, FALSE);
> +    BUG_RETURN_VAL(dev->kbdfeed != NULL, FALSE);
>
>      if (!rmlvo) {
>          rmlvo = &rmlvo_dflts;
> --
> 1.8.1.4
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel


More information about the xorg-devel mailing list