diff options
Diffstat (limited to 'usr/src/head/stdio.h')
-rw-r--r-- | usr/src/head/stdio.h | 461 |
1 files changed, 461 insertions, 0 deletions
diff --git a/usr/src/head/stdio.h b/usr/src/head/stdio.h new file mode 100644 index 0000000000..0c1ac2d77a --- /dev/null +++ b/usr/src/head/stdio.h @@ -0,0 +1,461 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License"). You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* Copyright (c) 1988 AT&T */ +/* All Rights Reserved */ + + +/* + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * User-visible pieces of the ANSI C standard I/O package. + */ + +#ifndef _STDIO_H +#define _STDIO_H + +#pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 2.34.1.2 */ + +#include <sys/feature_tests.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Do all of our 'redefine_extname' processing before + * declarations of the associated functions are seen. + * This is necessary to keep gcc happy. + */ +#if defined(__PRAGMA_REDEFINE_EXTNAME) + +/* large file compilation environment setup */ +#if !defined(_LP64) && _FILE_OFFSET_BITS == 64 +#pragma redefine_extname fopen fopen64 +#pragma redefine_extname freopen freopen64 +#pragma redefine_extname tmpfile tmpfile64 +#pragma redefine_extname fgetpos fgetpos64 +#pragma redefine_extname fsetpos fsetpos64 +#if defined(_LARGEFILE_SOURCE) +#pragma redefine_extname fseeko fseeko64 +#pragma redefine_extname ftello ftello64 +#endif /* _LARGEFILE_SOURCE */ +#endif /* !defined(_LP64) && _FILE_OFFSET_BITS == 64 */ + +/* In the LP64 compilation environment, all APIs are already large file */ +#if defined(_LP64) && defined(_LARGEFILE64_SOURCE) +#pragma redefine_extname fopen64 fopen +#pragma redefine_extname freopen64 freopen +#pragma redefine_extname tmpfile64 tmpfile +#pragma redefine_extname fgetpos64 fgetpos +#pragma redefine_extname fsetpos64 fsetpos +#if defined(_LARGEFILE_SOURCE) +#pragma redefine_extname fseeko64 fseeko +#pragma redefine_extname ftello64 ftello +#endif /* _LARGEFILE_SOURCE */ +#endif /* defined(_LP64) && defined(_LARGEFILE64_SOURCE) */ + +#endif /* __PRAGMA_REDEFINE_EXTNAME */ + +#ifdef __cplusplus +} +#endif + +#include <iso/stdio_iso.h> + +/* + * If feature test macros are set that enable interfaces that use types + * defined in <sys/types.h>, get those types by doing the include. + * + * Note that in asking for the interfaces associated with this feature test + * macro one also asks for definitions of the POSIX types. + */ + +/* + * Allow global visibility for symbols defined in + * C++ "std" namespace in <iso/stdio_iso.h>. + */ +#if __cplusplus >= 199711L +using std::FILE; +using std::size_t; +using std::fpos_t; +using std::remove; +using std::rename; +using std::tmpfile; +using std::tmpnam; +using std::fclose; +using std::fflush; +using std::fopen; +using std::freopen; +using std::setbuf; +using std::setvbuf; +using std::fprintf; +using std::fscanf; +using std::printf; +using std::scanf; +using std::sprintf; +using std::sscanf; +using std::vfprintf; +using std::vprintf; +using std::vsprintf; +using std::fgetc; +using std::fgets; +using std::fputc; +using std::fputs; +using std::getc; +using std::getchar; +using std::gets; +using std::putc; +using std::putchar; +using std::puts; +using std::ungetc; +using std::fread; +using std::fwrite; +using std::fgetpos; +using std::fseek; +using std::fsetpos; +using std::ftell; +using std::rewind; +using std::clearerr; +using std::feof; +using std::ferror; +using std::perror; +#ifndef _LP64 +using std::__filbuf; +using std::__flsbuf; +#endif /* _LP64 */ +#endif /* __cplusplus >= 199711L */ + +/* + * This header needs to be included here because it relies on the global + * visibility of FILE and size_t in the C++ environment. + */ +#include <iso/stdio_c99.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_LARGEFILE_SOURCE) || defined(_XPG5) +#ifndef _OFF_T +#define _OFF_T +#if defined(_LP64) || _FILE_OFFSET_BITS == 32 +typedef long off_t; +#else +typedef __longlong_t off_t; +#endif +#ifdef _LARGEFILE64_SOURCE +#ifdef _LP64 +typedef off_t off64_t; +#else +typedef __longlong_t off64_t; +#endif +#endif /* _LARGEFILE64_SOURCE */ +#endif /* _OFF_T */ +#endif /* _LARGEFILE_SOURCE */ + +#ifdef _LARGEFILE64_SOURCE +#ifdef _LP64 +typedef fpos_t fpos64_t; +#else +typedef __longlong_t fpos64_t; +#endif +#endif /* _LARGEFILE64_SOURCE */ + +/* + * XPG4 requires that va_list be defined in <stdio.h> "as described in + * <stdarg.h>". ANSI-C and POSIX require that the namespace of <stdio.h> + * not be polluted with this name. + */ +#if defined(_XPG4) && !defined(_VA_LIST) +#define _VA_LIST +typedef __va_list va_list; +#endif /* defined(_XPG4 && !defined(_VA_LIST) */ + +#if defined(__EXTENSIONS__) || !defined(_STRICT_STDC) || \ + defined(__XOPEN_OR_POSIX) + +#define L_ctermid 9 + +/* Marked LEGACY in SUSv2 and removed in SUSv3 */ +#if !defined(_XPG6) || defined(__EXTENSIONS__) +#define L_cuserid 9 +#endif + +#endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC) ... */ + +#if defined(__EXTENSIONS__) || \ + (!defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE)) || \ + defined(_XOPEN_SOURCE) + +#define P_tmpdir "/var/tmp/" +#endif /* defined(__EXTENSIONS__) || (!defined(_STRICT_STDC) ... */ + +#ifndef _STDIO_ALLOCATE +extern unsigned char _sibuf[], _sobuf[]; +#endif + +/* large file compilation environment setup */ +#if !defined(_LP64) && _FILE_OFFSET_BITS == 64 +#if !defined(__PRAGMA_REDEFINE_EXTNAME) +#if defined(__STDC__) +extern FILE *fopen64(const char *, const char *); +extern FILE *freopen64(const char *, const char *, FILE *); +extern FILE *tmpfile64(void); +extern int fgetpos64(FILE *, fpos_t *); +extern int fsetpos64(FILE *, const fpos_t *); +#else /* defined(__STDC__) */ +extern FILE *fopen64(); +extern FILE *freopen64(); +extern FILE *tmpfile64(); +extern int fgetpos64(); +extern int fsetpos64(); +#endif /* defined(__STDC__) */ +#define fopen fopen64 +#define freopen freopen64 +#define tmpfile tmpfile64 +#define fgetpos fgetpos64 +#define fsetpos fsetpos64 +#ifdef _LARGEFILE_SOURCE +#define fseeko fseeko64 +#define ftello ftello64 +#endif +#endif /* !__PRAGMA_REDEFINE_EXTNAME */ +#endif /* !_LP64 && _FILE_OFFSET_BITS == 64 */ + +#ifndef _LP64 +extern unsigned char *_bufendtab[]; +extern FILE *_lastbuf; +#endif + +/* In the LP64 compilation environment, all APIs are already large file */ +#if defined(_LP64) && defined(_LARGEFILE64_SOURCE) +#if !defined(__PRAGMA_REDEFINE_EXTNAME) +#define fopen64 fopen +#define freopen64 freopen +#define tmpfile64 tmpfile +#define fgetpos64 fgetpos +#define fsetpos64 fsetpos +#ifdef _LARGEFILE_SOURCE +#define fseeko64 fseeko +#define ftello64 ftello +#endif +#endif /* !__PRAGMA_REDEFINE_EXTNAME */ +#endif /* _LP64 && _LARGEFILE64_SOURCE */ + +#if defined(__STDC__) + +#if defined(__EXTENSIONS__) || \ + (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \ + defined(_REENTRANT) +extern char *tmpnam_r(char *); +#endif + +#if defined(__EXTENSIONS__) || \ + (!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) +extern void setbuffer(FILE *, char *, size_t); +extern int setlinebuf(FILE *); +#endif + +/* + * The following are known to POSIX and XOPEN, but not to ANSI-C. + */ +#if defined(__EXTENSIONS__) || \ + !defined(_STRICT_STDC) || defined(__XOPEN_OR_POSIX) + +extern FILE *fdopen(int, const char *); +extern char *ctermid(char *); +extern int fileno(FILE *); + +#endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC) ... */ + +/* + * The following are known to POSIX.1c, but not to ANSI-C or XOPEN. + */ +#if defined(__EXTENSIONS__) || defined(_REENTRANT) || \ + (_POSIX_C_SOURCE - 0 >= 199506L) +extern void flockfile(FILE *); +extern int ftrylockfile(FILE *); +extern void funlockfile(FILE *); +extern int getc_unlocked(FILE *); +extern int getchar_unlocked(void); +extern int putc_unlocked(int, FILE *); +extern int putchar_unlocked(int); + +#endif /* defined(__EXTENSIONS__) || defined(_REENTRANT).. */ + +/* + * The following are known to XOPEN, but not to ANSI-C or POSIX. + */ +#if defined(__EXTENSIONS__) || !defined(_STRICT_STDC) || \ + defined(_XOPEN_SOURCE) +extern FILE *popen(const char *, const char *); +extern char *tempnam(const char *, const char *); +extern int pclose(FILE *); +#if !defined(_XOPEN_SOURCE) +extern int getsubopt(char **, char *const *, char **); +#endif /* !defined(_XOPEN_SOURCE) */ + +/* Marked LEGACY in SUSv2 and removed in SUSv3 */ +#if !defined(_XPG6) || defined(__EXTENSIONS__) +extern char *cuserid(char *); +extern int getopt(int, char *const *, const char *); +extern char *optarg; +extern int optind, opterr, optopt; +extern int getw(FILE *); +extern int putw(int, FILE *); +#endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */ + +#endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC) ... */ + +/* + * The following are defined as part of the Large File Summit interfaces. + */ +#if defined(_LARGEFILE_SOURCE) || defined(_XPG5) +extern int fseeko(FILE *, off_t, int); +extern off_t ftello(FILE *); +#endif + +/* + * The following are defined as part of the transitional Large File Summit + * interfaces. + */ +#if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \ + !defined(__PRAGMA_REDEFINE_EXTNAME)) +extern FILE *fopen64(const char *, const char *); +extern FILE *freopen64(const char *, const char *, FILE *); +extern FILE *tmpfile64(void); +extern int fgetpos64(FILE *, fpos64_t *); +extern int fsetpos64(FILE *, const fpos64_t *); +extern int fseeko64(FILE *, off64_t, int); +extern off64_t ftello64(FILE *); +#endif + +#else /* !defined __STDC__ */ + +#ifndef _LP64 +#define _bufend(p) ((fileno(p) < _NFILE) ? _bufendtab[fileno(p)] : \ + (unsigned char *)_realbufend(p)) +#define _bufsiz(p) (_bufend(p) - (p)->_base) +#endif /* _LP64 */ + +#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \ + defined(_REENTRANT) +extern char *tmpnam_r(); +#endif + +#if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) +extern void setbuffer(); +extern int setlinebuf(); +#endif + +#if defined(__EXTENSIONS__) || defined(__XOPEN_OR_POSIX) +extern FILE *fdopen(); +extern char *ctermid(); +extern int fileno(); +#endif /* defined(__EXTENSIONS__) || defined(__XOPEN_OR_POSIX) */ + +#if defined(__EXTENSIONS__) || defined(_REENTRANT) || \ + (_POSIX_C_SOURCE - 0 >= 199506L) +extern void flockfile(); +extern int ftrylockfile(); +extern void funlockfile(); +extern int getc_unlocked(); +extern int getchar_unlocked(); +extern int putc_unlocked(); +extern int putchar_unlocked(); +#endif /* defined(__EXTENSIONS__) || defined(_REENTRANT).. */ + +#if defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) +extern FILE *popen(); +extern char *tempnam(); +extern int pclose(); + +#if !defined(_XOPEN_SOURCE) +extern int getsubopt(); +#endif /* !defined(_XOPEN_SOURCE) */ + +#if !defined(_XPG6) || defined(__EXTENSIONS__) +extern char *cuserid(); +extern int getopt(); +extern char *optarg; +extern int optind, opterr, optopt; +extern int getw(); +extern int putw(); +#endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */ + +#endif /* defined(__EXTENSIONS__) || defined(_XOPEN_SOURCE) */ + +#if defined(_LARGEFILE_SOURCE) || defined(_XPG5) +extern int fseeko(); +extern off_t ftello(); +#endif + +#if defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \ + !defined(__PRAGMA_REDEFINE_EXTNAME)) +extern FILE *fopen64(); +extern FILE *freopen64(); +extern FILE *tmpfile64(); +extern int fgetpos64(); +extern int fsetpos64(); +extern int fseeko64(); +extern off64_t ftello64(); +#endif + +#endif /* __STDC__ */ + +#if !defined(__lint) + +#if defined(__EXTENSIONS__) || defined(_REENTRANT) || \ + (_POSIX_C_SOURCE - 0 >= 199506L) +#ifndef _LP64 +#ifdef __STDC__ +#define getc_unlocked(p) (--(p)->_cnt < 0 \ + ? __filbuf(p) \ + : (int)*(p)->_ptr++) +#define putc_unlocked(x, p) (--(p)->_cnt < 0 \ + ? __flsbuf((x), (p)) \ + : (int)(*(p)->_ptr++ = \ + (unsigned char) (x))) +#else +#define getc_unlocked(p) (--(p)->_cnt < 0 \ + ? _filbuf(p) \ + : (int)*(p)->_ptr++) +#define putc_unlocked(x, p) (--(p)->_cnt < 0 \ + ? _flsbuf((x), (p)) \ + : (int)(*(p)->_ptr++ = \ + (unsigned char) (x))) +#endif /* __STDC__ */ +#endif /* _LP64 */ +#define getchar_unlocked() getc_unlocked(stdin) +#define putchar_unlocked(x) putc_unlocked((x), stdout) +#endif /* defined(__EXTENSIONS__) || defined(_REENTRANT).. */ + +#endif /* !defined(__lint) */ + +#ifdef __cplusplus +} +#endif + +#endif /* _STDIO_H */ |