X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstdio%2Ffreopen.c;h=741731b9990b8b4b3dcfdbb46860812ac91afd16;hb=d69469f15e30e4ee7cd8f11edd7ad87196a92d44;hp=7868c95207052b3ac47f97abe79559640872aa5d;hpb=6ca24b75c75b9c6f22e1e69693d326b8e3330841;p=pdclib diff --git a/functions/stdio/freopen.c b/functions/stdio/freopen.c index 7868c95..741731b 100644 --- a/functions/stdio/freopen.c +++ b/functions/stdio/freopen.c @@ -21,7 +21,10 @@ struct _PDCLIB_file_t * freopen( { 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 +36,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 +80,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;