X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Ffseek.c;h=1c5332d0b5832f8e49535a6bb69e8214891dab2f;hb=acb574418b603006718fc8e9584808b8757d7c0b;hp=f33f250938a0e1cdaaa7fddbe6f971b2e8d52b3a;hpb=e5112b619d1aae8ffc439389cfcbd3b2b4bd2454;p=pdclib diff --git a/functions/stdio/fseek.c b/functions/stdio/fseek.c index f33f250..1c5332d 100644 --- a/functions/stdio/fseek.c +++ b/functions/stdio/fseek.c @@ -1,6 +1,6 @@ /* $Id$ */ -/* fseek( FILE *, long int, int ) +/* fseek( FILE *, long offset, int ) This file is part of the Public Domain C Library (PDCLib). Permission is granted to use, modify, and / or redistribute at will. @@ -10,10 +10,23 @@ #ifndef REGTEST -int fseek( struct _PDCLIB_file_t * stream, long int offset, int whence ) +#include <_PDCLIB_glue.h> + +int fseek( struct _PDCLIB_file_t * stream, long offset, int whence ) { - /* TODO: Implement. */ - return 0; + if ( stream->status & _PDCLIB_FWRITE ) + { + if ( _PDCLIB_flushbuffer( stream ) == EOF ) + { + return EOF; + } + } + stream->status &= ~ _PDCLIB_EOFFLAG; + if ( stream->status & _PDCLIB_FRW ) + { + stream->status &= ~ ( _PDCLIB_FREAD | _PDCLIB_FWRITE ); + } + return ( _PDCLIB_seek( stream, offset, whence ) != EOF ) ? 0 : EOF; } #endif @@ -28,3 +41,4 @@ int main( void ) } #endif +