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 52 #ifdef __cplusplus 53 extern "C" { 54 #endif 55 56 #ifndef BSD 57 #define BSD 58 #endif 59 60 #ifndef _SIZE_T 61 #define _SIZE_T 62 #if !defined(_LP64) && defined(__cplusplus) 63 typedef unsigned int size_t; 64 #else 65 typedef unsigned long size_t; 66 #endif 67 #endif 68 69 #ifndef _SSIZE_T 70 #define _SSIZE_T 71 #if !defined(_LP64) && defined(__cplusplus) 72 typedef int ssize_t; 73 #else 74 typedef long ssize_t; 75 #endif 76 #endif 77 78 typedef long fpos_t; 79 80 #ifndef NULL 81 #define NULL 0 82 #endif 83 84 #define BUFSIZ 1024 85 86 #if defined(__i386) 87 #define _NFILE 60 /* initial number of streams: Intel x86 ABI */ 88 #else 89 #define _NFILE 20 /* initial number of streams: SPARC ABI and default */ 90 #endif 91 92 #define _SBFSIZ 8 /* compatibility with shared libs */ 93 94 #define _IOFBF 0000 /* full buffered */ 95 #define _IOLBF 0100 /* line buffered */ 96 #define _IONBF 0004 /* not buffered */ 97 #define _IOEOF 0020 /* EOF reached on read */ 98 #define _IOERR 0040 /* I/O error from system */ 99 100 #define _IOREAD 0001 /* currently reading */ 101 #define _IOWRT 0002 /* currently writing */ 102 #define _IORW 0200 /* opened for reading and writing */ 103 #define _IOMYBUF 0010 /* stdio malloc()'d buffer */ 104 105 #ifndef EOF 106 #define EOF (-1) 107 #endif 108 109 #define FOPEN_MAX _NFILE 110 #define FILENAME_MAX 1024 /* max # of characters in a path name */ 111 112 #define SEEK_SET 0 113 #define SEEK_CUR 1 114 #define SEEK_END 2 115 #define TMP_MAX 17576 /* 26 * 26 * 26 */ 116 117 #if !defined(_STRICT_STDC) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) 118 #define L_ctermid 9 119 #define L_cuserid 9 120 #define P_tmpdir "/var/tmp/" 121 #endif 122 123 #define L_tmpnam 25 /* (sizeof(P_tmpdir) + 15) */ 124 125 #define stdin (&__iob[0]) 126 #define stdout (&__iob[1]) 127 #define stderr (&__iob[2]) 128 129 #ifndef _FILEDEFED 130 #define _FILEDEFED 131 typedef __FILE FILE; 132 #endif 133 134 extern FILE __iob[_NFILE]; 135 extern FILE *_lastbuf; 136 extern unsigned char *_bufendtab[]; 137 extern unsigned char _sibuf[], _sobuf[]; 138 139 /* Large file interfaces */ 140 /* transition back from explicit 64-bit offset to implicit (64-bit) offset */ 141 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE) 142 #ifdef __PRAGMA_REDEFINE_EXTNAME 143 #pragma redefine_extname fopen64 fopen 144 #pragma redefine_extname freopen64 freopen 145 #else 146 #define fopen64 fopen 147 #define freopen64 freopen 148 #endif 149 #endif 150 151 /* transition from 32-bit offset to explicit 64-bit offset */ 152 #if !defined(_LP64) && (_FILE_OFFSET_BITS == 64) 153 #ifdef __PRAGMA_REDEFINE_EXTNAME 154 #pragma redefine_extname fopen fopen64 155 #pragma redefine_extname freopen freopen64 156 #else 157 #define fopen fopen64 158 #define freopen freopen64 159 #endif 160 #endif 161 162 163 extern int remove(const char *); 164 extern int rename(const char *, const char *); 165 extern int fclose(FILE *); 166 extern int fflush(FILE *); 167 extern FILE *fopen(const char *, const char *); 168 extern FILE *freopen(const char *, const char *, FILE *); 169 extern void setbuf(FILE *, char *); 170 extern void setbuffer(FILE *, char *, int); 171 extern int setlinebuf(FILE *); 172 extern int setvbuf(FILE *, char *, int, size_t); 173 /* PRINTFLIKE2 */ 174 extern int fprintf(FILE *, const char *, ...); 175 /* SCANFLIKE2 */ 176 extern int fscanf(FILE *, const char *, ...); 177 /* PRINTFLIKE1 */ 178 extern int printf(const char *, ...); 179 /* SCANFLIKE1 */ 180 extern int scanf(const char *, ...); 181 /* PRINTFLIKE2 */ 182 extern char *sprintf(const char *, const char *, ...); 183 /* SCANFLIKE2 */ 184 extern int sscanf(const char *, const char *, ...); 185 extern int vfprintf(FILE *, const char *, __va_list); 186 extern int vprintf(const char *, __va_list); 187 extern char *vsprintf(char *, char *, __va_list); 188 extern int fgetc(FILE *); 189 extern char *fgets(char *, int, FILE *); 190 extern int fputc(int, FILE *); 191 extern int fputs(const char *, FILE *); 192 extern int getc(FILE *); 193 extern int getchar(void); 194 extern char *gets(char *); 195 extern int putc(int, FILE *); 196 extern int putchar(int); 197 extern int puts(const char *); 198 extern int ungetc(int, FILE *); 199 extern size_t fread(void *, size_t, size_t, FILE *); 200 extern size_t fwrite(const void *, size_t, size_t, FILE *); 201 extern int fgetpos(FILE *, fpos_t *); 202 extern int fseek(FILE *, long, int); 203 extern int fsetpos(FILE *, const fpos_t *); 204 extern long ftell(FILE *); 205 extern void rewind(FILE *); 206 extern void clearerr(FILE *); 207 extern int feof(FILE *); 208 extern int ferror(FILE *); 209 extern void perror(const char *); 210 211 extern int __filbuf(FILE *); 212 extern int __flsbuf(int, FILE *); 213 214 #if !defined(_STRICT_STDC) || defined(_POSIX_SOURCE) || defined(_XOPEN_SOURCE) 215 /* non-ANSI standard compilation */ 216 217 extern FILE *fdopen(int, const char *); 218 extern FILE *popen(const char *, const char *); 219 extern char *ctermid(char *); 220 extern char *cuserid(char *); 221 extern char *tempnam(const char *, const char *); 222 extern int getw(FILE *); 223 extern int putw(int, FILE *); 224 extern int pclose(FILE *); 225 extern int system(const char *); 226 extern int fileno(FILE *); 227 228 #endif /* !defined(_STRICT_STDC) */ 229 230 231 #ifndef __lint 232 233 #ifndef _LP64 234 235 236 #define getc(p) (--(p)->_cnt < 0 ? __filbuf(p) : (int)*(p)->_ptr++) 237 #define putc(x, p) (--(p)->_cnt < 0 ? __flsbuf((x), (p)) \ 238 : (int)(*(p)->_ptr++ = (x))) 239 240 241 #define clearerr(p) ((void) ((p)->_flag &= ~(_IOERR | _IOEOF))) 242 #define feof(p) ((p)->_flag & _IOEOF) 243 #define ferror(p) ((p)->_flag & _IOERR) 244 245 #endif /* _LP64 */ 246 247 #define getchar() getc(stdin) 248 #define putchar(x) putc((x), stdout) 249 250 #endif /* __lint */ 251 252 #if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \ 253 !defined(__PRAGMA_REDEFINE_EXTNAME)) 254 extern FILE *fopen64(const char *, const char *); 255 extern FILE *freopen64(const char *, const char *, FILE *); 256 #endif /* _LARGEFILE64_SOURCE... */ 257 258 #ifdef __cplusplus 259 } 260 #endif 261 262 #endif /* _STDIO_H */ 263