[PATCH] [libc++] Linux: Correctly identify valid error codes
David Majnemer
david.majnemer at gmail.com
Fri May 23 14:36:01 PDT 2014
On Fri, May 23, 2014 at 11:30 AM, Justin Bogner <mail at justinbogner.com>wrote:
> David Majnemer <david.majnemer at gmail.com> writes:
> > [syserr.errcat.objects]p4 specifies that system_category
> > ().default_error_condition(ev) map to error_condition(posv,
> generic_category
> > ()) if ev could map to a POSIX errno.
> >
> > Linux reserves up to and including 4095 for errno values, use this as a
> bound.
> >
> > This fixes syserr.errcat.objects/system_category.pass.cpp on Linux.
>
> Would it be simpler to do something like
>
> #if !defined(ELAST) && defined(__linux__)
> #define ELAST 4095
> #endif
>
> at the top of the file and avoid having to change every #ifdef?
>
I could do that if you wish but invading the POSIX namespace feels
distasteful to me.
>
> >
> > diff --git a/src/ios.cpp b/src/ios.cpp
> > index 03af978..e241394 100644
> > --- a/src/ios.cpp
> > +++ b/src/ios.cpp
> > @@ -56,7 +56,9 @@ __iostream_category::message(int ev) const
> > if (ev != static_cast<int>(io_errc::stream)
> > #ifdef ELAST
> > && ev <= ELAST
> > -#endif
> > +#elif defined(__linux__)
> > + && ev <= 4095
> > +#endif // ELAST
> > )
> > return __do_message::message(ev);
> > return string("unspecified iostream_category error");
> > diff --git a/src/system_error.cpp b/src/system_error.cpp
> > index 00920ff..d5cb2d4 100644
> > --- a/src/system_error.cpp
> > +++ b/src/system_error.cpp
> > @@ -68,6 +68,9 @@ __generic_error_category::message(int ev) const
> > #ifdef ELAST
> > if (ev > ELAST)
> > return string("unspecified generic_category error");
> > +#elif defined(__linux__)
> > + if (ev > 4095)
> > + return string("unspecified generic_category error");
> > #endif // ELAST
> > return __do_message::message(ev);
> > }
> > @@ -100,6 +103,9 @@ __system_error_category::message(int ev) const
> > #ifdef ELAST
> > if (ev > ELAST)
> > return string("unspecified system_category error");
> > +#elif defined(__linux__)
> > + if (ev > 4095)
> > + return string("unspecified system_category error");
> > #endif // ELAST
> > return __do_message::message(ev);
> > }
> > @@ -110,6 +116,9 @@ __system_error_category::default_error_condition(int
> ev) const _NOEXCEPT
> > #ifdef ELAST
> > if (ev > ELAST)
> > return error_condition(ev, system_category());
> > +#elif defined(__linux__)
> > + if (ev > 4095)
> > + return error_condition(ev, system_category());
> > #endif // ELAST
> > return error_condition(ev, generic_category());
> > }
> > diff --git
> a/test/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp
> b/test/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp
> > index ddcb725..b5cb18a 100644
> > ---
> a/test/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp
> > +++
> b/test/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp
> > @@ -23,7 +23,7 @@ int main()
> > std::error_condition e_cond = e_cat1.default_error_condition(5);
> > assert(e_cond.value() == 5);
> > assert(e_cond.category() == std::generic_category());
> > - e_cond = e_cat1.default_error_condition(500);
> > - assert(e_cond.value() == 500);
> > + e_cond = e_cat1.default_error_condition(5000);
> > + assert(e_cond.value() == 5000);
> > assert(e_cond.category() == std::system_category());
> > }
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140523/4a1d991d/attachment.html>
More information about the cfe-commits
mailing list