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