[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.