1ba7e1cddSMichael Jones //===-- Implementation of fprintf -------------------------------*- C++ -*-===// 2ba7e1cddSMichael Jones // 3ba7e1cddSMichael Jones // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4ba7e1cddSMichael Jones // See https://llvm.org/LICENSE.txt for license information. 5ba7e1cddSMichael Jones // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6ba7e1cddSMichael Jones // 7ba7e1cddSMichael Jones //===----------------------------------------------------------------------===// 8ba7e1cddSMichael Jones 9ba7e1cddSMichael Jones #include "src/stdio/fprintf.h" 10ba7e1cddSMichael Jones 11*2e6eccfeSMichael Jones #include "src/__support/File/file.h" 12ba7e1cddSMichael Jones #include "src/__support/arg_list.h" 13*2e6eccfeSMichael Jones #include "src/stdio/printf_core/vfprintf_internal.h" 14ba7e1cddSMichael Jones 15ba7e1cddSMichael Jones #include <stdarg.h> 16ba7e1cddSMichael Jones 17ba7e1cddSMichael Jones namespace __llvm_libc { 18ba7e1cddSMichael Jones 19ba7e1cddSMichael Jones LLVM_LIBC_FUNCTION(int, fprintf, 20ba7e1cddSMichael Jones (::FILE *__restrict stream, const char *__restrict format, 21ba7e1cddSMichael Jones ...)) { 22ba7e1cddSMichael Jones va_list vlist; 23ba7e1cddSMichael Jones va_start(vlist, format); 24ba7e1cddSMichael Jones internal::ArgList args(vlist); // This holder class allows for easier copying 25ba7e1cddSMichael Jones // and pointer semantics, as well as handling 26ba7e1cddSMichael Jones // destruction automatically. 27ba7e1cddSMichael Jones va_end(vlist); 28*2e6eccfeSMichael Jones int ret_val = printf_core::vfprintf_internal(stream, format, args); 29ba7e1cddSMichael Jones return ret_val; 30ba7e1cddSMichael Jones } 31ba7e1cddSMichael Jones 32ba7e1cddSMichael Jones } // namespace __llvm_libc 33