1 //===========================================================================
5 // Implementation of C library file positioning functions as per ANSI 7.9.9
7 //===========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //===========================================================================
41 //#####DESCRIPTIONBEGIN####
46 // Purpose: Implements ISO C file positioning functions
50 //####DESCRIPTIONEND####
52 //===========================================================================
56 #include <pkgconf/libc_stdio.h> // Configuration header
58 #include <cyg/infra/cyg_type.h> // Common project-wide type definitions
59 #include <cyg/infra/cyg_ass.h> // Assertion support
60 #include <cyg/infra/cyg_trac.h> // Tracing support
61 #include <stddef.h> // NULL and size_t from compiler
62 #include <errno.h> // Error codes
63 #include <stdio.h> // header for fseek() etc.
64 #include <cyg/libc/stdio/stdiofiles.hxx> // C library files
65 #include <cyg/libc/stdio/stream.hxx> // C library streams
67 //========================================================================
69 // ISO C 7.9.9 File positioning functions
72 fgetpos( FILE * stream , fpos_t *pos ) __THROW
74 Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream;
78 CYG_REPORT_FUNCNAME( "fgetpos" );
80 err = real_stream->get_position( pos );
88 CYG_REPORT_RETVAL( ret );
93 fseek( FILE * stream , long int offset , int whence ) __THROW
95 Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream;
99 CYG_REPORT_FUNCNAME( "fgetpos" );
101 err = real_stream->set_position( (fpos_t)offset, whence );
109 CYG_REPORT_RETVAL( ret );
114 fsetpos( FILE * stream , const fpos_t * pos ) __THROW
116 Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream;
120 CYG_REPORT_FUNCNAME( "fgetpos" );
122 err = real_stream->set_position( *pos, SEEK_SET );
130 CYG_REPORT_RETVAL( ret );
135 ftell( FILE * stream ) __THROW
137 Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream;
142 CYG_REPORT_FUNCNAME( "ftell" );
144 err = real_stream->get_position( &pos );
153 CYG_REPORT_RETVAL( ret );
158 rewind( FILE * stream ) __THROW
160 Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stream;
161 (void)fseek( stream, 0L, SEEK_SET );
163 real_stream->set_error( ENOERR );