|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/4] xen/errno: Reduce complexity of inclusion
On 3/1/16 12:57 PM, Andrew Cooper wrote:
> The inclusion rules conditions for errno.h were unnecesserily complicated, and
> required the includer to jump through hoops if they wished to avoid getting
> multiple namespaces worth of constants.
>
> Vastly simply the logic, and document what is going on.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Doug Goldstein <cardoe@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Tim Deegan <tim@xxxxxxx>
> CC: Doug Goldstein <cardoe@xxxxxxxxxx>
> ---
> xen/include/public/errno.h | 55
> ++++++++++++++++++++++++++++++----------------
> xen/include/xen/errno.h | 6 ++---
> 2 files changed, 38 insertions(+), 23 deletions(-)
>
> diff --git a/xen/include/public/errno.h b/xen/include/public/errno.h
> index dbac396..fa375be 100644
> --- a/xen/include/public/errno.h
> +++ b/xen/include/public/errno.h
> @@ -1,20 +1,36 @@
> -#ifndef __XEN_PUBLIC_ERRNO_H__
> -
> -#ifndef __ASSEMBLY__
> -
> -#define XEN_ERRNO(name, value) XEN_##name = value,
> -enum xen_errno {
> +/*
> + * There are two expected ways of including this header.
> + *
> + * 1) The "default" case (expected from tools etc).
> + *
> + * Simply #include <public/errno.h>
> + *
> + * In this circumstance, normal header guards apply and the includer shall
> get
> + * an enumeration in the XEN_xxx namespace.
> + *
> + * 2) The special case where the includer provides a XEN_ERRNO() in scope.
> + *
> + * In this case, no inclusion guards apply and the caller is responsible for
> + * their XEN_ERRNO() being appropriate in the included context.
> + */
>
> -#else /* !__ASSEMBLY__ */
> +#ifndef XEN_ERRNO
>
> -#define XEN_ERRNO(name, value) .equ XEN_##name, value
> +/*
> + * Includer has not provided a custom XEN_ERRNO(). Arrange an automatic enum
> + * and constants in the XEN_xxx namespace.
> + */
> +#define XEN_ERRNO_DEFAULT_INCLUDE
>
> -#endif /* __ASSEMBLY__ */
> +#ifndef __XEN_PUBLIC_ERRNO_H__
> +#define __XEN_PUBLIC_ERRNO_H__
>
> -/* ` enum neg_errnoval { [ -Efoo for each Efoo in the list below ] } */
> -/* ` enum errnoval { */
> +#define XEN_ERRNO(name, value) XEN_##name = value,
> +enum {
>
> #endif /* __XEN_PUBLIC_ERRNO_H__ */
> +#endif /* !XEN_ERRNO */
> +
>
> #ifdef XEN_ERRNO
>
> @@ -82,16 +98,17 @@ XEN_ERRNO(EISCONN, 106) /* Transport endpoint
> is already connected */
> XEN_ERRNO(ENOTCONN, 107) /* Transport endpoint is not connected */
> XEN_ERRNO(ETIMEDOUT, 110) /* Connection timed out */
>
> -#undef XEN_ERRNO
> #endif /* XEN_ERRNO */
>
> -#ifndef __XEN_PUBLIC_ERRNO_H__
> -#define __XEN_PUBLIC_ERRNO_H__
>
> -/* ` } */
> +#ifdef XEN_ERRNO_DEFAULT_INCLUDE
>
> -#ifndef __ASSEMBLY__
> -};
> -#endif
> +/*
> + * Clean up from a default include. Close the enum and remove the default
> + * XEN_ERRNO from scope.
> + */
> +#undef XEN_ERRNO_DEFAULT_INCLUDE
> +#undef XEN_ERRNO
> +} ;
>
> -#endif /* __XEN_PUBLIC_ERRNO_H__ */
> +#endif /* XEN_ERRNO_DEFAULT_INCLUDE */
> diff --git a/xen/include/xen/errno.h b/xen/include/xen/errno.h
> index 3178466..69b28dd 100644
> --- a/xen/include/xen/errno.h
> +++ b/xen/include/xen/errno.h
> @@ -1,18 +1,16 @@
> #ifndef __XEN_ERRNO_H__
> #define __XEN_ERRNO_H__
>
> -#include <public/errno.h>
> -
> #ifndef __ASSEMBLY__
>
> -#define XEN_ERRNO(name, value) name = XEN_##name,
> +#define XEN_ERRNO(name, value) name = value,
> enum {
> #include <public/errno.h>
> };
>
> #else /* !__ASSEMBLY__ */
>
> -#define XEN_ERRNO(name, value) .equ name, XEN_##name
> +#define XEN_ERRNO(name, value) .equ name, value
> #include <public/errno.h>
>
> #endif /* __ASSEMBLY__ */
>
--
Doug Goldstein
Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |