138ef6929SJoseph Huber //===-- Implementation of vsscanf -------------------------------*- C++ -*-===// 238ef6929SJoseph Huber // 338ef6929SJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 438ef6929SJoseph Huber // See https://llvm.org/LICENSE.txt for license information. 538ef6929SJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 638ef6929SJoseph Huber // 738ef6929SJoseph Huber //===----------------------------------------------------------------------===// 838ef6929SJoseph Huber 938ef6929SJoseph Huber #include "src/stdio/vsscanf.h" 1038ef6929SJoseph Huber 11*c63112a9Slntue #include "hdr/stdio_macros.h" 1238ef6929SJoseph Huber #include "src/__support/CPP/limits.h" 1338ef6929SJoseph Huber #include "src/__support/arg_list.h" 1438ef6929SJoseph Huber #include "src/stdio/scanf_core/reader.h" 1538ef6929SJoseph Huber #include "src/stdio/scanf_core/scanf_main.h" 1638ef6929SJoseph Huber 1738ef6929SJoseph Huber #include <stdarg.h> 1838ef6929SJoseph Huber 1938ef6929SJoseph Huber namespace LIBC_NAMESPACE_DECL { 2038ef6929SJoseph Huber 2138ef6929SJoseph Huber LLVM_LIBC_FUNCTION(int, vsscanf, 2238ef6929SJoseph Huber (const char *buffer, const char *format, va_list vlist)) { 2338ef6929SJoseph Huber internal::ArgList args(vlist); 2438ef6929SJoseph Huber scanf_core::ReadBuffer rb{const_cast<char *>(buffer), 2538ef6929SJoseph Huber cpp::numeric_limits<size_t>::max()}; 2638ef6929SJoseph Huber scanf_core::Reader reader(&rb); 2738ef6929SJoseph Huber int ret_val = scanf_core::scanf_main(&reader, format, args); 2838ef6929SJoseph Huber // This is done to avoid including stdio.h in the internals. On most systems 2938ef6929SJoseph Huber // EOF is -1, so this will be transformed into just "return ret_val". 3038ef6929SJoseph Huber return (ret_val == -1) ? EOF : ret_val; 3138ef6929SJoseph Huber } 3238ef6929SJoseph Huber 3338ef6929SJoseph Huber } // namespace LIBC_NAMESPACE_DECL 34