Changeset c5b2b05 in mainline


Ignore:
Timestamp:
2018-07-05T21:41:19Z (6 years ago)
Author:
Dzejrou <dzejrou@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6c242c3
Parents:
8d0953f
git-author:
Dzejrou <dzejrou@…> (2018-01-05 23:03:21)
git-committer:
Dzejrou <dzejrou@…> (2018-07-05 21:41:19)
Message:

cpp: fixed error handling in num_get parsing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/cpp/include/internal/locale/num_get.hpp

    r8d0953f rc5b2b05  
    3636#include <limits>
    3737
     38extern "C" {
     39#include <errno.h>
     40}
     41
    3842namespace std
    3943{
     
    281285            template<class BaseType, class T>
    282286            iter_type get_integral_(iter_type in, iter_type end, ios_base& base,
    283                                     ios_base::iostate err, T& v) const
     287                                    ios_base::iostate& err, T& v) const
    284288            {
    285289                BaseType res{};
     
    295299                if (size > 0)
    296300                {
     301                    int ret{};
    297302                    if constexpr (is_signed<BaseType>::value)
    298                         str_int64_t(base.buffer_, nullptr, num_base, false, &res);
    299                     else
    300                         str_uint64_t(base.buffer_, nullptr, num_base, false, &res);
    301 
    302                     if (res > static_cast<BaseType>(numeric_limits<T>::max()))
     303                        ret = str_int64_t(base.buffer_, nullptr, num_base, false, &res);
     304                    else
     305                        ret = str_uint64_t(base.buffer_, nullptr, num_base, false, &res);
     306
     307                    if (ret != EOK)
     308                    {
     309                        err |= ios_base::failbit;
     310                        v = 0;
     311                    }
     312                    else if (res > static_cast<BaseType>(numeric_limits<T>::max()))
    303313                    {
    304314                        err |= ios_base::failbit;
Note: See TracChangeset for help on using the changeset viewer.