xref: /freebsd/contrib/llvm-project/libcxx/include/cstdio (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
10b57cec5SDimitry Andric// -*- C++ -*-
2349cc55cSDimitry Andric//===----------------------------------------------------------------------===//
30b57cec5SDimitry Andric//
40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
70b57cec5SDimitry Andric//
80b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
90b57cec5SDimitry Andric
100b57cec5SDimitry Andric#ifndef _LIBCPP_CSTDIO
110b57cec5SDimitry Andric#define _LIBCPP_CSTDIO
120b57cec5SDimitry Andric
130b57cec5SDimitry Andric/*
140b57cec5SDimitry Andric    cstdio synopsis
150b57cec5SDimitry Andric
160b57cec5SDimitry AndricMacros:
170b57cec5SDimitry Andric
180b57cec5SDimitry Andric    BUFSIZ
190b57cec5SDimitry Andric    EOF
200b57cec5SDimitry Andric    FILENAME_MAX
210b57cec5SDimitry Andric    FOPEN_MAX
220b57cec5SDimitry Andric    L_tmpnam
230b57cec5SDimitry Andric    NULL
240b57cec5SDimitry Andric    SEEK_CUR
250b57cec5SDimitry Andric    SEEK_END
260b57cec5SDimitry Andric    SEEK_SET
270b57cec5SDimitry Andric    TMP_MAX
280b57cec5SDimitry Andric    _IOFBF
290b57cec5SDimitry Andric    _IOLBF
300b57cec5SDimitry Andric    _IONBF
310b57cec5SDimitry Andric    stderr
320b57cec5SDimitry Andric    stdin
330b57cec5SDimitry Andric    stdout
340b57cec5SDimitry Andric
350b57cec5SDimitry Andricnamespace std
360b57cec5SDimitry Andric{
370b57cec5SDimitry Andric
380b57cec5SDimitry AndricTypes:
390b57cec5SDimitry Andric
400b57cec5SDimitry AndricFILE
410b57cec5SDimitry Andricfpos_t
420b57cec5SDimitry Andricsize_t
430b57cec5SDimitry Andric
440b57cec5SDimitry Andricint remove(const char* filename);
450b57cec5SDimitry Andricint rename(const char* old, const char* new);
460b57cec5SDimitry AndricFILE* tmpfile(void);
470b57cec5SDimitry Andricchar* tmpnam(char* s);
480b57cec5SDimitry Andricint fclose(FILE* stream);
490b57cec5SDimitry Andricint fflush(FILE* stream);
500b57cec5SDimitry AndricFILE* fopen(const char* restrict filename, const char* restrict mode);
510b57cec5SDimitry AndricFILE* freopen(const char* restrict filename, const char * restrict mode,
520b57cec5SDimitry Andric              FILE * restrict stream);
530b57cec5SDimitry Andricvoid setbuf(FILE* restrict stream, char* restrict buf);
540b57cec5SDimitry Andricint setvbuf(FILE* restrict stream, char* restrict buf, int mode, size_t size);
550b57cec5SDimitry Andricint fprintf(FILE* restrict stream, const char* restrict format, ...);
560b57cec5SDimitry Andricint fscanf(FILE* restrict stream, const char * restrict format, ...);
570b57cec5SDimitry Andricint printf(const char* restrict format, ...);
580b57cec5SDimitry Andricint scanf(const char* restrict format, ...);
590b57cec5SDimitry Andricint snprintf(char* restrict s, size_t n, const char* restrict format, ...);    // C99
600b57cec5SDimitry Andricint sprintf(char* restrict s, const char* restrict format, ...);
610b57cec5SDimitry Andricint sscanf(const char* restrict s, const char* restrict format, ...);
620b57cec5SDimitry Andricint vfprintf(FILE* restrict stream, const char* restrict format, va_list arg);
630b57cec5SDimitry Andricint vfscanf(FILE* restrict stream, const char* restrict format, va_list arg);  // C99
640b57cec5SDimitry Andricint vprintf(const char* restrict format, va_list arg);
650b57cec5SDimitry Andricint vscanf(const char* restrict format, va_list arg);                          // C99
660b57cec5SDimitry Andricint vsnprintf(char* restrict s, size_t n, const char* restrict format,         // C99
670b57cec5SDimitry Andric              va_list arg);
680b57cec5SDimitry Andricint vsprintf(char* restrict s, const char* restrict format, va_list arg);
690b57cec5SDimitry Andricint vsscanf(const char* restrict s, const char* restrict format, va_list arg); // C99
700b57cec5SDimitry Andricint fgetc(FILE* stream);
710b57cec5SDimitry Andricchar* fgets(char* restrict s, int n, FILE* restrict stream);
720b57cec5SDimitry Andricint fputc(int c, FILE* stream);
730b57cec5SDimitry Andricint fputs(const char* restrict s, FILE* restrict stream);
740b57cec5SDimitry Andricint getc(FILE* stream);
750b57cec5SDimitry Andricint getchar(void);
760b57cec5SDimitry Andricchar* gets(char* s);  // removed in C++14
770b57cec5SDimitry Andricint putc(int c, FILE* stream);
780b57cec5SDimitry Andricint putchar(int c);
790b57cec5SDimitry Andricint puts(const char* s);
800b57cec5SDimitry Andricint ungetc(int c, FILE* stream);
810b57cec5SDimitry Andricsize_t fread(void* restrict ptr, size_t size, size_t nmemb,
820b57cec5SDimitry Andric             FILE* restrict stream);
830b57cec5SDimitry Andricsize_t fwrite(const void* restrict ptr, size_t size, size_t nmemb,
840b57cec5SDimitry Andric              FILE* restrict stream);
850b57cec5SDimitry Andricint fgetpos(FILE* restrict stream, fpos_t* restrict pos);
860b57cec5SDimitry Andricint fseek(FILE* stream, long offset, int whence);
870b57cec5SDimitry Andricint fsetpos(FILE*stream, const fpos_t* pos);
880b57cec5SDimitry Andriclong ftell(FILE* stream);
890b57cec5SDimitry Andricvoid rewind(FILE* stream);
900b57cec5SDimitry Andricvoid clearerr(FILE* stream);
910b57cec5SDimitry Andricint feof(FILE* stream);
920b57cec5SDimitry Andricint ferror(FILE* stream);
930b57cec5SDimitry Andricvoid perror(const char* s);
940b57cec5SDimitry Andric
950b57cec5SDimitry Andric}  // std
960b57cec5SDimitry Andric*/
970b57cec5SDimitry Andric
980b57cec5SDimitry Andric#include <__config>
99bdd1243dSDimitry Andric
1000b57cec5SDimitry Andric#include <stdio.h>
1010b57cec5SDimitry Andric
102bdd1243dSDimitry Andric#ifndef _LIBCPP_STDIO_H
103bdd1243dSDimitry Andric#   error <cstdio> tried including <stdio.h> but didn't find libc++'s <stdio.h> header. \
104bdd1243dSDimitry Andric          This usually means that your header search paths are not configured properly. \
105bdd1243dSDimitry Andric          The header search paths should contain the C++ Standard Library headers before \
106bdd1243dSDimitry Andric          any C Standard Library, and you are probably using compiler flags that make that \
107bdd1243dSDimitry Andric          not be the case.
108bdd1243dSDimitry Andric#endif
109bdd1243dSDimitry Andric
1100b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1110b57cec5SDimitry Andric#  pragma GCC system_header
1120b57cec5SDimitry Andric#endif
1130b57cec5SDimitry Andric
1140b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD
1150b57cec5SDimitry Andric
116fe6060f1SDimitry Andricusing ::FILE _LIBCPP_USING_IF_EXISTS;
117fe6060f1SDimitry Andricusing ::fpos_t _LIBCPP_USING_IF_EXISTS;
118fe6060f1SDimitry Andricusing ::size_t _LIBCPP_USING_IF_EXISTS;
1190b57cec5SDimitry Andric
120fe6060f1SDimitry Andricusing ::fclose _LIBCPP_USING_IF_EXISTS;
121fe6060f1SDimitry Andricusing ::fflush _LIBCPP_USING_IF_EXISTS;
122fe6060f1SDimitry Andricusing ::setbuf _LIBCPP_USING_IF_EXISTS;
123fe6060f1SDimitry Andricusing ::setvbuf _LIBCPP_USING_IF_EXISTS;
124fe6060f1SDimitry Andricusing ::fprintf _LIBCPP_USING_IF_EXISTS;
125fe6060f1SDimitry Andricusing ::fscanf _LIBCPP_USING_IF_EXISTS;
126fe6060f1SDimitry Andricusing ::snprintf _LIBCPP_USING_IF_EXISTS;
127fe6060f1SDimitry Andricusing ::sprintf _LIBCPP_USING_IF_EXISTS;
128fe6060f1SDimitry Andricusing ::sscanf _LIBCPP_USING_IF_EXISTS;
129fe6060f1SDimitry Andricusing ::vfprintf _LIBCPP_USING_IF_EXISTS;
130fe6060f1SDimitry Andricusing ::vfscanf _LIBCPP_USING_IF_EXISTS;
131fe6060f1SDimitry Andricusing ::vsscanf _LIBCPP_USING_IF_EXISTS;
132fe6060f1SDimitry Andricusing ::vsnprintf _LIBCPP_USING_IF_EXISTS;
133fe6060f1SDimitry Andricusing ::vsprintf _LIBCPP_USING_IF_EXISTS;
134fe6060f1SDimitry Andricusing ::fgetc _LIBCPP_USING_IF_EXISTS;
135fe6060f1SDimitry Andricusing ::fgets _LIBCPP_USING_IF_EXISTS;
136fe6060f1SDimitry Andricusing ::fputc _LIBCPP_USING_IF_EXISTS;
137fe6060f1SDimitry Andricusing ::fputs _LIBCPP_USING_IF_EXISTS;
138fe6060f1SDimitry Andricusing ::getc _LIBCPP_USING_IF_EXISTS;
139fe6060f1SDimitry Andricusing ::putc _LIBCPP_USING_IF_EXISTS;
140fe6060f1SDimitry Andricusing ::ungetc _LIBCPP_USING_IF_EXISTS;
141fe6060f1SDimitry Andricusing ::fread _LIBCPP_USING_IF_EXISTS;
142fe6060f1SDimitry Andricusing ::fwrite _LIBCPP_USING_IF_EXISTS;
143fe6060f1SDimitry Andricusing ::fgetpos _LIBCPP_USING_IF_EXISTS;
144fe6060f1SDimitry Andricusing ::fseek _LIBCPP_USING_IF_EXISTS;
145fe6060f1SDimitry Andricusing ::fsetpos _LIBCPP_USING_IF_EXISTS;
146fe6060f1SDimitry Andricusing ::ftell _LIBCPP_USING_IF_EXISTS;
147fe6060f1SDimitry Andricusing ::rewind _LIBCPP_USING_IF_EXISTS;
148fe6060f1SDimitry Andricusing ::clearerr _LIBCPP_USING_IF_EXISTS;
149fe6060f1SDimitry Andricusing ::feof _LIBCPP_USING_IF_EXISTS;
150fe6060f1SDimitry Andricusing ::ferror _LIBCPP_USING_IF_EXISTS;
151fe6060f1SDimitry Andricusing ::perror _LIBCPP_USING_IF_EXISTS;
1520b57cec5SDimitry Andric
153fe6060f1SDimitry Andricusing ::fopen _LIBCPP_USING_IF_EXISTS;
154fe6060f1SDimitry Andricusing ::freopen _LIBCPP_USING_IF_EXISTS;
155fe6060f1SDimitry Andricusing ::remove _LIBCPP_USING_IF_EXISTS;
156fe6060f1SDimitry Andricusing ::rename _LIBCPP_USING_IF_EXISTS;
157fe6060f1SDimitry Andricusing ::tmpfile _LIBCPP_USING_IF_EXISTS;
158fe6060f1SDimitry Andricusing ::tmpnam _LIBCPP_USING_IF_EXISTS;
1590b57cec5SDimitry Andric
160fe6060f1SDimitry Andricusing ::getchar _LIBCPP_USING_IF_EXISTS;
161*46c59ea9SDimitry Andric#if _LIBCPP_STD_VER <= 11 && !(defined(__FreeBSD__) && __FreeBSD__ >= 13) // FreeBSD customization
162fe6060f1SDimitry Andricusing ::gets _LIBCPP_USING_IF_EXISTS;
1630b57cec5SDimitry Andric#endif
164fe6060f1SDimitry Andricusing ::scanf _LIBCPP_USING_IF_EXISTS;
165fe6060f1SDimitry Andricusing ::vscanf _LIBCPP_USING_IF_EXISTS;
1660b57cec5SDimitry Andric
167fe6060f1SDimitry Andricusing ::printf _LIBCPP_USING_IF_EXISTS;
168fe6060f1SDimitry Andricusing ::putchar _LIBCPP_USING_IF_EXISTS;
169fe6060f1SDimitry Andricusing ::puts _LIBCPP_USING_IF_EXISTS;
170fe6060f1SDimitry Andricusing ::vprintf _LIBCPP_USING_IF_EXISTS;
1710b57cec5SDimitry Andric
1720b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD
1730b57cec5SDimitry Andric
1740b57cec5SDimitry Andric#endif // _LIBCPP_CSTDIO
175