]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - include/stdio.h
Unbreak build: libftpio gropes inside struct __sFILE. Implement
[FreeBSD/FreeBSD.git] / include / stdio.h
1 /*-
2  * Copyright (c) 1990, 1993
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Chris Torek.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. All advertising materials mentioning features or use of this software
17  *    must display the following acknowledgement:
18  *      This product includes software developed by the University of
19  *      California, Berkeley and its contributors.
20  * 4. Neither the name of the University nor the names of its contributors
21  *    may be used to endorse or promote products derived from this software
22  *    without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  *      @(#)stdio.h     8.5 (Berkeley) 4/29/95
37  * $FreeBSD$
38  */
39
40 #ifndef _STDIO_H_
41 #define _STDIO_H_
42
43 #include <sys/cdefs.h>
44 #include <sys/_null.h>
45 #include <sys/_types.h>
46
47 typedef __off_t         fpos_t;
48
49 #ifndef _SIZE_T_DECLARED
50 typedef __size_t        size_t;
51 #define _SIZE_T_DECLARED
52 #endif
53
54 #if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE
55 #ifndef _VA_LIST_DECLARED
56 typedef __va_list       va_list;
57 #define _VA_LIST_DECLARED
58 #endif
59 #endif
60
61 #define _FSTDIO                 /* Define for new stdio with functions. */
62
63 struct __sFILE;
64 typedef struct __sFILE FILE;
65
66 #ifndef _STDSTREAM_DECLARED
67 __BEGIN_DECLS
68 extern FILE *__stdinp;
69 extern FILE *__stdoutp;
70 extern FILE *__stderrp;
71 __END_DECLS
72 #define _STDSTREAM_DECLARED
73 #endif
74
75 /*
76  * The following three definitions are for ANSI C, which took them
77  * from System V, which brilliantly took internal interface macros and
78  * made them official arguments to setvbuf(), without renaming them.
79  * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
80  */
81 #define _IOFBF  0               /* setvbuf should set fully buffered */
82 #define _IOLBF  1               /* setvbuf should set line buffered */
83 #define _IONBF  2               /* setvbuf should set unbuffered */
84
85 #define BUFSIZ  1024            /* size of buffer used by setbuf */
86 #define EOF     (-1)
87
88 /*
89  * FOPEN_MAX is a minimum maximum, and is the number of streams that
90  * stdio can provide without attempting to allocate further resources
91  * (which could fail).  Do not use this for anything.
92  */
93                                 /* must be == _POSIX_STREAM_MAX <limits.h> */
94 #ifndef FOPEN_MAX
95 #define FOPEN_MAX       20      /* must be <= OPEN_MAX <sys/syslimits.h> */
96 #endif
97 #define FILENAME_MAX    1024    /* must be <= PATH_MAX <sys/syslimits.h> */
98
99 /* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
100 #if __XSI_VISIBLE
101 #define P_tmpdir        "/var/tmp/"
102 #endif
103 #define L_tmpnam        1024    /* XXX must be == PATH_MAX */
104 #define TMP_MAX         308915776
105
106 #ifndef SEEK_SET
107 #define SEEK_SET        0       /* set file offset to offset */
108 #endif
109 #ifndef SEEK_CUR
110 #define SEEK_CUR        1       /* set file offset to current plus offset */
111 #endif
112 #ifndef SEEK_END
113 #define SEEK_END        2       /* set file offset to EOF plus offset */
114 #endif
115
116 #define stdin   __stdinp
117 #define stdout  __stdoutp
118 #define stderr  __stderrp
119
120 __BEGIN_DECLS
121 /*
122  * Functions defined in ANSI C standard.
123  */
124 void     clearerr(FILE *);
125 int      fclose(FILE *);
126 int      feof(FILE *);
127 int      ferror(FILE *);
128 int      fflush(FILE *);
129 int      fgetc(FILE *);
130 int      fgetpos(FILE * __restrict, fpos_t * __restrict);
131 char    *fgets(char * __restrict, int, FILE * __restrict);
132 FILE    *fopen(const char * __restrict, const char * __restrict);
133 int      fprintf(FILE * __restrict, const char * __restrict, ...);
134 int      fputc(int, FILE *);
135 int      fputs(const char * __restrict, FILE * __restrict);
136 size_t   fread(void * __restrict, size_t, size_t, FILE * __restrict);
137 FILE    *freopen(const char * __restrict, const char * __restrict, FILE * __restrict);
138 int      fscanf(FILE * __restrict, const char * __restrict, ...);
139 int      fseek(FILE *, long, int);
140 int      fsetpos(FILE *, const fpos_t *);
141 long     ftell(FILE *);
142 size_t   fwrite(const void * __restrict, size_t, size_t, FILE * __restrict);
143 int      getc(FILE *);
144 int      getchar(void);
145 char    *gets(char *);
146 void     perror(const char *);
147 int      printf(const char * __restrict, ...);
148 int      putc(int, FILE *);
149 int      putchar(int);
150 int      puts(const char *);
151 int      remove(const char *);
152 int      rename(const char *, const char *);
153 void     rewind(FILE *);
154 int      scanf(const char * __restrict, ...);
155 void     setbuf(FILE * __restrict, char * __restrict);
156 int      setvbuf(FILE * __restrict, char * __restrict, int, size_t);
157 int      sprintf(char * __restrict, const char * __restrict, ...);
158 int      sscanf(const char * __restrict, const char * __restrict, ...);
159 FILE    *tmpfile(void);
160 char    *tmpnam(char *);
161 int      ungetc(int, FILE *);
162 int      vfprintf(FILE * __restrict, const char * __restrict,
163             __va_list);
164 int      vprintf(const char * __restrict, __va_list);
165 int      vsprintf(char * __restrict, const char * __restrict,
166             __va_list);
167
168 #if __ISO_C_VISIBLE >= 1999
169 int      snprintf(char * __restrict, size_t, const char * __restrict,
170             ...) __printflike(3, 4);
171 int      vfscanf(FILE * __restrict, const char * __restrict, __va_list)
172             __scanflike(2, 0);
173 int      vscanf(const char * __restrict, __va_list) __scanflike(1, 0);
174 int      vsnprintf(char * __restrict, size_t, const char * __restrict,
175             __va_list) __printflike(3, 0);
176 int      vsscanf(const char * __restrict, const char * __restrict, __va_list)
177             __scanflike(2, 0);
178 #endif
179
180 /*
181  * Functions defined in all versions of POSIX 1003.1.
182  */
183 #if __BSD_VISIBLE || __POSIX_VISIBLE <= 199506
184 /* size for cuserid(3); UT_NAMESIZE + 1, see <utmp.h> */
185 #define L_cuserid       17      /* legacy */
186 #endif
187
188 #if __POSIX_VISIBLE
189 #define L_ctermid       1024    /* size for ctermid(3); PATH_MAX */
190
191 char    *ctermid(char *);
192 FILE    *fdopen(int, const char *);
193 int      fileno(FILE *);
194 #endif /* __POSIX_VISIBLE */
195
196 #if __POSIX_VISIBLE >= 199209
197 int      pclose(FILE *);
198 FILE    *popen(const char *, const char *);
199 #endif
200
201 #if __POSIX_VISIBLE >= 199506
202 int      ftrylockfile(FILE *);
203 void     flockfile(FILE *);
204 void     funlockfile(FILE *);
205
206 /*
207  * See ISO/IEC 9945-1 ANSI/IEEE Std 1003.1 Second Edition 1996-07-12
208  * B.8.2.7 for the rationale behind the *_unlocked() functions.
209  */
210 int      getc_unlocked(FILE *);
211 int      getchar_unlocked(void);
212 int      putc_unlocked(int, FILE *);
213 int      putchar_unlocked(int);
214 #endif
215 #if __BSD_VISIBLE
216 void     clearerr_unlocked(FILE *);
217 int      feof_unlocked(FILE *);
218 int      ferror_unlocked(FILE *);
219 int      fileno_unlocked(FILE *);
220 #endif
221
222 #if __POSIX_VISIBLE >= 200112
223 int      fseeko(FILE *, __off_t, int);
224 __off_t  ftello(FILE *);
225 #endif
226
227 #if __BSD_VISIBLE || __XSI_VISIBLE > 0 && __XSI_VISIBLE < 600
228 int      getw(FILE *);
229 int      putw(int, FILE *);
230 #endif /* BSD or X/Open before issue 6 */
231
232 #if __XSI_VISIBLE
233 char    *tempnam(const char *, const char *);
234 #endif
235
236 /*
237  * Routines that are purely local.
238  */
239 #if __BSD_VISIBLE
240 int      asprintf(char **, const char *, ...) __printflike(2, 3);
241 char    *ctermid_r(char *);
242 void     fcloseall(void);
243 char    *fgetln(FILE *, size_t *);
244 __const char *fmtcheck(const char *, const char *) __format_arg(2);
245 int      fpurge(FILE *);
246 int      renameat(int, const char *, int, const char *);
247 void     setbuffer(FILE *, char *, int);
248 int      setlinebuf(FILE *);
249 int      vasprintf(char **, const char *, __va_list)
250             __printflike(2, 0);
251
252 void    *__fgetcookie(FILE *);
253 void    __fsetfileno(FILE *, int);
254
255 /*
256  * The system error table contains messages for the first sys_nerr
257  * positive errno values.  Use strerror() or strerror_r() from <string.h>
258  * instead.
259  */
260 extern __const int sys_nerr;
261 extern __const char *__const sys_errlist[];
262
263 /*
264  * Stdio function-access interface.
265  */
266 FILE    *funopen(const void *,
267             int (*)(void *, char *, int),
268             int (*)(void *, const char *, int),
269             fpos_t (*)(void *, fpos_t, int),
270             int (*)(void *));
271 #define fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
272 #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
273
274 /*
275  * Portability hacks.  See <sys/types.h>.
276  */
277 #ifndef _FTRUNCATE_DECLARED
278 #define _FTRUNCATE_DECLARED
279 int      ftruncate(int, __off_t);
280 #endif
281 #ifndef _LSEEK_DECLARED
282 #define _LSEEK_DECLARED
283 __off_t  lseek(int, __off_t, int);
284 #endif
285 #ifndef _MMAP_DECLARED
286 #define _MMAP_DECLARED
287 void    *mmap(void *, size_t, int, int, int, __off_t);
288 #endif
289 #ifndef _TRUNCATE_DECLARED
290 #define _TRUNCATE_DECLARED
291 int      truncate(const char *, __off_t);
292 #endif
293 #endif /* __BSD_VISIBLE */
294
295 __END_DECLS
296 #endif /* !_STDIO_H_ */