On Wed, Mar 30, 2011 at 11:53:45PM -0700, Jason Gerecke wrote: > On Wed, Mar 30, 2011 at 8:57 PM, Peter Hutterer > <[email protected]> wrote: > > On Wed, Mar 30, 2011 at 01:54:41PM -0700, Jason Gerecke wrote: > >> For many commands, improper arguments cause a silent failure. The > >> user is often given no indication if their command succeeded or > >> failed. I've tried to find all the silent "return;" statements and > >> provide some kind of warning message where possible. > >> > >> In some cases I've added in new checks to ensure that we have the > >> correct number of arguments. I've tried to make checks as pedantic > >> as possible, e.g. throwing errors about number of arguments even if > >> the function ignores arguments. > >> > > > > as a follow-up, it would be useful to have fprintf(stderr) replaced by an > > error() function. > > > I wholeheartedly agree, but was having trouble coming up with a good > error() function I liked.
void error(const char *fmt, ...); should do, then you can simply add forward everything to vfprintf. and we can add more later if we need it. Cheers, Peter > > >> Signed-off-by: Jason Gerecke <[email protected]> > >> --- > >> tools/xsetwacom.c | 31 +++++++++++++++++++++++++++++++ > >> 1 files changed, 31 insertions(+), 0 deletions(-) > >> > >> diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c > >> index 41e4ced..337aa88 100644 > >> --- a/tools/xsetwacom.c > >> +++ b/tools/xsetwacom.c > >> @@ -1234,7 +1234,10 @@ static void special_map_property(Display *dpy, > >> XDevice *dev, Atom btnact_prop, i > >> &bytes_after, (unsigned char**)&btnact_data); > >> > >> if (offset > btnact_nitems) > >> + { > >> + fprintf(stderr, "Invalid offset into %s property.\n", > >> XGetAtomName(dpy, btnact_prop)); > >> return; > >> + } > >> > >> if (format == 8 && type == XA_INTEGER) > >> { > >> @@ -1242,7 +1245,10 @@ static void special_map_property(Display *dpy, > >> XDevice *dev, Atom btnact_prop, i > >> * mappings. Convert to 32 bit Atom actions first. > >> */ > >> if (convert_wheel_prop(dpy, dev, btnact_prop)) > >> + { > >> + fprintf(stderr, "Error creating wheel action.\n"); > >> return; > >> + } > >> > >> XGetDeviceProperty(dpy, dev, btnact_prop, 0, 100, False, > >> AnyPropertyType, &type, &format, > >> @@ -1347,6 +1353,12 @@ static void set_xydefault(Display *dpy, XDevice > >> *dev, param_t* param, int argc, > >> unsigned long nitems, bytes_after; > >> long *ldata; > >> > >> + if (argc != 0) > >> + { > >> + fprintf(stderr, "Incorrect number of arguments supplied.\n"); > >> + return; > >> + } > >> + > >> prop = XInternAtom(dpy, param->prop_name, True); > >> if (!prop) > >> { > >> @@ -1632,7 +1644,10 @@ static void get_mode(Display *dpy, XDevice *dev, > >> param_t* param, int argc, char > >> } > >> > >> if (!ndevices) /* device id 0 is reserved and can't be our device */ > >> + { > >> + fprintf(stderr, "Unable to locate device.\n"); > >> return; > >> + } > >> > >> TRACE("Getting mode for device %ld.\n", dev->device_id); > >> > >> @@ -1658,6 +1673,12 @@ static void get_rotate(Display *dpy, XDevice *dev, > >> param_t* param, int argc, cha > >> unsigned char* data; > >> unsigned long nitems, bytes_after; > >> > >> + if (argc != 0) > >> + { > >> + fprintf(stderr, "Incorrect number of arguments supplied.\n"); > >> + return; > >> + } > >> + > >> prop = XInternAtom(dpy, param->prop_name, True); > >> if (!prop) > >> { > >> @@ -1937,7 +1958,11 @@ static void _set_matrix_prop(Display *dpy, XDevice > >> *dev, const float fmatrix[9]) > >> &bytes_after, (unsigned char**)&data); > >> > >> if (format != 32 || type != XInternAtom(dpy, "FLOAT", True)) > >> + { > >> + fprintf(stderr, "Property for '%s' has unexpected type - > >> this is a bug.\n", > >> + "Coordinate Transformation Matrix"); > > > > this should use a define instead of typing the same property name twice.. > > > Good call there. > > > > >> return; > >> + } > >> > >> XChangeDeviceProperty(dpy, dev, matrix_prop, type, format, > >> PropModeReplace, (unsigned char*)matrix, 9); > >> @@ -1954,6 +1979,12 @@ static void set_output(Display *dpy, XDevice *dev, > >> param_t *param, int argc, cha > >> XRROutputInfo *output_info; > >> XRRCrtcInfo *crtc_info; > >> > >> + if (argc != 1) > >> + { > >> + fprintf(stderr, "Incorrect number of arguments supplied.\n"); > >> + return; > >> + } > >> + > >> output_name = argv[0]; > >> > >> if (!XRRQueryExtension(dpy, &maj, &min)) /* using min/maj as dummy */ > >> -- > >> 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 [email protected] https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
