stdio.h revision f582340a6a48588aa50da17e1620e8f91b146941
11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*	$OpenBSD: stdio.h,v 1.35 2006/01/13 18:10:09 miod Exp $	*/
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*	$NetBSD: stdio.h,v 1.18 1996/04/25 18:29:21 jtc Exp $	*/
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*-
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 1990 The Regents of the University of California.
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved.
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This code is derived from software contributed to Berkeley by
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Chris Torek.
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    documentation and/or other materials provided with the distribution.
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 3. Neither the name of the University nor the names of its contributors
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    may be used to endorse or promote products derived from this software
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    without specific prior written permission.
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE.
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	@(#)stdio.h	5.17 (Berkeley) 6/3/91
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef	_STDIO_H_
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	_STDIO_H_
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h>
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/_types.h>
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* va_list and size_t must be defined by stdio.h according to Posix */
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __need___va_list
461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdarg.h>
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* note that this forces stddef.h to *only* define size_t */
491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __need_size_t
501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stddef.h>
511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stddef.h>
531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE
551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h>	/* XXX should be removed */
561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef	_SIZE_T_DEFINED_
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	_SIZE_T_DEFINED_
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef	unsigned long    size_t;
611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef	_OFF_T_DEFINED_
641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	_OFF_T_DEFINED_
651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef	long    off_t;
661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef NULL
691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef 	__GNUG__
701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	NULL	__null
711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else
721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	NULL	0L
731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	_FSTDIO			/* Define for new stdio with functions. */
771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef off_t fpos_t;		/* stdio file position type */
791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * NB: to fit things in six character monocase externals, the stdio
821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * code uses the prefix `__s' for stdio objects, typically followed
831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * by a three-character attempt at a mnemonic.
841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* stdio buffers */
871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct __sbuf {
881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	unsigned char *_base;
891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	_size;
901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * stdio state variables.
941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * The following always hold:
961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *		_lbfsize is -_bf._size, else _lbfsize is 0
991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	if _flags&__SRD, _w is 0
1001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *	if _flags&__SWR, _r is 0
1011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
1021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This ensures that the getc and putc macros (or inline functions) never
1031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * try to write or read from a file that is in `read' or `write' mode.
1041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * (Moreover, they can, and do, automatically switch from read mode to
1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * write mode, and back, on "r+" and "w+" files.)
1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * _lbfsize is used only to make the inline line-buffered output stream
1081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * code as compact as possible.
1091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
1101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * _ub, _up, and _ur are used when ungetc() pushes back more characters
1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * than fit in the current _bf, or when ungetc() pushes back a character
1121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * that does not match the previous one in _bf.  When this happens,
1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
115c1202510b67f200b668d85ac0190db2b179b0c4dAndy McFadden *
116c1202510b67f200b668d85ac0190db2b179b0c4dAndy McFadden * NOTE: if you change this structure, you also need to update the
117c1202510b67f200b668d85ac0190db2b179b0c4dAndy McFadden * std() initializer in findfp.c.
1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
1191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projecttypedef	struct __sFILE {
1201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	unsigned char *_p;	/* current position in (some) buffer */
1211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	_r;		/* read space left for getc() */
1221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	_w;		/* write space left for putc() */
1231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	short	_flags;		/* flags, below; this FILE is free if 0 */
1241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	short	_file;		/* fileno, if Unix descriptor, else -1 */
1251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct	__sbuf _bf;	/* the buffer (at least 1 byte, if !NULL) */
1261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	_lbfsize;	/* 0 or -_bf._size, for inline putc */
1271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* operations */
1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	void	*_cookie;	/* cookie passed to io functions */
1301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	(*_close)(void *);
1311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	(*_read)(void *, char *, int);
1321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	fpos_t	(*_seek)(void *, fpos_t, int);
1331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	(*_write)(void *, const char *, int);
1341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* extension data, to avoid further ABI breakage */
1361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct	__sbuf _ext;
1371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* data for long sequences of ungetc() */
1381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	unsigned char *_up;	/* saved _p when _p is doing ungetc data */
1391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	_ur;		/* saved _r when _r is counting ungetc data */
1401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* tricks to meet minimum requirements even when malloc() fails */
1421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	unsigned char _ubuf[3];	/* guarantee an ungetc() buffer */
1431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	unsigned char _nbuf[1];	/* guarantee a getc() buffer */
1441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* separate buffer for fgetln() when line crosses buffer boundary */
1461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	struct	__sbuf _lb;	/* buffer for fgetln() */
1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Unix stdio files get aligned to block boundaries on fseek() */
1491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int	_blksize;	/* stat.st_blksize (may be != _bf._size) */
1501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	fpos_t	_offset;	/* current lseek offset */
1511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} FILE;
1521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
1541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern FILE __sF[];
1551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
1561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SLBF	0x0001		/* line buffered */
1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SNBF	0x0002		/* unbuffered */
1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SRD	0x0004		/* OK to read */
1601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SWR	0x0008		/* OK to write */
1611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* RD and WR are never simultaneously asserted */
1621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SRW	0x0010		/* open for reading & writing */
1631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SEOF	0x0020		/* found EOF */
1641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SERR	0x0040		/* found error */
1651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SMBF	0x0080		/* _buf is from malloc */
1661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SAPP	0x0100		/* fdopen()ed in append mode */
1671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SSTR	0x0200		/* this is an sprintf/snprintf string */
1681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SOPT	0x0400		/* do fseek() optimisation */
1691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SNPT	0x0800		/* do not do fseek() optimisation */
1701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SOFF	0x1000		/* set iff _offset is in fact correct */
1711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SMOD	0x2000		/* true => fgetln modified _p text */
1721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__SALC	0x4000		/* allocate string space dynamically */
173f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	__SIGN	0x8000		/* ignore this file in _fwalk */
1741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
1761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * The following three definitions are for ANSI C, which took them
1771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * from System V, which brilliantly took internal interface macros and
1781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * made them official arguments to setvbuf(), without renaming them.
1791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Hence, these ugly _IOxxx names are *supposed* to appear in user code.
1801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
1811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Although numbered as their counterparts above, the implementation
1821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * does not rely on this.
1831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
1841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	_IOFBF	0		/* setvbuf should set fully buffered */
1851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	_IOLBF	1		/* setvbuf should set line buffered */
1861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	_IONBF	2		/* setvbuf should set unbuffered */
1871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	BUFSIZ	1024		/* size of buffer used by setbuf */
1891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	EOF	(-1)
1911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
1921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
1931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOPEN_MAX is a minimum maximum, and should be the number of descriptors
1941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * that the kernel can provide without allocation of a resource that can
1951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * fail without the process sleeping.  Do not use this for anything.
1961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
1971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	FOPEN_MAX	20	/* must be <= OPEN_MAX <sys/syslimits.h> */
1981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	FILENAME_MAX	1024	/* must be <= PATH_MAX <sys/syslimits.h> */
1991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* System V/ANSI C; this is the wrong way to do this, do *not* use these. */
2011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __BSD_VISIBLE || __XPG_VISIBLE
2021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	P_tmpdir	"/tmp/"
2031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
2041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	L_tmpnam	1024	/* XXX must be == PATH_MAX */
2051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	TMP_MAX		308915776
2061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef SEEK_SET
2081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SEEK_SET	0	/* set file offset to offset */
2091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
2101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef SEEK_CUR
2111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SEEK_CUR	1	/* set file offset to current plus offset */
2121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
2131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef SEEK_END
2141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	SEEK_END	2	/* set file offset to EOF plus offset */
2151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
2161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	stdin	(&__sF[0])
2181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	stdout	(&__sF[1])
2191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	stderr	(&__sF[2])
2201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
2221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Functions defined in ANSI C standard.
2231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
2241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
2251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	 clearerr(FILE *);
2261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fclose(FILE *);
2271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 feof(FILE *);
2281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 ferror(FILE *);
2291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fflush(FILE *);
2301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fgetc(FILE *);
2311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fgetpos(FILE *, fpos_t *);
2321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectchar	*fgets(char *, int, FILE *);
2331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectFILE	*fopen(const char *, const char *);
2341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fprintf(FILE *, const char *, ...);
2351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fputc(int, FILE *);
2361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fputs(const char *, FILE *);
2371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t	 fread(void *, size_t, size_t, FILE *);
2381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectFILE	*freopen(const char *, const char *, FILE *);
2391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fscanf(FILE *, const char *, ...);
2401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fseek(FILE *, long, int);
2411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fseeko(FILE *, off_t, int);
2421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fsetpos(FILE *, const fpos_t *);
2431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectlong	 ftell(FILE *);
2441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectoff_t	 ftello(FILE *);
2451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectsize_t	 fwrite(const void *, size_t, size_t, FILE *);
2461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 getc(FILE *);
2471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 getchar(void);
2481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectchar	*gets(char *);
2491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __BSD_VISIBLE && !defined(__SYS_ERRLIST)
2501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define __SYS_ERRLIST
2511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern int sys_nerr;			/* perror(3) external variables */
2531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern char *sys_errlist[];
2541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
2551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	 perror(const char *);
2561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 printf(const char *, ...);
2571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 putc(int, FILE *);
2581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 putchar(int);
2591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 puts(const char *);
2601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 remove(const char *);
2611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 rename(const char *, const char *);
2621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	 rewind(FILE *);
2631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 scanf(const char *, ...);
2641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	 setbuf(FILE *, char *);
2651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 setvbuf(FILE *, char *, int, size_t);
2661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 sprintf(char *, const char *, ...);
2671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 sscanf(const char *, const char *, ...);
2681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectFILE	*tmpfile(void);
2691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectchar	*tmpnam(char *);
2701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 ungetc(int, FILE *);
2711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vfprintf(FILE *, const char *, __va_list);
2721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vprintf(const char *, __va_list);
2731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vsprintf(char *, const char *, __va_list);
2741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __ISO_C_VISIBLE >= 1999 || __BSD_VISIBLE
2761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 snprintf(char *, size_t, const char *, ...)
2771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__format__ (printf, 3, 4)))
2781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__nonnull__ (3)));
2791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vfscanf(FILE *, const char *, __va_list)
2801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__format__ (scanf, 2, 0)))
2811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__nonnull__ (2)));
2821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vscanf(const char *, __va_list)
2831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__format__ (scanf, 1, 0)))
2841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__nonnull__ (1)));
2851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vsnprintf(char *, size_t, const char *, __va_list)
2861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__format__ (printf, 3, 0)))
2871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__nonnull__ (3)));
2881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vsscanf(const char *, const char *, __va_list)
2891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__format__ (scanf, 2, 0)))
2901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__nonnull__ (2)));
2911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* __ISO_C_VISIBLE >= 1999 || __BSD_VISIBLE */
2921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
2941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
2961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
2971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Functions defined in POSIX 1003.1.
2981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
2991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE
3001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	L_ctermid	1024	/* size for ctermid(); PATH_MAX */
3011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define L_cuserid	9	/* size for cuserid(); UT_NAMESIZE + 1 */
3021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
304bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turner#if 0 /* MISSING FROM BIONIC */
3051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectchar	*ctermid(char *);
3061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectchar	*cuserid(char *);
307bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turner#endif /* MISSING */
3081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectFILE	*fdopen(int, const char *);
3091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fileno(FILE *);
3101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
31150ace4fec5e8cb5afcbc656a4556fa528adfd760David 'Digit' Turner#if (__POSIX_VISIBLE >= 199209)
3121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 pclose(FILE *);
3131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectFILE	*popen(const char *, const char *);
3141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
3151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __POSIX_VISIBLE >= 199506
3171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	 flockfile(FILE *);
3181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 ftrylockfile(FILE *);
3191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	 funlockfile(FILE *);
3201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
3221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * These are normally used through macros as defined below, but POSIX
3231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * requires functions as well.
3241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
3251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 getc_unlocked(FILE *);
3261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 getchar_unlocked(void);
3271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 putc_unlocked(int, FILE *);
3281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 putchar_unlocked(int);
3291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* __POSIX_VISIBLE >= 199506 */
3301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __XPG_VISIBLE
3321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectchar	*tempnam(const char *, const char *);
3331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
3341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
3351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* __BSD_VISIBLE || __POSIX_VISIBLE || __XPG_VISIBLE */
3371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
3391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Routines that are purely local.
3401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
3411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __BSD_VISIBLE
3421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
3431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 asprintf(char **, const char *, ...)
3441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__format__ (printf, 2, 3)))
3451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__nonnull__ (2)));
3461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectchar	*fgetln(FILE *, size_t *);
3471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 fpurge(FILE *);
3481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 getw(FILE *);
3491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 putw(int, FILE *);
3501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectvoid	 setbuffer(FILE *, char *, int);
3511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 setlinebuf(FILE *);
3521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	 vasprintf(char **, const char *, __va_list)
3531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__format__ (printf, 2, 0)))
3541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		__attribute__((__nonnull__ (2)));
3551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
3561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
3581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Stdio function-access interface.
3591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
3601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
3611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectFILE	*funopen(const void *,
3621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		int (*)(void *, char *, int),
3631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		int (*)(void *, const char *, int),
3641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		fpos_t (*)(void *, fpos_t, int),
3651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		int (*)(void *));
3661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
3671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	fropen(cookie, fn) funopen(cookie, fn, 0, 0, 0)
3681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0)
3691dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* __BSD_VISIBLE */
3701dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3711dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
3721dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Functions internal to the implementation.
3731dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
3741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
3751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	__srget(FILE *);
3761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectint	__swbuf(int, FILE *);
3771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
3781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
3791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
3801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * The __sfoo macros are here so that we can
3811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * define function versions in the C library.
3821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
3831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++))
3841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if defined(__GNUC__)
3851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline int __sputc(int _c, FILE *_p) {
3861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
3871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		return (*_p->_p++ = _c);
3881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	else
3891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		return (__swbuf(_c, _p));
3901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
3911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#else
3921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
3931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This has been tuned to generate reasonable code on the vax using pcc.
3941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
3951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__sputc(c, p) \
3961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	(--(p)->_w < 0 ? \
3971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		(p)->_w >= (p)->_lbfsize ? \
3981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project			(*(p)->_p = (c)), *(p)->_p != '\n' ? \
3991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project				(int)*(p)->_p++ : \
4001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project				__swbuf('\n', p) : \
4011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project			__swbuf((int)(c), p) : \
4021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project		(*(p)->_p = (c), (int)*(p)->_p++))
4031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
4041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
4051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__sfeof(p)	(((p)->_flags & __SEOF) != 0)
4061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__sferror(p)	(((p)->_flags & __SERR) != 0)
4071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__sclearerr(p)	((void)((p)->_flags &= ~(__SERR|__SEOF)))
4081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	__sfileno(p)	((p)->_file)
4091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
410f582340a6a48588aa50da17e1620e8f91b146941Kenny Rootextern	int __isthreaded;
4111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
412f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	feof(p)		(!__isthreaded ? __sfeof(p) : (feof)(p))
413f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	ferror(p)	(!__isthreaded ? __sferror(p) : (ferror)(p))
414f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	clearerr(p)	(!__isthreaded ? __sclearerr(p) : (clearerr)(p))
4151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
4161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __POSIX_VISIBLE
417f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	fileno(p)	(!__isthreaded ? __sfileno(p) : (fileno)(p))
4181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
4191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
420f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	getc(fp)	(!__isthreaded ? __sgetc(fp) : (getc)(fp))
421f582340a6a48588aa50da17e1620e8f91b146941Kenny Root
422f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#if __BSD_VISIBLE
423f582340a6a48588aa50da17e1620e8f91b146941Kenny Root/*
424f582340a6a48588aa50da17e1620e8f91b146941Kenny Root * The macro implementations of putc and putc_unlocked are not
425f582340a6a48588aa50da17e1620e8f91b146941Kenny Root * fully POSIX compliant; they do not set errno on failure
426f582340a6a48588aa50da17e1620e8f91b146941Kenny Root */
427f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define putc(x, fp)	(!__isthreaded ? __sputc(x, fp) : (putc)(x, fp))
428f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#endif /* __BSD_VISIBLE */
429f582340a6a48588aa50da17e1620e8f91b146941Kenny Root
4301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef lint
431f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#if __POSIX_VISIBLE >= 199506
4321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	getc_unlocked(fp)	__sgetc(fp)
4331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
4341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * The macro implementations of putc and putc_unlocked are not
4351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * fully POSIX compliant; they do not set errno on failure
4361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
4371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#if __BSD_VISIBLE
4381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define putc_unlocked(x, fp)	__sputc(x, fp)
4391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* __BSD_VISIBLE */
440f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#endif /* __POSIX_VISIBLE >= 199506 */
4411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* lint */
4421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
4431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	getchar()	getc(stdin)
4441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define	putchar(x)	putc(x, stdout)
445f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	getchar_unlocked()	getc_unlocked(stdin)
446f582340a6a48588aa50da17e1620e8f91b146941Kenny Root#define	putchar_unlocked(c)	putc_unlocked(c, stdout)
4471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
448fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross#ifdef _GNU_SOURCE
449fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross/*
450fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross * glibc defines dprintf(int, const char*, ...), which is poorly named
451fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross * and likely to conflict with locally defined debugging printfs
452fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross * fdprintf is a better name, and some programs that use fdprintf use a
453fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross * #define fdprintf dprintf for compatibility
454fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross */
455fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Crossint fdprintf(int, const char*, ...);
456fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Crossint vfdprintf(int, const char*, __va_list);
457fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross#endif /* _GNU_SOURCE */
458fc10b24accd082fb33c8f92ff8b92481c22fe3dcColin Cross
4591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _STDIO_H_ */
460