|
[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 01.03.16 at 19:57, <andrew.cooper3@xxxxxxxxxx> 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.
Nice. While the enforcement of the creation of the XEN_* variants
was intentional, you're right that it's not really necessary.
> --- 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
This eliminates the default creation of equates in the assembly
case, which - with the header being part of 4.6.x - we can't do.
> @@ -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
> +} ;
Stray blank.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |