]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
virsh: Introduce macros to reject mutually exclusive arguments
authorPeter Krempa <pkrempa@redhat.com>
Thu, 7 Mar 2013 09:16:20 +0000 (10:16 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 21 Mar 2013 11:32:03 +0000 (12:32 +0100)
This patch adds three macros to the virsh source tree that help to
easily check for mutually exclusive parameters.

VSH_EXCLUSIVE_OPTIONS_EXPR has four arguments, two expressions to check
and two names of the parameters to print in the message.

VSH_EXCLUSIVE_OPTIONS is more specific and check the command structure
for the parameters using vshCommandOptBool.

VSH_EXCLUSIVE_OPTIONS_VAR is meant to check boolean variables with the
same name as the parameters.

po/POTFILES.in
tools/virsh.h

index 24cec1e6364a7e8808a776d9696e0059351cae56..91e5c025c5844dbfe79d3f48701813d111225000 100644 (file)
@@ -207,6 +207,7 @@ src/xenxs/xen_xm.c
 tools/console.c
 tools/libvirt-guests.sh.in
 tools/virsh.c
+tools/virsh.h
 tools/virsh-domain-monitor.c
 tools/virsh-domain.c
 tools/virsh-edit.c
index fec9785fe708be6636d7540fe0660eb84916874e..a407428c5dce12742018af67a8432702c5660262 100644 (file)
@@ -375,4 +375,55 @@ char *_vshStrdup(vshControl *ctl, const char *s, const char *filename,
 # define realloc use_vshRealloc_instead_of_realloc
 # define strdup use_vshStrdup_instead_of_strdup
 
+/* Macros to help dealing with mutually exclusive options. */
+
+/* VSH_EXCLUSIVE_OPTIONS_EXPR:
+ *
+ * @NAME1: String containing the name of the option.
+ * @EXPR1: Expression to validate the variable (boolean variable)
+ * @NAME2: String containing the name of the option.
+ * @EXPR2: Expression to validate the variable (boolean variable)
+ *
+ * Reject mutually exclusive command options in virsh. Use the
+ * provided expression to check the variables.
+ *
+ * This helper does an early return and therefore it has to be called
+ * before anything that would require cleanup.
+ */
+# define VSH_EXCLUSIVE_OPTIONS_EXPR(NAME1, EXPR1, NAME2, EXPR2)             \
+    if ((EXPR1) && (EXPR2)) {                                               \
+        vshError(ctl, _("Options --%s and --%s are mutually exclusive"),    \
+                 NAME1, NAME2);                                             \
+        return false;                                                       \
+    }
+
+/* VSH_EXCLUSIVE_OPTIONS:
+ *
+ * @NAME1: String containing the name of the option.
+ * @NAME2: String containing the name of the option.
+ *
+ * Reject mutually exclusive command options in virsh. Use the
+ * vshCommandOptBool call to request them.
+ *
+ * This helper does an early return and therefore it has to be called
+ * before anything that would require cleanup.
+ */
+# define VSH_EXCLUSIVE_OPTIONS(NAME1, NAME2)                                \
+    VSH_EXCLUSIVE_OPTIONS_EXPR(NAME1, vshCommandOptBool(cmd, NAME1),        \
+                               NAME2, vshCommandOptBool(cmd, NAME2))
+
+/* VSH_EXCLUSIVE_OPTIONS_VAR:
+ *
+ * @VARNAME1: Boolean variable containing the value of the option of same name
+ * @VARNAME2: Boolean variable containing the value of the option of same name
+ *
+ * Reject mutually exclusive command options in virsh. Check in variables that
+ * contain the value and have same name as the option.
+ *
+ * This helper does an early return and therefore it has to be called
+ * before anything that would require cleanup.
+ */
+# define VSH_EXCLUSIVE_OPTIONS_VAR(VARNAME1, VARNAME2)                      \
+    VSH_EXCLUSIVE_OPTIONS_EXPR(#VARNAME1, VARNAME1, #VARNAME2, VARNAME2)
+
 #endif /* VIRSH_H */