When setting an XInternAtom property, 'prop_extra' listed
the number of extra properties beyond the first that needed
to be set. For instance WACOM_PROP_TABLET_AREA had a total
of 4 properties, so prop_extra=3.

To provide better argument validation though, we change this
to 'arg_count' and list the total number of arguments
expected. This doesn't really do anything for normal properties
(since arg_count = prop_extra + 1), but does let us check
for the proper number of arguments in odd cases (e.g.
ResetArea takes 0 arguments).

Signed-off-by: Jason Gerecke <killert...@gmail.com>
---
 tools/xsetwacom.c |   40 +++++++++++++++++++++++++++++++++-------
 1 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c
index 4194781..ae35996 100644
--- a/tools/xsetwacom.c
+++ b/tools/xsetwacom.c
@@ -86,7 +86,7 @@ typedef struct _param
        const char *prop_name;  /* property name */
        const int prop_format;  /* property format */
        const int prop_offset;  /* offset (index) into the property values */
-       const int prop_extra;   /* extra number of items after first one */
+       const int arg_count;   /* extra number of items after first one */
        const unsigned int prop_flags;
        void (*set_func)(Display *dpy, XDevice *dev, struct _param *param, int 
argc, char **argv); /* handler function, if appropriate */
        void (*get_func)(Display *dpy, XDevice *dev, struct _param *param, int 
argc, char **argv); /* handler function for getting, if appropriate */
@@ -120,12 +120,13 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_TABLET_AREA,
                .prop_format = 32,
                .prop_offset = 0,
-               .prop_extra = 3
+               .arg_count = 4,
        },
        {
                .name = "Button",
                .desc = "X11 event to which the given button should be mapped. 
",
                .prop_name = WACOM_PROP_BUTTON_ACTIONS,
+               .arg_count = 1,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -136,6 +137,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_DEBUGLEVELS,
                .prop_format = 8,
                .prop_offset = 0,
+               .arg_count = 1,
        },
        {
                .name = "TabletDebugLevel",
@@ -145,6 +147,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_DEBUGLEVELS,
                .prop_format = 8,
                .prop_offset = 1,
+               .arg_count = 1,
        },
        {
                .name = "Suppress",
@@ -152,6 +155,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_SAMPLE,
                .prop_format = 32,
                .prop_offset = 0,
+               .arg_count = 1,
        },
        {
                .name = "RawSample",
@@ -160,6 +164,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_SAMPLE,
                .prop_format = 32,
                .prop_offset = 1,
+               .arg_count = 1,
        },
        {
                .name = "PressureCurve",
@@ -167,11 +172,12 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_PRESSURECURVE,
                .prop_format = 32,
                .prop_offset = 0,
-               .prop_extra = 3,
+               .arg_count = 4,
        },
        {
                .name = "Mode",
                .desc = "Switches cursor movement mode (default is absolute). ",
+               .arg_count = 1,
                .set_func = set_mode,
                .get_func = get_mode,
        },
@@ -183,6 +189,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_HOVER,
                .prop_format = 8,
                .prop_offset = 0,
+               .arg_count = 1,
                .prop_flags = PROP_FLAG_BOOLEAN
        },
        {
@@ -191,6 +198,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_TOUCH,
                .prop_format = 8,
                .prop_offset = 0,
+               .arg_count = 1,
                .prop_flags = PROP_FLAG_BOOLEAN
        },
        {
@@ -200,6 +208,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_ENABLE_GESTURE,
                .prop_format = 8,
                .prop_offset = 0,
+               .arg_count = 1,
                .prop_flags = PROP_FLAG_BOOLEAN
        },
        {
@@ -209,6 +218,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_GESTURE_PARAMETERS,
                .prop_format = 32,
                .prop_offset = 0,
+               .arg_count = 1,
        },
        {
                .name = "ScrollDistance",
@@ -217,6 +227,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_GESTURE_PARAMETERS,
                .prop_format = 32,
                .prop_offset = 1,
+               .arg_count = 1,
        },
        {
                .name = "TapTime",
@@ -225,6 +236,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_GESTURE_PARAMETERS,
                .prop_format = 32,
                .prop_offset = 2,
+               .arg_count = 1,
        },
        {
                .name = "Capacity",
@@ -233,6 +245,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_CAPACITY,
                .prop_format = 32,
                .prop_offset = 0,
+               .arg_count = 1,
        },
        {
                .name = "CursorProximity",
@@ -243,6 +256,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_PROXIMITY_THRESHOLD,
                .prop_format = 32,
                .prop_offset = 0,
+               .arg_count = 1,
        },
        {
                .name = "Rotate",
@@ -251,6 +265,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_ROTATION,
                .set_func = set_rotate,
                .get_func = get_rotate,
+               .arg_count = 1,
        },
        {
                .name = "RelWheelUp",
@@ -258,6 +273,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_WHEELBUTTONS,
                .prop_format = 8,
                .prop_offset = 0,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -267,6 +283,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_WHEELBUTTONS,
                .prop_format = 8,
                .prop_offset = 1,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -276,6 +293,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_WHEELBUTTONS,
                .prop_format = 8,
                .prop_offset = 2,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -285,6 +303,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_WHEELBUTTONS,
                .prop_format = 8,
                .prop_offset = 3,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -294,6 +313,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_STRIPBUTTONS,
                .prop_format = 8,
                .prop_offset = 0,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -303,6 +323,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_STRIPBUTTONS,
                .prop_format = 8,
                .prop_offset = 1,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -312,6 +333,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_STRIPBUTTONS,
                .prop_format = 8,
                .prop_offset = 2,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -321,6 +343,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_STRIPBUTTONS,
                .prop_format = 8,
                .prop_offset = 3,
+               .arg_count = 0,
                .set_func = map_actions,
                .get_func = get_map,
        },
@@ -331,6 +354,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_PRESSURE_THRESHOLD,
                .prop_format = 32,
                .prop_offset = 0,
+               .arg_count = 1,
        },
        {
                .name = "ResetArea",
@@ -338,6 +362,7 @@ static param_t parameters[] =
                .prop_name = WACOM_PROP_TABLET_AREA,
                .prop_format = 32,
                .prop_offset = 0,
+               .arg_count = 0,
                .prop_flags = PROP_FLAG_WRITEONLY,
                .set_func = set_xydefault,
        },
@@ -369,6 +394,7 @@ static param_t parameters[] =
                .name = "MapToOutput",
                .desc = "Map the device to the given output. ",
                .set_func = set_output,
+               .arg_count = 1,
                .prop_flags = PROP_FLAG_WRITEONLY
        },
        {
@@ -2159,7 +2185,7 @@ static void get_param(Display *dpy, XDevice *dev, param_t 
*param, int argc, char
        switch(param->prop_format)
        {
                case 8:
-                       for (i = 0; i < 1 + param->prop_extra; i++)
+                       for (i = 0; i < param->arg_count; i++)
                        {
                                int val = data[param->prop_offset + i];
 
@@ -2168,18 +2194,18 @@ static void get_param(Display *dpy, XDevice *dev, 
param_t *param, int argc, char
                                else
                                        sprintf(&str[strlen(str)], "%d", val);
 
-                               if (i < param->prop_extra)
+                               if (i < param->arg_count - 1)
                                        strcat(str, " ");
                        }
                        print_value(param, "%s", str);
                        break;
                case 32:
-                       for (i = 0; i < 1 + param->prop_extra; i++)
+                       for (i = 0; i < param->arg_count; i++)
                        {
                                long *ldata = (long*)data;
                                sprintf(&str[strlen(str)], "%ld", 
ldata[param->prop_offset + i]);
 
-                               if (i < param->prop_extra)
+                               if (i < param->arg_count - 1)
                                        strcat(str, " ");
                        }
                        print_value(param, "%s", str);
-- 
1.7.4.1


------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and 
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to