Re: [Linuxwacom-devel] [PATCH 1/8] Improve logging of X property setting

2013-01-20 Thread Peter Hutterer
On Thu, Jan 17, 2013 at 05:42:17PM -0800, Jason Gerecke wrote:
> Sprinkles a few extra DBG() calls into the code to make it a little
> easier to track down issues with property-setting code.
> 
> Signed-off-by: Jason Gerecke 


patches 1-3/8:
Reviewed-by: Peter Hutterer 

Cheers,
   Peter

> ---
>  src/wcmXCommand.c | 45 ++---
>  1 file changed, 38 insertions(+), 7 deletions(-)
> 
> diff --git a/src/wcmXCommand.c b/src/wcmXCommand.c
> index 922c80f..a2723f5 100644
> --- a/src/wcmXCommand.c
> +++ b/src/wcmXCommand.c
> @@ -367,16 +367,30 @@ static void wcmFindActionHandler(WacomDevicePtr priv, 
> Atom property, Atom **hand
>   }
>  }
>  
> -static int wcmCheckActionProperty(Atom property, XIPropertyValuePtr prop)
> +static int wcmCheckActionProperty(WacomDevicePtr priv, Atom property, 
> XIPropertyValuePtr prop)
>  {
>   CARD32 *data;
>   int j;
>  
> - if (!property)
> + if (!property) {
> + DBG(5, priv, "WARNING: property == 0\n");
>   return Success;
> + }
>  
> - if (prop->size >= 255 || prop->format != 32 || prop->type != XA_INTEGER)
> + if (prop->size >= 255) {
> + DBG(3, priv, "ERROR: Too many values (%d > 255)\n", prop->size);
>   return BadMatch;
> + }
> +
> + if (prop->format != 32) {
> + DBG(3, priv, "ERROR: Incorrect value format (%d != 32)\n", 
> prop->format);
> + return BadMatch;
> + }
> +
> + if (prop->type != XA_INTEGER) {
> + DBG(3, priv, "ERROR: Incorrect value type (%d != 
> XA_INTEGER)\n", prop->type);
> + return BadMatch;
> + }
>  
>   data = (CARD32*)prop->data;
>  
> @@ -385,19 +399,25 @@ static int wcmCheckActionProperty(Atom property, 
> XIPropertyValuePtr prop)
>   int code = data[j] & AC_CODE;
>   int type = data[j] & AC_TYPE;
>  
> + DBG(10, priv, "Index %d == %d (type: %d, code: %d)\n", j, 
> data[j], type, code);
> +
>   switch(type)
>   {
>   case AC_KEY:
>   break;
>   case AC_BUTTON:
> - if (code > WCM_MAX_BUTTONS)
> + if (code > WCM_MAX_BUTTONS) {
> + DBG(3, priv, "ERROR: AC_BUTTON code too 
> high (%d > %d)\n", code, WCM_MAX_BUTTONS);
>   return BadValue;
> + }
>   break;
>   case AC_DISPLAYTOGGLE:
>   case AC_MODETOGGLE:
>   break;
>   default:
> + DBG(3, priv, "ERROR: Unknown command\n");
>   return BadValue;
> + break;
>   }
>   }
>  
> @@ -425,11 +445,19 @@ static int wcmSetActionProperty(DeviceIntPtr dev, Atom 
> property,
>   WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
>   int rc, i;
>  
> - DBG(10, priv, "\n");
> + DBG(5, priv, "%s new actions for Atom %d\n", checkonly ? "Checking" : 
> "Setting", property);
>  
> - rc = wcmCheckActionProperty(property, prop);
> - if (rc != Success)
> + rc = wcmCheckActionProperty(priv, property, prop);
> + if (rc != Success) {
> + char *msg = NULL;
> + switch (rc) {
> + case BadMatch: msg = "BadMatch"; break;
> + case BadValue: msg = "BadValue"; break;
> + default: msg = "UNKNOWN"; break;
> + }
> + DBG(3, priv, "Action validation failed with code %d (%s)\n", 
> rc, msg);
>   return rc;
> + }
>  
>   if (!checkonly && prop)
>   {
> @@ -485,8 +513,11 @@ static int wcmSetActionsProperty(DeviceIntPtr dev, Atom 
> property,
>   int size, Atom* handlers, unsigned int 
> (*actions)[256])
>  {
>   InputInfoPtr pInfo = (InputInfoPtr) dev->public.devicePrivate;
> + WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
>   int rc;
>  
> + DBG(10, priv, "\n");
> +
>   if (prop->size != size)
>   return BadValue;
>  
> -- 
> 1.8.1.1
> 
> 
> --
> Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
> much more. Get web development skills now with LearnDevNow -
> 350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
> SALE $99.99 this month only -- learn more at:
> http://p.sf.net/sfu/learnmore_122812
> ___
> Linuxwacom-devel mailing list
> Linuxwacom-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
> 

--
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML

[Linuxwacom-devel] [PATCH 1/8] Improve logging of X property setting

2013-01-17 Thread Jason Gerecke
Sprinkles a few extra DBG() calls into the code to make it a little
easier to track down issues with property-setting code.

Signed-off-by: Jason Gerecke 
---
 src/wcmXCommand.c | 45 ++---
 1 file changed, 38 insertions(+), 7 deletions(-)

diff --git a/src/wcmXCommand.c b/src/wcmXCommand.c
index 922c80f..a2723f5 100644
--- a/src/wcmXCommand.c
+++ b/src/wcmXCommand.c
@@ -367,16 +367,30 @@ static void wcmFindActionHandler(WacomDevicePtr priv, 
Atom property, Atom **hand
}
 }
 
-static int wcmCheckActionProperty(Atom property, XIPropertyValuePtr prop)
+static int wcmCheckActionProperty(WacomDevicePtr priv, Atom property, 
XIPropertyValuePtr prop)
 {
CARD32 *data;
int j;
 
-   if (!property)
+   if (!property) {
+   DBG(5, priv, "WARNING: property == 0\n");
return Success;
+   }
 
-   if (prop->size >= 255 || prop->format != 32 || prop->type != XA_INTEGER)
+   if (prop->size >= 255) {
+   DBG(3, priv, "ERROR: Too many values (%d > 255)\n", prop->size);
return BadMatch;
+   }
+
+   if (prop->format != 32) {
+   DBG(3, priv, "ERROR: Incorrect value format (%d != 32)\n", 
prop->format);
+   return BadMatch;
+   }
+
+   if (prop->type != XA_INTEGER) {
+   DBG(3, priv, "ERROR: Incorrect value type (%d != 
XA_INTEGER)\n", prop->type);
+   return BadMatch;
+   }
 
data = (CARD32*)prop->data;
 
@@ -385,19 +399,25 @@ static int wcmCheckActionProperty(Atom property, 
XIPropertyValuePtr prop)
int code = data[j] & AC_CODE;
int type = data[j] & AC_TYPE;
 
+   DBG(10, priv, "Index %d == %d (type: %d, code: %d)\n", j, 
data[j], type, code);
+
switch(type)
{
case AC_KEY:
break;
case AC_BUTTON:
-   if (code > WCM_MAX_BUTTONS)
+   if (code > WCM_MAX_BUTTONS) {
+   DBG(3, priv, "ERROR: AC_BUTTON code too 
high (%d > %d)\n", code, WCM_MAX_BUTTONS);
return BadValue;
+   }
break;
case AC_DISPLAYTOGGLE:
case AC_MODETOGGLE:
break;
default:
+   DBG(3, priv, "ERROR: Unknown command\n");
return BadValue;
+   break;
}
}
 
@@ -425,11 +445,19 @@ static int wcmSetActionProperty(DeviceIntPtr dev, Atom 
property,
WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
int rc, i;
 
-   DBG(10, priv, "\n");
+   DBG(5, priv, "%s new actions for Atom %d\n", checkonly ? "Checking" : 
"Setting", property);
 
-   rc = wcmCheckActionProperty(property, prop);
-   if (rc != Success)
+   rc = wcmCheckActionProperty(priv, property, prop);
+   if (rc != Success) {
+   char *msg = NULL;
+   switch (rc) {
+   case BadMatch: msg = "BadMatch"; break;
+   case BadValue: msg = "BadValue"; break;
+   default: msg = "UNKNOWN"; break;
+   }
+   DBG(3, priv, "Action validation failed with code %d (%s)\n", 
rc, msg);
return rc;
+   }
 
if (!checkonly && prop)
{
@@ -485,8 +513,11 @@ static int wcmSetActionsProperty(DeviceIntPtr dev, Atom 
property,
  int size, Atom* handlers, unsigned int 
(*actions)[256])
 {
InputInfoPtr pInfo = (InputInfoPtr) dev->public.devicePrivate;
+   WacomDevicePtr priv = (WacomDevicePtr) pInfo->private;
int rc;
 
+   DBG(10, priv, "\n");
+
if (prop->size != size)
return BadValue;
 
-- 
1.8.1.1


--
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
___
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel