[libc] Add stdin definition.
Reviewed By: michaelrj Differential Revision: https://reviews.llvm.org/D136398
This commit is contained in:
parent
be4e425758
commit
2a038f9138
|
@ -149,6 +149,7 @@ def StringAPI : PublicAPI<"string.h"> {
|
|||
def StdIOAPI : PublicAPI<"stdio.h"> {
|
||||
let Macros = [
|
||||
SimpleMacroDef<"stderr", "stderr">,
|
||||
SimpleMacroDef<"stdin", "stdin">,
|
||||
SimpleMacroDef<"stdout", "stdout">,
|
||||
SimpleMacroDef<"_IOFBF", "0">,
|
||||
SimpleMacroDef<"_IOLBF", "1">,
|
||||
|
|
|
@ -387,6 +387,7 @@ if(LLVM_LIBC_FULL_BUILD)
|
|||
libc.src.stdio.putchar
|
||||
libc.src.stdio.puts
|
||||
libc.src.stdio.stderr
|
||||
libc.src.stdio.stdin
|
||||
libc.src.stdio.stdout
|
||||
|
||||
# stdlib.h entrypoints
|
||||
|
|
|
@ -491,6 +491,7 @@ def StdC : StandardSpec<"stdc"> {
|
|||
HeaderSpec StdIO = HeaderSpec<
|
||||
"stdio.h",
|
||||
[
|
||||
Macro<"stdin">,
|
||||
Macro<"stderr">,
|
||||
Macro<"stdout">,
|
||||
Macro<"_IOFBF">,
|
||||
|
@ -621,6 +622,10 @@ def StdC : StandardSpec<"stdc"> {
|
|||
>,
|
||||
],
|
||||
[
|
||||
ObjectSpec<
|
||||
"stdin",
|
||||
"FILE *"
|
||||
>,
|
||||
ObjectSpec<
|
||||
"stdout",
|
||||
"FILE *"
|
||||
|
|
|
@ -233,6 +233,7 @@ private:
|
|||
// library.
|
||||
File *openfile(const char *path, const char *mode);
|
||||
|
||||
extern File *stdin;
|
||||
extern File *stdout;
|
||||
extern File *stderr;
|
||||
|
||||
|
|
|
@ -164,6 +164,12 @@ File *openfile(const char *path, const char *mode) {
|
|||
return file;
|
||||
}
|
||||
|
||||
constexpr size_t STDIN_BUFFER_SIZE = 512;
|
||||
char stdin_buffer[STDIN_BUFFER_SIZE];
|
||||
static LinuxFile StdIn(0, stdin_buffer, STDIN_BUFFER_SIZE, _IOFBF, false,
|
||||
File::ModeFlags(File::OpenMode::READ));
|
||||
File *stdin = &StdIn;
|
||||
|
||||
constexpr size_t STDOUT_BUFFER_SIZE = 1024;
|
||||
char stdout_buffer[STDOUT_BUFFER_SIZE];
|
||||
static LinuxFile StdOut(1, stdout_buffer, STDOUT_BUFFER_SIZE, _IOLBF, false,
|
||||
|
|
|
@ -268,6 +268,18 @@ add_entrypoint_object(
|
|||
libc.src.__support.File.file
|
||||
)
|
||||
|
||||
add_entrypoint_object(
|
||||
stdin
|
||||
SRCS
|
||||
stdin.cpp
|
||||
HDRS
|
||||
stdin.h
|
||||
DEPENDS
|
||||
libc.include.stdio
|
||||
libc.src.__support.File.file
|
||||
libc.src.__support.File.platform_file
|
||||
)
|
||||
|
||||
add_entrypoint_object(
|
||||
stdout
|
||||
SRCS
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
//===-- Definition of the global stdin object -----------------------------===//
|
||||
//
|
||||
// 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/__support/File/file.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
extern "C" FILE *stdin = reinterpret_cast<FILE *>(__llvm_libc::stdin);
|
|
@ -0,0 +1,9 @@
|
|||
//===------------------------------------------------------------*- 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
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#error "Do not include this file. Instead include __support/File/file.h."
|
Loading…
Reference in New Issue