[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 |