staging: comedi: comedi_fc.h: introduce new helpers for do_cmdtest step 3
authorH Hartley Sweeten <hartleys@visionengravers.com>
Wed, 14 Nov 2012 00:48:03 +0000 (17:48 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Nov 2012 00:23:01 +0000 (16:23 -0800)
Step 3 of the do_cmdtest functions validates the arguments for the
command to be executed. Most of these are simple tests to see if the
argument "is" a value, a "min" value, or a "max" value. Each of these
tests then clamps the argument to the value if it fails the test.

Introduce three new helper functions in comedi_fc.h to handle these
tests and remove the boilerplate code from the drivers.

The new helper functions are:

cfc_check_trigger_arg_is()  - argument must be == the value
cfc_check_trigger_arg_min() - argument must be >= the value
cfc_check_trigger_arg_max() - argument must be <= the value

All of these helpers set the argument to the value and return -EINVAL
if the validation fails.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/comedi_fc.h

index 94481c637a0ae004cda259e52fae89746193c8f7..31afab79f39a250b96dbce524bedc0e0b9ed8c1a 100644 (file)
@@ -105,4 +105,48 @@ static inline int cfc_check_trigger_is_unique(unsigned int src)
        return 0;
 }
 
+/**
+ * cfc_check_trigger_arg_is() - trivially validate a trigger argument
+ * @arg: pointer to the trigger arg to validate
+ * @val: the value the argument should be
+ */
+static inline int cfc_check_trigger_arg_is(unsigned int *arg, unsigned int val)
+{
+       if (*arg != val) {
+               *arg = val;
+               return -EINVAL;
+       }
+       return 0;
+}
+
+/**
+ * cfc_check_trigger_arg_min() - trivially validate a trigger argument
+ * @arg: pointer to the trigger arg to validate
+ * @val: the minimum value the argument should be
+ */
+static inline int cfc_check_trigger_arg_min(unsigned int *arg,
+                                           unsigned int val)
+{
+       if (*arg < val) {
+               *arg = val;
+               return -EINVAL;
+       }
+       return 0;
+}
+
+/**
+ * cfc_check_trigger_arg_max() - trivially validate a trigger argument
+ * @arg: pointer to the trigger arg to validate
+ * @val: the maximum value the argument should be
+ */
+static inline int cfc_check_trigger_arg_max(unsigned int *arg,
+                                           unsigned int val)
+{
+       if (*arg > val) {
+               *arg = val;
+               return -EINVAL;
+       }
+       return 0;
+}
+
 #endif /* _COMEDI_FC_H */