summaryrefslogtreecommitdiff
path: root/libc/src/stdio/generic/fprintf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libc/src/stdio/generic/fprintf.cpp')
-rw-r--r--libc/src/stdio/generic/fprintf.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/libc/src/stdio/generic/fprintf.cpp b/libc/src/stdio/generic/fprintf.cpp
new file mode 100644
index 000000000000..087aeadfc52c
--- /dev/null
+++ b/libc/src/stdio/generic/fprintf.cpp
@@ -0,0 +1,34 @@
+//===-- Implementation of fprintf -------------------------------*- 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/fprintf.h"
+
+#include "src/__support/File/file.h"
+#include "src/__support/arg_list.h"
+#include "src/__support/macros/config.h"
+#include "src/stdio/printf_core/vfprintf_internal.h"
+
+#include "hdr/types/FILE.h"
+#include <stdarg.h>
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(int, fprintf,
+ (::FILE *__restrict stream, const char *__restrict format,
+ ...)) {
+ va_list vlist;
+ va_start(vlist, format);
+ internal::ArgList args(vlist); // This holder class allows for easier copying
+ // and pointer semantics, as well as handling
+ // destruction automatically.
+ va_end(vlist);
+ int ret_val = printf_core::vfprintf_internal(stream, format, args);
+ return ret_val;
+}
+
+} // namespace LIBC_NAMESPACE_DECL