root/usr/src/tools/smatch/src/compat-solaris.c
#include "lib.h"
#include "allocate.h"

#include "compat/mmap-blob.c"

#include <floatingpoint.h>
#include <limits.h>
#include <errno.h>

long double string_to_ld(const char *str, char **endptr)
{
        long double res;
        decimal_record dr;
        enum decimal_string_form form;
        decimal_mode dm;
        fp_exception_field_type excp;
        char *echar;

        string_to_decimal ((char **)&str, INT_MAX, 0,
                           &dr, &form, &echar);
        if (endptr) *endptr = (char *)str;

        if (form == invalid_form) {
                errno = EINVAL;
                return 0.0;
        }

        dm.rd = fp_nearest;
        decimal_to_quadruple (&res, &dm, &dr, &excp);
        if (excp & ((1 << fp_overflow) | (1 << fp_underflow)))
                errno = ERANGE;
        return res;
}