internal: introduce macro helpers to check flag requirements

Similar to VIR_EXLUSIVE_FLAGS, it will error out if flag requirement is
not met.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Pavel Hrdina 2015-03-25 13:11:38 +01:00
parent e86a94ee4c
commit 0fb03395a0

View File

@ -377,6 +377,53 @@
} \
} while (0)
/* Macros to help dealing with flag requirements. */
/**
* VIR_REQUIRE_FLAG_RET:
*
* @FLAG1: First flag to be checked.
* @FLAG2: Second flag that is required by first flag.
* @RET: Return value.
*
* Check whether required flag is set. The checked flags are compared
* with flags variable.
*
* This helper does an early return and therefore it has to be called
* before anything that would require cleanup.
*/
# define VIR_REQUIRE_FLAG_RET(FLAG1, FLAG2, RET) \
do { \
if ((flags & FLAG1) && !(flags & FLAG2)) { \
virReportInvalidArg(ctl, \
_("Flag '%s' is required by flag '%s'"), \
#FLAG2, #FLAG1); \
return RET; \
} \
} while (0)
/**
* VIR_REQUIRE_FLAG_GOTO:
*
* @FLAG1: First flag to be checked.
* @FLAG2: Second flag that is required by first flag.
* @LABEL: Label to jump to.
*
* Check whether required flag is set. The checked flags are compared
* with flags variable.
*
* Returns nothing. Jumps to a label if required flag is not set.
*/
# define VIR_REQUIRE_FLAG_GOTO(FLAG1, FLAG2, LABEL) \
do { \
if ((flags & FLAG1) && !(flags & FLAG2)) { \
virReportInvalidArg(ctl, \
_("Flag '%s' is required by flag '%s'"), \
#FLAG2, #FLAG1); \
goto LABEL; \
} \
} while (0)
# define virCheckNonNullArgReturn(argname, retval) \
do { \
if (argname == NULL) { \