1// -*- C++ -*-
2//===---------------------------- stdio.h ---------------------------------===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9
10#if defined(__need_FILE) || defined(__need___FILE)
11
12#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
13#pragma GCC system_header
14#endif
15
16#include_next <stdio.h>
17
18#elif !defined(_LIBCPP_STDIO_H)
19#define _LIBCPP_STDIO_H
20
21/*
22    stdio.h synopsis
23
24Macros:
25
26    BUFSIZ
27    EOF
28    FILENAME_MAX
29    FOPEN_MAX
30    L_tmpnam
31    NULL
32    SEEK_CUR
33    SEEK_END
34    SEEK_SET
35    TMP_MAX
36    _IOFBF
37    _IOLBF
38    _IONBF
39    stderr
40    stdin
41    stdout
42
43Types:
44
45FILE
46fpos_t
47size_t
48
49int remove(const char* filename);
50int rename(const char* old, const char* new);
51FILE* tmpfile(void);
52char* tmpnam(char* s);
53int fclose(FILE* stream);
54int fflush(FILE* stream);
55FILE* fopen(const char* restrict filename, const char* restrict mode);
56FILE* freopen(const char* restrict filename, const char * restrict mode,
57              FILE * restrict stream);
58void setbuf(FILE* restrict stream, char* restrict buf);
59int setvbuf(FILE* restrict stream, char* restrict buf, int mode, size_t size);
60int fprintf(FILE* restrict stream, const char* restrict format, ...);
61int fscanf(FILE* restrict stream, const char * restrict format, ...);
62int printf(const char* restrict format, ...);
63int scanf(const char* restrict format, ...);
64int snprintf(char* restrict s, size_t n, const char* restrict format, ...);    // C99
65int sprintf(char* restrict s, const char* restrict format, ...);
66int sscanf(const char* restrict s, const char* restrict format, ...);
67int vfprintf(FILE* restrict stream, const char* restrict format, va_list arg);
68int vfscanf(FILE* restrict stream, const char* restrict format, va_list arg);  // C99
69int vprintf(const char* restrict format, va_list arg);
70int vscanf(const char* restrict format, va_list arg);                          // C99
71int vsnprintf(char* restrict s, size_t n, const char* restrict format,         // C99
72              va_list arg);
73int vsprintf(char* restrict s, const char* restrict format, va_list arg);
74int vsscanf(const char* restrict s, const char* restrict format, va_list arg); // C99
75int fgetc(FILE* stream);
76char* fgets(char* restrict s, int n, FILE* restrict stream);
77int fputc(int c, FILE* stream);
78int fputs(const char* restrict s, FILE* restrict stream);
79int getc(FILE* stream);
80int getchar(void);
81char* gets(char* s);  // removed in C++14
82int putc(int c, FILE* stream);
83int putchar(int c);
84int puts(const char* s);
85int ungetc(int c, FILE* stream);
86size_t fread(void* restrict ptr, size_t size, size_t nmemb,
87             FILE* restrict stream);
88size_t fwrite(const void* restrict ptr, size_t size, size_t nmemb,
89              FILE* restrict stream);
90int fgetpos(FILE* restrict stream, fpos_t* restrict pos);
91int fseek(FILE* stream, long offset, int whence);
92int fsetpos(FILE*stream, const fpos_t* pos);
93long ftell(FILE* stream);
94void rewind(FILE* stream);
95void clearerr(FILE* stream);
96int feof(FILE* stream);
97int ferror(FILE* stream);
98void perror(const char* s);
99*/
100
101#include <__config>
102
103#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
104#pragma GCC system_header
105#endif
106
107#include_next <stdio.h>
108
109#ifdef __cplusplus
110
111#undef getc
112#undef putc
113#undef clearerr
114#undef feof
115#undef ferror
116
117#endif
118
119#endif  // _LIBCPP_STDIO_H
120