[libc-commits] [libc] [wip] [libc] Implement vasprintf (PR #98824)

Michael Jones via libc-commits libc-commits at lists.llvm.org
Fri Jul 19 11:28:47 PDT 2024


================
@@ -0,0 +1,77 @@
+//===-- Implementation of vasprintf -----------------------------*- C++ -*-===//
+//
+// 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/stdio/vasprintf.h"
+
+#include "src/__support/OSUtil/io.h"
+#include "src/__support/arg_list.h"
+#include "src/stdio/printf.h"
+#include "src/stdio/printf_core/core_structs.h"
+#include "src/stdio/printf_core/printf_main.h"
+#include "src/stdio/printf_core/writer.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h> // malloc, realloc, free
+
+namespace LIBC_NAMESPACE {
+
+namespace {
+
+LIBC_INLINE int resize_overflow_hook(cpp::string_view new_str, void *target) {
+  printf_core::WriteBuffer *wb =
+      reinterpret_cast<printf_core::WriteBuffer *>(target);
+  size_t NewSize = new_str.size() + wb->buff_cur;
+  char *TmpBuf =
+      static_cast<char *>(realloc(wb->buff, NewSize + 1)); // +1 for null
+  if (TmpBuf == nullptr) {
+    return printf_core::FILE_WRITE_ERROR;
----------------
michaelrj-google wrote:

you should add a new error to `core_structs.h` for allocation errors instead of using `FILE_WRITE_ERROR`

https://github.com/llvm/llvm-project/pull/98824


More information about the libc-commits mailing list