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