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
54extern "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)
64typedef unsigned int	size_t;
65#else
66typedef unsigned long	size_t;
67#endif
68#endif
69
70#ifndef _SSIZE_T
71#define	_SSIZE_T
72#if !defined(_LP64) && defined(__cplusplus)
73typedef int	ssize_t;
74#else
75typedef long	ssize_t;
76#endif
77#endif
78
79typedef 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
128typedef	__FILE FILE;
129#endif
130
131extern FILE		__iob[_NFILE];
132extern FILE		*_lastbuf;
133extern unsigned char 	*_bufendtab[];
134extern 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
160extern int	remove(const char *);
161extern int	rename(const char *, const char *);
162extern int	fclose(FILE *);
163extern int	fflush(FILE *);
164extern FILE	*fopen(const char *, const char *);
165extern FILE	*freopen(const char *, const char *, FILE *);
166extern void	setbuf(FILE *, char *);
167extern void	setbuffer(FILE *, char *, int);
168extern int	setlinebuf(FILE *);
169extern int	setvbuf(FILE *, char *, int, size_t);
170/* PRINTFLIKE2 */
171extern int	fprintf(FILE *, const char *, ...);
172/* SCANFLIKE2 */
173extern int	fscanf(FILE *, const char *, ...);
174/* PRINTFLIKE1 */
175extern int	printf(const char *, ...);
176/* SCANFLIKE1 */
177extern int	scanf(const char *, ...);
178/* PRINTFLIKE2 */
179extern char	*sprintf(const char *, const char *, ...);
180/* SCANFLIKE2 */
181extern int	sscanf(const char *, const char *, ...);
182extern int	vfprintf(FILE *, const char *, __va_list);
183extern int	vprintf(const char *, __va_list);
184extern char	*vsprintf(char *, char *, __va_list);
185extern int	fgetc(FILE *);
186extern char	*fgets(char *, int, FILE *);
187extern int	fputc(int, FILE *);
188extern int	fputs(const char *, FILE *);
189extern int	getc(FILE *);
190extern int	getchar(void);
191extern char	*gets(char *);
192extern int	putc(int, FILE *);
193extern int	putchar(int);
194extern int	puts(const char *);
195extern int	ungetc(int, FILE *);
196extern size_t	fread(void *, size_t, size_t, FILE *);
197extern size_t	fwrite(const void *, size_t, size_t, FILE *);
198extern int	fgetpos(FILE *, fpos_t *);
199extern int	fseek(FILE *, long, int);
200extern int	fsetpos(FILE *, const fpos_t *);
201extern long	ftell(FILE *);
202extern void	rewind(FILE *);
203extern void	clearerr(FILE *);
204extern int	feof(FILE *);
205extern int	ferror(FILE *);
206extern void	perror(const char *);
207
208extern int	__filbuf(FILE *);
209extern int	__flsbuf(int, FILE *);
210
211#if !defined(_STRICT_STDC) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
212	/* non-ANSI standard compilation */
213
214extern FILE    *fdopen(int, const char *);
215extern FILE    *popen(const char *, const char *);
216extern char    *ctermid(char *);
217extern char    *cuserid(char *);
218extern char    *tempnam(const char *, const char *);
219extern int	getw(FILE *);
220extern int	putw(int, FILE *);
221extern int	pclose(FILE *);
222extern int	system(const char *);
223extern 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))
251extern FILE	*fopen64(const char *, const char *);
252extern FILE	*freopen64(const char *, const char *, FILE *);
253#endif	/* _LARGEFILE64_SOURCE... */
254
255#ifdef __cplusplus
256}
257#endif
258
259#endif	/* _STDIO_H */
260