Mercurial > ecos
diff packages/language/c/libc/stdio/current/include/stdio.h @ 115:6ed91473a1cd ecos-sw-2000-08-21
Merge from eCos master repository on 2000-08-21-22:40:54-BST
| author | jlarmour |
|---|---|
| date | Fri, 25 Aug 2000 17:32:38 +0000 |
| parents | |
| children | d2f49caf9e38 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/packages/language/c/libc/stdio/current/include/stdio.h @@ -0,0 +1,310 @@ +#ifndef CYGONCE_LIBC_STDIO_STDIO_H +#define CYGONCE_LIBC_STDIO_STDIO_H +//======================================================================== +// +// stdio.h +// +// ISO C standard I/O routines - with some POSIX 1003.1 extensions +// +//======================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//======================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: +// Date: 2000-04-19 +// Purpose: ISO C standard I/O routines +// Description: +// Usage: Do not include this file directly - use #include <stdio.h> +// +//####DESCRIPTIONEND#### +// +//======================================================================== + +// CONFIGURATION + +#include <pkgconf/libc_stdio.h> // Configuration header + +// INCLUDES + +#include <cyg/infra/cyg_type.h> // common type definitions and support +#include <stdarg.h> // va_list from compiler + +// CONSTANTS + +// Some of these values are odd to ensure that asserts have better effect +// should spurious values be passed to functions expecting these constants. + +// _IOFBF, _IOLBF, and _IONBF specify full, line or no buffering when used +// with setvbuf() - ISO C standard chap 7.9.1 + +#define _IOFBF (-2) +#define _IOLBF (-4) +#define _IONBF (-8) + +// EOF is a macro defined to any negative integer constant - ISO C standard +// chap. 7.9.1 +#define EOF (-1) + +// SEEK_CUR, SEEK_END and SEEK_SET are used with fseek() as position +// anchors - ISO C standard chap. 7.9.1 +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + + +// TYPE DEFINITIONS + +// A type capable of specifying uniquely every file position - ISO C +// standard chap 7.9.1 +typedef cyg_ucount32 fpos_t; + + +// FILE is just cast to an address here. It is uncast internally to the +// C library in stream.hxx as the C++ Cyg_StdioStream class. +// Optional run-time checking can be enabled to ensure that the cast is +// valid, using the standard assertion functionality. +// +// The array size is irrelevant other than being more than 8, and is present +// to stop references to FILEs being marked as able to be put in the small +// data section. We can't just mark it as in the ".data" section as on some +// targets it may actually be ".common". Maybe this doesn't matter? +// FIXME: This doesn't work if things are larger than 16 are put in sdata, +// e.g. on mips by specifying -G 32 +typedef CYG_ADDRESS FILE[16]; + +// EXTERNAL VARIABLES + +// Default file streams for input/output. These only need to be +// expressions, not l-values - ISO C standard chap. 7.9.1 +// +// cyg_libc_stdio_stdin/out/err aren't really files of course, +// but they are only named here so that we can take the address of +// them, in which case it doesn't matter what type they point to really +// +// CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS is used when initializing +// cyg_libc_stdio_stdin/out/err privately inside the C library + +#ifndef CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS +extern FILE cyg_libc_stdio_stdin, cyg_libc_stdio_stdout, + cyg_libc_stdio_stderr; + +#define stdin (&cyg_libc_stdio_stdin) +#define stdout (&cyg_libc_stdio_stdout) +#define stderr (&cyg_libc_stdio_stderr) +#endif + +// FUNCTION PROTOTYPES + +//======================================================================== + +// ISO C 7.9.5 File access functions + +externC int +fclose( FILE * /* stream */ ); + +externC int +fflush( FILE * /* stream */ ); + +externC FILE * +fopen( const char * /* filename */, const char * /* mode */ ); + +externC FILE * +freopen( const char * /* filename */, const char * /* mode */, + FILE * /* stream */ ); + +externC void +setbuf( FILE * /* stream */, char * /* buffer */ ); + +externC int +setvbuf( FILE * /* stream */, char * /* buffer */, int /* mode */, + size_t /* size */ ); + +//======================================================================== + +// ISO C 7.9.6 Formatted input/output functions + +externC int +fprintf( FILE * /* stream */, const char * /* format */, ... ); + +externC int +fscanf( FILE * /* stream */, const char * /* format */, ... ); + +externC int +printf( const char * /* format */, ... ); + +externC int +scanf( const char * /* format */, ... ); + +externC int +sprintf( char * /* str */, const char * /* format */, ... ); + +externC int +sscanf( const char * /* str */, const char * /* format */, ... ); + +externC int +vfprintf( FILE * /* stream */, const char * /* format */, + va_list /* args */ ); + +externC int +vprintf( const char * /* format */, va_list /* args */ ); + +externC int +vsprintf( char * /* str */, const char * /* format */, + va_list /* args */ ); + +//======================================================================== + +// ISO C 7.9.7 Character input/output functions + +externC int +fgetc( FILE * /* stream */ ); + +externC char * +fgets( char * /* str */, int /* length */, FILE * /* stream */ ); + +externC int +fputc( int /* c */, FILE * /* stream */ ); + +externC int +putc( int /* c */, FILE * /* stream */ ); + +externC int +putchar( int /* c */ ); + +externC int +fputs( const char * /* str */, FILE * /* stream */ ); + +externC char * +gets( char * ); + +externC int +getc( FILE * /* stream */ ); + +externC int +getchar( void ); + +externC int +puts( const char * /* str */ ); + +externC int +ungetc( int /* c */, FILE * /* stream */ ); + +// no function equivalent is required for getchar() or putchar(), so we can +// just #define them + +#define getchar() fgetc( stdin ) + +#define putchar(__c) fputc(__c, stdout) + +//======================================================================== + +// ISO C 7.9.8 Direct input/output functions + +externC size_t +fread( void * /* ptr */, size_t /* object_size */, + size_t /* num_objects */, FILE * /* stream */ ); + +externC size_t +fwrite( const void * /* ptr */, size_t /* object_size */, + size_t /* num_objects */, FILE * /* stream */ ); + +//======================================================================== + +// ISO C 7.9.9 File positioning functions + +externC int +fgetpos( FILE * /* stream */, fpos_t * /* pos */ ); + +externC int +fseek( FILE * /* stream */, long int /* offset */, int /* whence */ ); + +externC int +fsetpos( FILE * /* stream */, const fpos_t * /* pos */ ); + +externC long int +ftell( FILE * /* stream */ ); + +externC void +rewind( FILE * /* stream */ ); + +//======================================================================== + +// ISO C 7.9.10 Error-handling functions + +externC void +clearerr( FILE * /* stream */ ); + +externC int +feof( FILE * /* stream */ ); + +externC int +ferror( FILE * /* stream */ ); + +externC void +perror( const char * /* prefix_str */ ); + +//======================================================================== + +// Other non-ISO C functions + +externC int +fnprintf( FILE * /* stream */, size_t /* length */, + const char * /* format */, ... ); + +externC int +snprintf( char * /* str */, size_t /* length */, const char * /* format */, + ... ); + +externC int +vfnprintf( FILE * /* stream */, size_t /* length */, + const char * /* format */, va_list /* args */ ); + +externC int +vsnprintf( char * /* str */, size_t /* length */, + const char * /* format */, va_list /* args */ ); + +externC int +vscanf( const char * /* format */, va_list /* args */ ); + +externC int +vsscanf( const char * /* str */, const char * /* format */, + va_list /* args */ ); + +externC int +vfscanf( FILE * /* stream */, const char * /* format */, + va_list /* args */ ); + + +// INLINE FUNCTIONS + +#ifdef CYGIMP_LIBC_STDIO_INLINES +# include <cyg/libc/stdio/stdio.inl> +#endif + +#endif // CYGONCE_LIBC_STDIO_STDIO_H multiple inclusion protection + +// EOF stdio.h
