Linux: Correctly identify valid error codes
[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. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@209795 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -56,7 +56,9 @@ __iostream_category::message(int ev) const
|
|||||||
if (ev != static_cast<int>(io_errc::stream)
|
if (ev != static_cast<int>(io_errc::stream)
|
||||||
#ifdef ELAST
|
#ifdef ELAST
|
||||||
&& ev <= ELAST
|
&& ev <= ELAST
|
||||||
#endif
|
#elif defined(__linux__)
|
||||||
|
&& ev <= 4095
|
||||||
|
#endif // ELAST
|
||||||
)
|
)
|
||||||
return __do_message::message(ev);
|
return __do_message::message(ev);
|
||||||
return string("unspecified iostream_category error");
|
return string("unspecified iostream_category error");
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ __generic_error_category::message(int ev) const
|
|||||||
#ifdef ELAST
|
#ifdef ELAST
|
||||||
if (ev > ELAST)
|
if (ev > ELAST)
|
||||||
return string("unspecified generic_category error");
|
return string("unspecified generic_category error");
|
||||||
|
#elif defined(__linux__)
|
||||||
|
if (ev > 4095)
|
||||||
|
return string("unspecified generic_category error");
|
||||||
#endif // ELAST
|
#endif // ELAST
|
||||||
return __do_message::message(ev);
|
return __do_message::message(ev);
|
||||||
}
|
}
|
||||||
@@ -100,6 +103,9 @@ __system_error_category::message(int ev) const
|
|||||||
#ifdef ELAST
|
#ifdef ELAST
|
||||||
if (ev > ELAST)
|
if (ev > ELAST)
|
||||||
return string("unspecified system_category error");
|
return string("unspecified system_category error");
|
||||||
|
#elif defined(__linux__)
|
||||||
|
if (ev > 4095)
|
||||||
|
return string("unspecified system_category error");
|
||||||
#endif // ELAST
|
#endif // ELAST
|
||||||
return __do_message::message(ev);
|
return __do_message::message(ev);
|
||||||
}
|
}
|
||||||
@@ -110,6 +116,9 @@ __system_error_category::default_error_condition(int ev) const _NOEXCEPT
|
|||||||
#ifdef ELAST
|
#ifdef ELAST
|
||||||
if (ev > ELAST)
|
if (ev > ELAST)
|
||||||
return error_condition(ev, system_category());
|
return error_condition(ev, system_category());
|
||||||
|
#elif defined(__linux__)
|
||||||
|
if (ev > 4095)
|
||||||
|
return error_condition(ev, system_category());
|
||||||
#endif // ELAST
|
#endif // ELAST
|
||||||
return error_condition(ev, generic_category());
|
return error_condition(ev, generic_category());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ int main()
|
|||||||
std::error_condition e_cond = e_cat1.default_error_condition(5);
|
std::error_condition e_cond = e_cat1.default_error_condition(5);
|
||||||
assert(e_cond.value() == 5);
|
assert(e_cond.value() == 5);
|
||||||
assert(e_cond.category() == std::generic_category());
|
assert(e_cond.category() == std::generic_category());
|
||||||
e_cond = e_cat1.default_error_condition(500);
|
e_cond = e_cat1.default_error_condition(5000);
|
||||||
assert(e_cond.value() == 500);
|
assert(e_cond.value() == 5000);
|
||||||
assert(e_cond.category() == std::system_category());
|
assert(e_cond.category() == std::system_category());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user