Signed-off-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> --- src/internal.h | 295 ++++++++++++++++++++++++------------------------- 1 file changed, 146 insertions(+), 149 deletions(-) diff --git a/src/internal.h b/src/internal.h index 5a868bb00c..f718895460 100644 --- a/src/internal.h +++ b/src/internal.h @@ -18,101 +18,100 @@ * <http://www.gnu.org/licenses/>. */ -#ifndef LIBVIRT_INTERNAL_H -# define LIBVIRT_INTERNAL_H - -# include <errno.h> -# include <limits.h> -# include <verify.h> -# include <stdbool.h> -# include <stdint.h> -# include <stdio.h> -# include <string.h> - -# if STATIC_ANALYSIS -# undef NDEBUG /* Don't let a prior NDEBUG definition cause trouble. */ -# include <assert.h> -# define sa_assert(expr) assert (expr) -# else -# define sa_assert(expr) /* empty */ -# endif +#pragma once + +#include <errno.h> +#include <limits.h> +#include <verify.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> + +#if STATIC_ANALYSIS +# undef NDEBUG /* Don't let a prior NDEBUG definition cause trouble. */ +# include <assert.h> +# define sa_assert(expr) assert (expr) +#else +# define sa_assert(expr) /* empty */ +#endif /* The library itself is allowed to use deprecated functions / * variables, so effectively undefine the deprecated attribute * which would otherwise be defined in libvirt.h. */ -# undef VIR_DEPRECATED -# define VIR_DEPRECATED /*empty*/ +#undef VIR_DEPRECATED +#define VIR_DEPRECATED /*empty*/ /* The library itself needs to know enum sizes. */ -# define VIR_ENUM_SENTINELS - -# ifdef HAVE_LIBINTL_H -# define DEFAULT_TEXT_DOMAIN PACKAGE -# include <libintl.h> -# define _(str) dgettext(PACKAGE, str) -# else /* HAVE_LIBINTL_H */ -# define _(str) str -# endif /* HAVE_LIBINTL_H */ -# define N_(str) str - -# include "libvirt/libvirt.h" -# include "libvirt/libvirt-lxc.h" -# include "libvirt/libvirt-qemu.h" -# include "libvirt/libvirt-admin.h" -# include "libvirt/virterror.h" - -# include "c-strcase.h" -# include "ignore-value.h" -# include "count-leading-zeros.h" +#define VIR_ENUM_SENTINELS + +#ifdef HAVE_LIBINTL_H +# define DEFAULT_TEXT_DOMAIN PACKAGE +# include <libintl.h> +# define _(str) dgettext(PACKAGE, str) +#else /* HAVE_LIBINTL_H */ +# define _(str) str +#endif /* HAVE_LIBINTL_H */ +#define N_(str) str + +#include "libvirt/libvirt.h" +#include "libvirt/libvirt-lxc.h" +#include "libvirt/libvirt-qemu.h" +#include "libvirt/libvirt-admin.h" +#include "libvirt/virterror.h" + +#include "c-strcase.h" +#include "ignore-value.h" +#include "count-leading-zeros.h" /* String equality tests, suggested by Jim Meyering. */ -# define STREQ(a, b) (strcmp(a, b) == 0) -# define STRCASEEQ(a, b) (c_strcasecmp(a, b) == 0) -# define STRNEQ(a, b) (strcmp(a, b) != 0) -# define STRCASENEQ(a, b) (c_strcasecmp(a, b) != 0) -# define STREQLEN(a, b, n) (strncmp(a, b, n) == 0) -# define STRCASEEQLEN(a, b, n) (c_strncasecmp(a, b, n) == 0) -# define STRNEQLEN(a, b, n) (strncmp(a, b, n) != 0) -# define STRCASENEQLEN(a, b, n) (c_strncasecmp(a, b, n) != 0) -# define STRPREFIX(a, b) (strncmp(a, b, strlen(b)) == 0) -# define STRCASEPREFIX(a, b) (c_strncasecmp(a, b, strlen(b)) == 0) -# define STRSKIP(a, b) (STRPREFIX(a, b) ? (a) + strlen(b) : NULL) - -# define STREQ_NULLABLE(a, b) \ +#define STREQ(a, b) (strcmp(a, b) == 0) +#define STRCASEEQ(a, b) (c_strcasecmp(a, b) == 0) +#define STRNEQ(a, b) (strcmp(a, b) != 0) +#define STRCASENEQ(a, b) (c_strcasecmp(a, b) != 0) +#define STREQLEN(a, b, n) (strncmp(a, b, n) == 0) +#define STRCASEEQLEN(a, b, n) (c_strncasecmp(a, b, n) == 0) +#define STRNEQLEN(a, b, n) (strncmp(a, b, n) != 0) +#define STRCASENEQLEN(a, b, n) (c_strncasecmp(a, b, n) != 0) +#define STRPREFIX(a, b) (strncmp(a, b, strlen(b)) == 0) +#define STRCASEPREFIX(a, b) (c_strncasecmp(a, b, strlen(b)) == 0) +#define STRSKIP(a, b) (STRPREFIX(a, b) ? (a) + strlen(b) : NULL) + +#define STREQ_NULLABLE(a, b) \ ((a) ? (b) && STREQ((a), (b)) : !(b)) -# define STRNEQ_NULLABLE(a, b) \ +#define STRNEQ_NULLABLE(a, b) \ ((a) ? !(b) || STRNEQ((a), (b)) : !!(b)) -# define NUL_TERMINATE(buf) do { (buf)[sizeof(buf)-1] = '\0'; } while (0) -# define ARRAY_CARDINALITY(Array) (sizeof(Array) / sizeof(*(Array))) +#define NUL_TERMINATE(buf) do { (buf)[sizeof(buf)-1] = '\0'; } while (0) +#define ARRAY_CARDINALITY(Array) (sizeof(Array) / sizeof(*(Array))) /** * ATTRIBUTE_UNUSED: * * Macro to flag consciously unused parameters to functions */ -# ifndef ATTRIBUTE_UNUSED -# define ATTRIBUTE_UNUSED __attribute__((__unused__)) -# endif +#ifndef ATTRIBUTE_UNUSED +# define ATTRIBUTE_UNUSED __attribute__((__unused__)) +#endif /** * ATTRIBUTE_NORETURN: * * Macro to indicate that a function won't return to the caller */ -# ifndef ATTRIBUTE_NORETURN -# define ATTRIBUTE_NORETURN __attribute__((__noreturn__)) -# endif +#ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__((__noreturn__)) +#endif /** * ATTRIBUTE_SENTINEL: * * Macro to check for NULL-terminated varargs lists */ -# ifndef ATTRIBUTE_SENTINEL -# define ATTRIBUTE_SENTINEL __attribute__((__sentinel__)) -# endif +#ifndef ATTRIBUTE_SENTINEL +# define ATTRIBUTE_SENTINEL __attribute__((__sentinel__)) +#endif /** * ATTRIBUTE_NOINLINE: @@ -120,9 +119,9 @@ * Force compiler not to inline a method. Should be used if * the method need to be overridable by test mocks. */ -# ifndef ATTRIBUTE_NOINLINE -# define ATTRIBUTE_NOINLINE __attribute__((__noinline__)) -# endif +#ifndef ATTRIBUTE_NOINLINE +# define ATTRIBUTE_NOINLINE __attribute__((__noinline__)) +#endif /** * ATTRIBUTE_FMT_PRINTF @@ -134,19 +133,19 @@ * printf format specifiers even on broken Win32 platforms * hence we have to force 'gnu_printf' for new GCC */ -# ifndef ATTRIBUTE_FMT_PRINTF -# ifndef __clang__ -# define ATTRIBUTE_FMT_PRINTF(fmtpos, argpos) \ +#ifndef ATTRIBUTE_FMT_PRINTF +# ifndef __clang__ +# define ATTRIBUTE_FMT_PRINTF(fmtpos, argpos) \ __attribute__((__format__ (__gnu_printf__, fmtpos, argpos))) -# else -# define ATTRIBUTE_FMT_PRINTF(fmtpos, argpos) \ +# else +# define ATTRIBUTE_FMT_PRINTF(fmtpos, argpos) \ __attribute__((__format__ (__printf__, fmtpos, argpos))) -# endif # endif +#endif -# ifndef ATTRIBUTE_RETURN_CHECK -# define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__)) -# endif +#ifndef ATTRIBUTE_RETURN_CHECK +# define ATTRIBUTE_RETURN_CHECK __attribute__((__warn_unused_result__)) +#endif /** * ATTRIBUTE_PACKED @@ -157,9 +156,9 @@ * ethernet packets. * Others compiler than gcc may use something different e.g. #pragma pack(1) */ -# ifndef ATTRIBUTE_PACKED -# define ATTRIBUTE_PACKED __attribute__((packed)) -# endif +#ifndef ATTRIBUTE_PACKED +# define ATTRIBUTE_PACKED __attribute__((packed)) +#endif /* gcc's handling of attribute nonnull is less than stellar - it does * NOT improve diagnostics, and merely allows gcc to optimize away @@ -170,97 +169,97 @@ * based on whether we are compiling for real or for analysis, while * still requiring correct gcc syntax when it is turned off. See also * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17308 */ -# ifndef ATTRIBUTE_NONNULL -# if STATIC_ANALYSIS -# define ATTRIBUTE_NONNULL(m) __attribute__((__nonnull__(m))) -# else -# define ATTRIBUTE_NONNULL(m) __attribute__(()) -# endif +#ifndef ATTRIBUTE_NONNULL +# if STATIC_ANALYSIS +# define ATTRIBUTE_NONNULL(m) __attribute__((__nonnull__(m))) +# else +# define ATTRIBUTE_NONNULL(m) __attribute__(()) # endif +#endif -# ifndef ATTRIBUTE_FALLTHROUGH -# if __GNUC_PREREQ (7, 0) -# define ATTRIBUTE_FALLTHROUGH __attribute__((fallthrough)) -# else -# define ATTRIBUTE_FALLTHROUGH do {} while(0) -# endif +#ifndef ATTRIBUTE_FALLTHROUGH +# if __GNUC_PREREQ (7, 0) +# define ATTRIBUTE_FALLTHROUGH __attribute__((fallthrough)) +# else +# define ATTRIBUTE_FALLTHROUGH do {} while(0) # endif +#endif -# if WORKING_PRAGMA_PUSH -# define VIR_WARNINGS_NO_CAST_ALIGN \ +#if WORKING_PRAGMA_PUSH +# define VIR_WARNINGS_NO_CAST_ALIGN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wcast-align\"") -# define VIR_WARNINGS_NO_DEPRECATED \ +# define VIR_WARNINGS_NO_DEPRECATED \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -# if HAVE_SUGGEST_ATTRIBUTE_FORMAT -# define VIR_WARNINGS_NO_PRINTF \ +# if HAVE_SUGGEST_ATTRIBUTE_FORMAT +# define VIR_WARNINGS_NO_PRINTF \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=format\"") -# else -# define VIR_WARNINGS_NO_PRINTF \ +# else +# define VIR_WARNINGS_NO_PRINTF \ _Pragma ("GCC diagnostic push") -# endif +# endif /* Workaround bogus GCC 6.0 for logical 'or' equal expression warnings. * (GCC bz 69602) */ -# if BROKEN_GCC_WLOGICALOP_EQUAL_EXPR -# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR \ +# if BROKEN_GCC_WLOGICALOP_EQUAL_EXPR +# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wlogical-op\"") -# else -# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR \ +# else +# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR \ _Pragma ("GCC diagnostic push") -# endif +# endif -# define VIR_WARNINGS_RESET \ +# define VIR_WARNINGS_RESET \ _Pragma ("GCC diagnostic pop") -# else -# define VIR_WARNINGS_NO_CAST_ALIGN -# define VIR_WARNINGS_NO_DEPRECATED -# define VIR_WARNINGS_NO_PRINTF -# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR -# define VIR_WARNINGS_RESET -# endif +#else +# define VIR_WARNINGS_NO_CAST_ALIGN +# define VIR_WARNINGS_NO_DEPRECATED +# define VIR_WARNINGS_NO_PRINTF +# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR +# define VIR_WARNINGS_RESET +#endif /* Workaround bogus GCC < 4.6 that produces false -Wlogical-op warnings for * strchr(). Those old GCCs don't support push/pop. */ -# if BROKEN_GCC_WLOGICALOP_STRCHR -# define VIR_WARNINGS_NO_WLOGICALOP_STRCHR \ +#if BROKEN_GCC_WLOGICALOP_STRCHR +# define VIR_WARNINGS_NO_WLOGICALOP_STRCHR \ _Pragma ("GCC diagnostic ignored \"-Wlogical-op\"") -# else -# define VIR_WARNINGS_NO_WLOGICALOP_STRCHR -# endif +#else +# define VIR_WARNINGS_NO_WLOGICALOP_STRCHR +#endif /* * Use this when passing possibly-NULL strings to printf-a-likes. */ -# define NULLSTR(s) ((s) ? (s) : "<null>") +#define NULLSTR(s) ((s) ? (s) : "<null>") /* * Turn a NULL string into an empty string */ -# define NULLSTR_EMPTY(s) ((s) ? (s) : "") +#define NULLSTR_EMPTY(s) ((s) ? (s) : "") /* * Turn a NULL string into a star */ -# define NULLSTR_STAR(s) ((s) ? (s) : "*") +#define NULLSTR_STAR(s) ((s) ? (s) : "*") /* * Turn a NULL string into a minus sign */ -# define NULLSTR_MINUS(s) ((s) ? (s) : "-") +#define NULLSTR_MINUS(s) ((s) ? (s) : "-") /** * SWAP: * * In place exchange of two values */ -# define SWAP(a, b) \ +#define SWAP(a, b) \ do { \ (a) = (a) ^ (b); \ (b) = (a) ^ (b); \ @@ -273,7 +272,7 @@ * Steals pointer passed as second argument into the first argument. Second * argument must not have side effects. */ -# define VIR_STEAL_PTR(a, b) \ +#define VIR_STEAL_PTR(a, b) \ do { \ (a) = (b); \ (b) = NULL; \ @@ -287,7 +286,7 @@ * freed by using VIR_AUTOPTR can be easily passed back to the caller without * any temporary variable. @ptr is evaluated more than once. */ -# define VIR_RETURN_PTR(ptr) \ +#define VIR_RETURN_PTR(ptr) \ do { \ typeof(ptr) virTemporaryReturnPointer = (ptr); \ (ptr) = NULL; \ @@ -305,7 +304,7 @@ * Returns nothing. Exits the caller function if unsupported flags were * passed to it. */ -# define virCheckFlags(supported, retval) \ +#define virCheckFlags(supported, retval) \ do { \ unsigned long __unsuppflags = flags & ~(supported); \ if (__unsuppflags) { \ @@ -327,7 +326,7 @@ * Returns nothing. Jumps to a label if unsupported flags were * passed to it. */ -# define virCheckFlagsGoto(supported, label) \ +#define virCheckFlagsGoto(supported, label) \ do { \ unsigned long __unsuppflags = flags & ~(supported); \ if (__unsuppflags) { \ @@ -353,7 +352,7 @@ * This helper does an early return and therefore it has to be called * before anything that would require cleanup. */ -# define VIR_EXCLUSIVE_FLAGS_RET(FLAG1, FLAG2, RET) \ +#define VIR_EXCLUSIVE_FLAGS_RET(FLAG1, FLAG2, RET) \ do { \ if ((flags & FLAG1) && (flags & FLAG2)) { \ virReportInvalidArg(ctl, \ @@ -377,7 +376,7 @@ * Returns nothing. Jumps to a label if unsupported flags were * passed to it. */ -# define VIR_EXCLUSIVE_FLAGS_GOTO(FLAG1, FLAG2, LABEL) \ +#define VIR_EXCLUSIVE_FLAGS_GOTO(FLAG1, FLAG2, LABEL) \ do { \ if ((flags & FLAG1) && (flags & FLAG2)) { \ virReportInvalidArg(ctl, \ @@ -403,7 +402,7 @@ * 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) \ +#define VIR_REQUIRE_FLAG_RET(FLAG1, FLAG2, RET) \ do { \ if ((flags & FLAG1) && !(flags & FLAG2)) { \ virReportInvalidArg(ctl, \ @@ -425,7 +424,7 @@ * * Returns nothing. Jumps to a label if required flag is not set. */ -# define VIR_REQUIRE_FLAG_GOTO(FLAG1, FLAG2, LABEL) \ +#define VIR_REQUIRE_FLAG_GOTO(FLAG1, FLAG2, LABEL) \ do { \ if ((flags & FLAG1) && !(flags & FLAG2)) { \ virReportInvalidArg(ctl, \ @@ -435,28 +434,28 @@ } \ } while (0) -# define virCheckNonNullArgReturn(argname, retval) \ +#define virCheckNonNullArgReturn(argname, retval) \ do { \ if (argname == NULL) { \ virReportInvalidNonNullArg(argname); \ return retval; \ } \ } while (0) -# define virCheckNullArgGoto(argname, label) \ +#define virCheckNullArgGoto(argname, label) \ do { \ if (argname != NULL) { \ virReportInvalidNullArg(argname); \ goto label; \ } \ } while (0) -# define virCheckNonNullArgGoto(argname, label) \ +#define virCheckNonNullArgGoto(argname, label) \ do { \ if (argname == NULL) { \ virReportInvalidNonNullArg(argname); \ goto label; \ } \ } while (0) -# define virCheckNonEmptyStringArgGoto(argname, label) \ +#define virCheckNonEmptyStringArgGoto(argname, label) \ do { \ if (argname == NULL) { \ virReportInvalidNonNullArg(argname); \ @@ -467,42 +466,42 @@ goto label; \ } \ } while (0) -# define virCheckPositiveArgGoto(argname, label) \ +#define virCheckPositiveArgGoto(argname, label) \ do { \ if (argname <= 0) { \ virReportInvalidPositiveArg(argname); \ goto label; \ } \ } while (0) -# define virCheckPositiveArgReturn(argname, retval) \ +#define virCheckPositiveArgReturn(argname, retval) \ do { \ if (argname <= 0) { \ virReportInvalidPositiveArg(argname); \ return retval; \ } \ } while (0) -# define virCheckNonZeroArgGoto(argname, label) \ +#define virCheckNonZeroArgGoto(argname, label) \ do { \ if (argname == 0) { \ virReportInvalidNonZeroArg(argname); \ goto label; \ } \ } while (0) -# define virCheckZeroArgGoto(argname, label) \ +#define virCheckZeroArgGoto(argname, label) \ do { \ if (argname != 0) { \ virReportInvalidNonZeroArg(argname); \ goto label; \ } \ } while (0) -# define virCheckNonNegativeArgGoto(argname, label) \ +#define virCheckNonNegativeArgGoto(argname, label) \ do { \ if (argname < 0) { \ virReportInvalidNonNegativeArg(argname); \ goto label; \ } \ } while (0) -# define virCheckReadOnlyGoto(flags, label) \ +#define virCheckReadOnlyGoto(flags, label) \ do { \ if ((flags) & VIR_CONNECT_RO) { \ virReportRestrictedError(_("read only access prevents %s"), \ @@ -514,14 +513,14 @@ /* divide value by size, rounding up */ -# define VIR_DIV_UP(value, size) (((value) + (size) - 1) / (size)) +#define VIR_DIV_UP(value, size) (((value) + (size) - 1) / (size)) /* round up value to the closest multiple of size */ -# define VIR_ROUND_UP(value, size) (VIR_DIV_UP(value, size) * (size)) +#define VIR_ROUND_UP(value, size) (VIR_DIV_UP(value, size) * (size)) /* Round up to the next closest power of 2. It will return rounded number or 0 * for 0 or number more than 2^31 (for 32bit unsigned int). */ -# define VIR_ROUND_UP_POWER_OF_TWO(value) \ +#define VIR_ROUND_UP_POWER_OF_TWO(value) \ ((value) > 0 && (value) <= 1U << (sizeof(unsigned int) * 8 - 1) ? \ 1U << (sizeof(unsigned int) * 8 - count_leading_zeros((value) - 1)) : 0) @@ -534,8 +533,6 @@ enum { EXIT_ENOENT = 127, /* Could not find program to exec */ }; -# ifndef ENODATA -# define ENODATA EIO -# endif - -#endif /* LIBVIRT_INTERNAL_H */ +#ifndef ENODATA +# define ENODATA EIO +#endif -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list