Home | History | Annotate | Download | only in ucbhead
      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 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     48 
     49 #include <sys/feature_tests.h>
     50 #include <sys/va_list.h>
     51 #include <stdio_tag.h>
     52 #include <stdio_impl.h>
     53 
     54 #ifdef __cplusplus
     55 extern "C" {
     56 #endif
     57 
     58 #ifndef BSD
     59 #define	BSD
     60 #endif
     61 
     62 #ifndef _SIZE_T
     63 #define	_SIZE_T
     64 #if !defined(_LP64) && defined(__cplusplus)
     65 typedef unsigned int	size_t;
     66 #else
     67 typedef unsigned long	size_t;
     68 #endif
     69 #endif
     70 
     71 #ifndef _SSIZE_T
     72 #define	_SSIZE_T
     73 #if !defined(_LP64) && defined(__cplusplus)
     74 typedef int	ssize_t;
     75 #else
     76 typedef long	ssize_t;
     77 #endif
     78 #endif
     79 
     80 typedef long	fpos_t;
     81 
     82 #ifndef NULL
     83 #define	NULL		0
     84 #endif
     85 
     86 #if defined(__STDC__)
     87 
     88 #if #machine(pdp11)
     89 #define	BUFSIZ		512
     90 #define	_STDIO_REVERSE
     91 #elif #machine(u370)
     92 #define	BUFSIZ		4096
     93 #define	_STDIO_REVERSE
     94 #define	_STDIO_ALLOCATE
     95 #else
     96 #define	BUFSIZ		1024
     97 #endif
     98 
     99 #else	/* !defined(__STDC__) */
    100 
    101 #if pdp11 || u370
    102 
    103 #if pdp11
    104 #define	BUFSIZ		512
    105 #define	_STDIO_REVERSE
    106 #else 	/* u370 */
    107 #define	BUFSIZ		4096
    108 #define	_STDIO_REVERSE
    109 #define	_STDIO_ALLOCATE
    110 #endif
    111 
    112 #else
    113 #define	BUFSIZ		1024
    114 #endif
    115 
    116 #endif	/* __STDC__ */
    117 
    118 #if defined(__i386)
    119 #define	_NFILE	60	/* initial number of streams: Intel x86 ABI */
    120 #else
    121 #define	_NFILE	20	/* initial number of streams: SPARC ABI and default */
    122 #endif
    123 
    124 #define	_SBFSIZ	8	/* compatibility with shared libs */
    125 
    126 #define	_IOFBF		0000	/* full buffered */
    127 #define	_IOLBF		0100	/* line buffered */
    128 #define	_IONBF		0004	/* not buffered */
    129 #define	_IOEOF		0020	/* EOF reached on read */
    130 #define	_IOERR		0040	/* I/O error from system */
    131 
    132 #define	_IOREAD		0001	/* currently reading */
    133 #define	_IOWRT		0002	/* currently writing */
    134 #define	_IORW		0200	/* opened for reading and writing */
    135 #define	_IOMYBUF	0010	/* stdio malloc()'d buffer */
    136 
    137 #ifndef EOF
    138 #define	EOF	(-1)
    139 #endif
    140 
    141 #define	FOPEN_MAX	_NFILE
    142 #define	FILENAME_MAX    1024	/* max # of characters in a path name */
    143 
    144 #define	SEEK_SET	0
    145 #define	SEEK_CUR	1
    146 #define	SEEK_END	2
    147 #define	TMP_MAX		17576	/* 26 * 26 * 26 */
    148 
    149 #if !defined(_STRICT_STDC) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
    150 #define	L_ctermid	9
    151 #define	L_cuserid	9
    152 #define	P_tmpdir	"/var/tmp/"
    153 #endif
    154 
    155 #define	L_tmpnam	25	/* (sizeof(P_tmpdir) + 15) */
    156 
    157 #if defined(__STDC__)
    158 #define	stdin	(&__iob[0])
    159 #define	stdout	(&__iob[1])
    160 #define	stderr	(&__iob[2])
    161 #else
    162 #define	stdin	(&_iob[0])
    163 #define	stdout	(&_iob[1])
    164 #define	stderr	(&_iob[2])
    165 #endif
    166 
    167 #ifndef	_FILEDEFED
    168 #define	_FILEDEFED
    169 typedef	__FILE FILE;
    170 #endif
    171 
    172 #if defined(__STDC__)
    173 extern FILE		__iob[_NFILE];
    174 #else
    175 extern FILE		_iob[_NFILE];
    176 #endif
    177 extern FILE		*_lastbuf;
    178 extern unsigned char 	*_bufendtab[];
    179 #ifndef _STDIO_ALLOCATE
    180 extern unsigned char	 _sibuf[], _sobuf[];
    181 #endif
    182 
    183 /* Large file interfaces */
    184 /* transition back from explicit 64-bit offset to implicit (64-bit) offset */
    185 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
    186 #ifdef __PRAGMA_REDEFINE_EXTNAME
    187 #pragma redefine_extname	fopen64		fopen
    188 #pragma redefine_extname	freopen64	freopen
    189 #else
    190 #define	fopen64			fopen
    191 #define	freopen64		freopen
    192 #endif
    193 #endif
    194 
    195 /* transition from 32-bit offset to explicit 64-bit offset */
    196 #if !defined(_LP64) && (_FILE_OFFSET_BITS == 64)
    197 #ifdef __PRAGMA_REDEFINE_EXTNAME
    198 #pragma redefine_extname	fopen		fopen64
    199 #pragma redefine_extname	freopen		freopen64
    200 #else
    201 #define	fopen			fopen64
    202 #define	freopen			freopen64
    203 #endif
    204 #endif
    205 
    206 #if defined(__STDC__)
    207 
    208 extern int	remove(const char *);
    209 extern int	rename(const char *, const char *);
    210 extern int	fclose(FILE *);
    211 extern int	fflush(FILE *);
    212 extern FILE	*fopen(const char *, const char *);
    213 extern FILE	*freopen(const char *, const char *, FILE *);
    214 extern void	setbuf(FILE *, char *);
    215 extern void	setbuffer(FILE *, char *, int);
    216 extern int	setlinebuf(FILE *);
    217 extern int	setvbuf(FILE *, char *, int, size_t);
    218 /* PRINTFLIKE2 */
    219 extern int	fprintf(FILE *, const char *, ...);
    220 /* SCANFLIKE2 */
    221 extern int	fscanf(FILE *, const char *, ...);
    222 /* PRINTFLIKE1 */
    223 extern int	printf(const char *, ...);
    224 /* SCANFLIKE1 */
    225 extern int	scanf(const char *, ...);
    226 /* PRINTFLIKE2 */
    227 extern char	*sprintf(const char *, const char *, ...);
    228 /* SCANFLIKE2 */
    229 extern int	sscanf(const char *, const char *, ...);
    230 extern int	vfprintf(FILE *, const char *, __va_list);
    231 extern int	vprintf(const char *, __va_list);
    232 extern char	*vsprintf(char *, char *, __va_list);
    233 extern int	fgetc(FILE *);
    234 extern char	*fgets(char *, int, FILE *);
    235 extern int	fputc(int, FILE *);
    236 extern int	fputs(const char *, FILE *);
    237 extern int	getc(FILE *);
    238 extern int	getchar(void);
    239 extern char	*gets(char *);
    240 extern int	putc(int, FILE *);
    241 extern int	putchar(int);
    242 extern int	puts(const char *);
    243 extern int	ungetc(int, FILE *);
    244 extern size_t	fread(void *, size_t, size_t, FILE *);
    245 extern size_t	fwrite(const void *, size_t, size_t, FILE *);
    246 extern int	fgetpos(FILE *, fpos_t *);
    247 extern int	fseek(FILE *, long, int);
    248 extern int	fsetpos(FILE *, const fpos_t *);
    249 extern long	ftell(FILE *);
    250 extern void	rewind(FILE *);
    251 extern void	clearerr(FILE *);
    252 extern int	feof(FILE *);
    253 extern int	ferror(FILE *);
    254 extern void	perror(const char *);
    255 
    256 extern int	__filbuf(FILE *);
    257 extern int	__flsbuf(int, FILE *);
    258 
    259 #if !defined(_STRICT_STDC) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE)
    260 	/* non-ANSI standard compilation */
    261 
    262 extern FILE    *fdopen(int, const char *);
    263 extern FILE    *popen(const char *, const char *);
    264 extern char    *ctermid(char *);
    265 extern char    *cuserid(char *);
    266 extern char    *tempnam(const char *, const char *);
    267 extern int	getw(FILE *);
    268 extern int	putw(int, FILE *);
    269 extern int	pclose(FILE *);
    270 extern int	system(const char *);
    271 extern int	fileno(FILE *);
    272 
    273 #endif	/* !defined(_STRICT_STDC) */
    274 
    275 #else	/* !defined __STDC__ */
    276 #define	_bufend(p)	_bufendtab[fileno(p)]
    277 #define	_bufsiz(p)	(_bufend(p) - (p)->_base)
    278 
    279 extern FILE	*fopen(), *fdopen(), *freopen(), *popen();
    280 extern long	ftell();
    281 extern void	rewind(), setbuf(), setbuffer();
    282 extern int	setlinebuf();
    283 extern char	*ctermid(), *cuserid(), *fgets(), *gets(), *sprintf(),
    284 		*vsprintf();
    285 extern int	fclose(), fflush(), fread(), fwrite(), fseek(), fgetc(),
    286 		getw(), pclose(), printf(), fprintf(),
    287 		vprintf(), vfprintf(), fputc(), putw(),
    288 		puts(), fputs(), scanf(), fscanf(), sscanf(),
    289 		setvbuf(), system(), ungetc();
    290 extern int	fileno();
    291 extern int	getc(), getchar(), putc(), putchar(), feof(), ferror();
    292 extern void	clearerr();
    293 
    294 #endif	/* __STDC__ */
    295 
    296 #ifndef __lint
    297 
    298 #ifndef _LP64
    299 
    300 #ifdef __STDC__
    301 
    302 #define	getc(p)		(--(p)->_cnt < 0 ? __filbuf(p) : (int)*(p)->_ptr++)
    303 #define	putc(x, p)	(--(p)->_cnt < 0 ? __flsbuf((x), (p)) \
    304 				: (int)(*(p)->_ptr++ = (x)))
    305 
    306 #else /* __STDC__ */
    307 
    308 #define	getc(p)		(--(p)->_cnt < 0 ? _filbuf(p) : (int)*(p)->_ptr++)
    309 #define	putc(x, p)	(--(p)->_cnt < 0 ? \
    310 			_flsbuf((unsigned char) (x), (p)) : \
    311 			(int)(*(p)->_ptr++ = (unsigned char)(x)))
    312 #endif /* __STDC__ */
    313 
    314 #define	clearerr(p)	((void) ((p)->_flag &= ~(_IOERR | _IOEOF)))
    315 #define	feof(p)		((p)->_flag & _IOEOF)
    316 #define	ferror(p)	((p)->_flag & _IOERR)
    317 
    318 #endif /* _LP64 */
    319 
    320 #define	getchar()	getc(stdin)
    321 #define	putchar(x)	putc((x), stdout)
    322 
    323 #endif /* __lint */
    324 
    325 #if	defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
    326 	    !defined(__PRAGMA_REDEFINE_EXTNAME))
    327 #if defined(__STDC__)
    328 extern FILE	*fopen64(const char *, const char *);
    329 extern FILE	*freopen64(const char *, const char *, FILE *);
    330 #else
    331 extern FILE	*fopen64(), *freopen64();
    332 #endif
    333 #endif	/* _LARGEFILE64_SOURCE... */
    334 
    335 #ifdef __cplusplus
    336 }
    337 #endif
    338 
    339 #endif	/* _STDIO_H */
    340