llvm-project

Форк
0
/
strfroml.cpp 
44 строки · 1.3 Кб
1
//===-- Implementation of strfroml ------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8

9
#include "src/stdlib/strfroml.h"
10
#include "src/stdlib/str_from_util.h"
11

12
namespace LIBC_NAMESPACE {
13

14
LLVM_LIBC_FUNCTION(int, strfroml,
15
                   (char *__restrict s, size_t n, const char *__restrict format,
16
                    long double fp)) {
17
  LIBC_ASSERT(s != nullptr);
18

19
  printf_core::FormatSection section =
20
      internal::parse_format_string(format, fp);
21

22
  // To ensure that the conversion function actually uses long double,
23
  // the length modifier has to be set to LenghtModifier::L
24
  section.length_modifier = printf_core::LengthModifier::L;
25

26
  printf_core::WriteBuffer wb(s, (n > 0 ? n - 1 : 0));
27
  printf_core::Writer writer(&wb);
28

29
  int result = 0;
30
  if (section.has_conv)
31
    result = internal::strfromfloat_convert<long double>(&writer, section);
32
  else
33
    result = writer.write(section.raw_string);
34

35
  if (result < 0)
36
    return result;
37

38
  if (n > 0)
39
    wb.buff[wb.buff_cur] = '\0';
40

41
  return writer.get_chars_written();
42
}
43

44
} // namespace LIBC_NAMESPACE
45

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.