xref: /illumos-gate/usr/src/ucbhead/stdio.h (revision 6e6545bfaed3bab9ce836ee82d1abd8f2edba89a)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
28 /*	  All Rights Reserved  	*/
29 
30 /*
31  * University Copyright- Copyright (c) 1982, 1986, 1988
32  * The Regents of the University of California
33  * All Rights Reserved
34  *
35  * University Acknowledgment- Portions of this document are derived from
36  * software developed by the University of California, Berkeley, and its
37  * contributors.
38  */
39 
40 /*
41  * User-visible pieces of the ANSI C standard I/O package.
42  */
43 
44 #ifndef _STDIO_H
45 #define	_STDIO_H
46 
47 #include <sys/feature_tests.h>
48 #include <sys/va_list.h>
49 #include <stdio_tag.h>
50 #include <stdio_impl.h>
51 #include <sys/null.h>
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
57 #ifndef BSD
58 #define	BSD
59 #endif
60 
61 #ifndef _SIZE_T
62 #define	_SIZE_T
63 #if !defined(_LP64) && defined(__cplusplus)
64 typedef unsigned int	size_t;
65 #else
66 typedef unsigned long	size_t;
67 #endif
68 #endif
69 
70 #ifndef _SSIZE_T
71 #define	_SSIZE_T
72 #if !defined(_LP64) && defined(__cplusplus)
73 typedef int	ssize_t;
74 #else
75 typedef long	ssize_t;
76 #endif
77 #endif
78 
79 typedef long	fpos_t;
80 
81 #define	BUFSIZ		1024
82 
83 #if defined(__i386)
84 #define	_NFILE	60	/* initial number of streams: Intel x86 ABI */
85 #else
86 #define	_NFILE	20	/* initial number of streams: SPARC ABI and default */
87 #endif
88 
89 #define	_SBFSIZ	8	/* compatibility with shared libs */
90 
91 #define	_IOFBF		0000	/* full buffered */
92 #define	_IOLBF		0100	/* line buffered */
93 #define	_IONBF		0004	/* not buffered */
94 #define	_IOEOF		0020	/* EOF reached on read */
95 #define	_IOERR		0040	/* I/O error from system */
96 
97 #define	_IOREAD		0001	/* currently reading */
98 #define	_IOWRT		0002	/* currently writing */
99 #define	_IORW		0200	/* opened for reading and writing */
100 #define	_IOMYBUF	0010	/* stdio malloc()'d buffer */
101 
102 #ifndef EOF
103 #define	EOF	(-1)
104 #endif
105 
106 #define	FOPEN_MAX	_NFILE
107 #define	FILENAME_MAX    1024	/* max # of characters in a path name */
108 
109 #define	SEEK_SET	0
110 #define	SEEK_CUR	1
111 #define	SEEK_END	2
112 #define	TMP_MAX		17576	/* 26 * 26 * 26 */
113 
114 #if !defined(_STRICT_STDC) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
115 #define	L_ctermid	9
116 #define	L_cuserid	9
117 #define	P_tmpdir	"/var/tmp/"
118 #endif
119 
120 #define	L_tmpnam	25	/* (sizeof(P_tmpdir) + 15) */
121 
122 #define	stdin	(&__iob[0])
123 #define	stdout	(&__iob[1])
124 #define	stderr	(&__iob[2])
125 
126 #ifndef	_FILEDEFED
127 #define	_FILEDEFED
128 typedef	__FILE FILE;
129 #endif
130 
131 extern FILE		__iob[_NFILE];
132 extern FILE		*_lastbuf;
133 extern unsigned char 	*_bufendtab[];
134 extern unsigned char	 _sibuf[], _sobuf[];
135 
136 /* Large file interfaces */
137 /* transition back from explicit 64-bit offset to implicit (64-bit) offset */
138 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
139 #ifdef __PRAGMA_REDEFINE_EXTNAME
140 #pragma redefine_extname	fopen64		fopen
141 #pragma redefine_extname	freopen64	freopen
142 #else
143 #define	fopen64			fopen
144 #define	freopen64		freopen
145 #endif
146 #endif
147 
148 /* transition from 32-bit offset to explicit 64-bit offset */
149 #if !defined(_LP64) && (_FILE_OFFSET_BITS == 64)
150 #ifdef __PRAGMA_REDEFINE_EXTNAME
151 #pragma redefine_extname	fopen		fopen64
152 #pragma redefine_extname	freopen		freopen64
153 #else
154 #define	fopen			fopen64
155 #define	freopen			freopen64
156 #endif
157 #endif
158 
159 
160 extern int	remove(const char *);
161 extern int	rename(const char *, const char *);
162 extern int	fclose(FILE *);
163 extern int	fflush(FILE *);
164 extern FILE	*fopen(const char *, const char *);
165 extern FILE	*freopen(const char *, const char *, FILE *);
166 extern void	setbuf(FILE *, char *);
167 extern void	setbuffer(FILE *, char *, int);
168 extern int	setlinebuf(FILE *);
169 extern int	setvbuf(FILE *, char *, int, size_t);
170 /* PRINTFLIKE2 */
171 extern int	fprintf(FILE *, const char *, ...);
172 /* SCANFLIKE2 */
173 extern int	fscanf(FILE *, const char *, ...);
174 /* PRINTFLIKE1 */
175 extern int	printf(const char *, ...);
176 /* SCANFLIKE1 */
177 extern int	scanf(const char *, ...);
178 /* PRINTFLIKE2 */
179 extern char	*sprintf(const char *, const char *, ...);
180 /* SCANFLIKE2 */
181 extern int	sscanf(const char *, const char *, ...);
182 extern int	vfprintf(FILE *, const char *, __va_list);
183 extern int	vprintf(const char *, __va_list);
184 extern char	*vsprintf(char *, char *, __va_list);
185 extern int	fgetc(FILE *);
186 extern char	*fgets(char *, int, FILE *);
187 extern int	fputc(int, FILE *);
188 extern int	fputs(const char *, FILE *);
189 extern int	getc(FILE *);
190 extern int	getchar(void);
191 extern char	*gets(char *);
192 extern int	putc(int, FILE *);
193 extern int	putchar(int);
194 extern int	puts(const char *);
195 extern int	ungetc(int, FILE *);
196 extern size_t	fread(void *, size_t, size_t, FILE *);
197 extern size_t	fwrite(const void *, size_t, size_t, FILE *);
198 extern int	fgetpos(FILE *, fpos_t *);
199 extern int	fseek(FILE *, long, int);
200 extern int	fsetpos(FILE *, const fpos_t *);
201 extern long	ftell(FILE *);
202 extern void	rewind(FILE *);
203 extern void	clearerr(FILE *);
204 extern int	feof(FILE *);
205 extern int	ferror(FILE *);
206 extern void	perror(const char *);
207 
208 extern int	__filbuf(FILE *);
209 extern int	__flsbuf(int, FILE *);
210 
211 #if !defined(_STRICT_STDC) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
212 	/* non-ANSI standard compilation */
213 
214 extern FILE    *fdopen(int, const char *);
215 extern FILE    *popen(const char *, const char *);
216 extern char    *ctermid(char *);
217 extern char    *cuserid(char *);
218 extern char    *tempnam(const char *, const char *);
219 extern int	getw(FILE *);
220 extern int	putw(int, FILE *);
221 extern int	pclose(FILE *);
222 extern int	system(const char *);
223 extern int	fileno(FILE *);
224 
225 #endif	/* !defined(_STRICT_STDC) */
226 
227 
228 #ifndef __lint
229 
230 #ifndef _LP64
231 
232 
233 #define	getc(p)		(--(p)->_cnt < 0 ? __filbuf(p) : (int)*(p)->_ptr++)
234 #define	putc(x, p)	(--(p)->_cnt < 0 ? __flsbuf((x), (p)) \
235 				: (int)(*(p)->_ptr++ = (x)))
236 
237 
238 #define	clearerr(p)	((void) ((p)->_flag &= ~(_IOERR | _IOEOF)))
239 #define	feof(p)		((p)->_flag & _IOEOF)
240 #define	ferror(p)	((p)->_flag & _IOERR)
241 
242 #endif /* _LP64 */
243 
244 #define	getchar()	getc(stdin)
245 #define	putchar(x)	putc((x), stdout)
246 
247 #endif /* __lint */
248 
249 #if	defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
250 	    !defined(__PRAGMA_REDEFINE_EXTNAME))
251 extern FILE	*fopen64(const char *, const char *);
252 extern FILE	*freopen64(const char *, const char *, FILE *);
253 #endif	/* _LARGEFILE64_SOURCE... */
254 
255 #ifdef __cplusplus
256 }
257 #endif
258 
259 #endif	/* _STDIO_H */
260