The internal implementation of the string to float function previously used pointer arguments for returning several values. Additionally it set errno in several unexpected places. Now all of that goes through return structs. For readability I also moved the function away from raw pointer arithmetic towards proper indexing. I also added support for rounding modes. Reviewed By: sivachandra Differential Revision: https://reviews.llvm.org/D144597
25 lines
737 B
C++
25 lines
737 B
C++
//===-- Implementation of atof --------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "src/stdlib/atof.h"
|
|
#include "src/__support/common.h"
|
|
#include "src/__support/str_to_float.h"
|
|
#include <errno.h>
|
|
|
|
namespace __llvm_libc {
|
|
|
|
LLVM_LIBC_FUNCTION(double, atof, (const char *str)) {
|
|
auto result = internal::strtofloatingpoint<double>(str);
|
|
if (result.has_error())
|
|
errno = result.error;
|
|
|
|
return result.value;
|
|
}
|
|
|
|
} // namespace __llvm_libc
|