X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Ffreopen.c;h=c8561225378cbbfaf22ebd359a4261e7acfb4120;hb=0a419d48138f1411d6e3e50a367b9ece5a2cf893;hp=7868c95207052b3ac47f97abe79559640872aa5d;hpb=6ca24b75c75b9c6f22e1e69693d326b8e3330841;p=pdclib diff --git a/functions/stdio/freopen.c b/functions/stdio/freopen.c index 7868c95..c856122 100644 --- a/functions/stdio/freopen.c +++ b/functions/stdio/freopen.c @@ -9,19 +9,23 @@ #include #ifndef REGTEST - +#include <_PDCLIB_io.h> #include <_PDCLIB_glue.h> #include #include -struct _PDCLIB_file_t * freopen( - const char * _PDCLIB_restrict filename, - const char * _PDCLIB_restrict mode, - struct _PDCLIB_file_t * _PDCLIB_restrict stream ) +FILE * freopen( + const char * _PDCLIB_restrict filename, + const char * _PDCLIB_restrict mode, + FILE * _PDCLIB_restrict stream +) { flockfile( stream ); - unsigned int status = stream->status & ( _IONBF | _IOLBF | _IOFBF | _PDCLIB_FREEBUFFER | _PDCLIB_DELONCLOSE ); + unsigned int status = stream->status & + ( _IONBF | _IOLBF | _IOFBF | _PDCLIB_FREEBUFFER + | _PDCLIB_DELONCLOSE | _PDCLIB_STATIC ); + /* TODO: This function can change wide orientation of a stream */ if ( stream->status & _PDCLIB_FWRITE ) { @@ -33,7 +37,8 @@ struct _PDCLIB_file_t * freopen( funlockfile( stream ); return NULL; } - _PDCLIB_close( stream->handle ); + stream->ops->close(stream->handle); + /* TODO: It is not nice to do this on a stream we just closed. It does not matter with the current implementation of clearerr(), but it might start to matter if someone replaced that implementation. @@ -76,7 +81,8 @@ struct _PDCLIB_file_t * freopen( stream->bufend = 0; stream->ungetidx = 0; /* TODO: Setting mbstate */ - if ( ( stream->handle = _PDCLIB_open( filename, stream->status ) ) == _PDCLIB_NOHANDLE ) + if ( ! _PDCLIB_open( &stream->handle, &stream->ops, filename, + stream->status ) ) { funlockfile( stream ); return NULL;