]> pd.if.org Git - pdclib.old/blobdiff - functions/stdio/freopen.c
Minimize the amount of internal definitions which get exposed via the user-visible...
[pdclib.old] / functions / stdio / freopen.c
index 7868c95207052b3ac47f97abe79559640872aa5d..c8561225378cbbfaf22ebd359a4261e7acfb4120 100644 (file)
@@ -9,19 +9,23 @@
 #include <stdio.h>
 
 #ifndef REGTEST
-
+#include <_PDCLIB_io.h>
 #include <_PDCLIB_glue.h>
 #include <stdlib.h>
 #include <string.h>
 
-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;