- /* TODO: Honor user-provided buffer / buffer size. (Not actually required
- by the standard...) */
- stream->status &= ~( _IOFBF | _IOLBF | _IONBF );
- stream->status |= mode; /* TODO: Unchecked use of mode -> vulnerable. */
- return 0;
-
-#if 0
- /* Only allowed on "virgin" streams (i.e., before first I/O occurs), a
- valid value for mode, and only once per stream (i.e., the buffer
- attached to the stream should always be the one allocated by fopen().
- */
- if ( ( ! stream->status & _PDCLIB_VIRGINSTR ) ||
- ( ( mode != _IOFBF ) && ( mode != _IOLBF ) && ( mode != _IONBF ) ) ||
- ! ( stream->status & _PDCLIB_LIBBUFFER ) )
- {
- return -1;
- }
- if ( mode == _IONBF )
- {
- /* When unbuffered I/O is requested, we don't need a buffer. */
- buf = NULL;
- size = 0;
- }
- else
- {
- /* The standard does not really require this - only BUFSIZ is required
- to be no smaller than 256 - but it makes sense not to make buffers
- too small anyway.
- */
- if ( size < 256 )
- {
- buf = NULL; /* do not use too-small user buffer */
- size = 256;
- }
- }
- /* If a suitable buffer is provided by user... */
- if ( buf != NULL )
- {
- /* ...do not free it in library functions like fclose(), freopen(). */
- stream->status &= ~_PDCLIB_LIBBUFFER;
- }
- /* If we cannot allocate enough memory, that is not a reason for failure -
- the standard does not actually *require* that setvbuf() honors user-
- supplied buffer and buffer size, so we can quietly ignore this.
- */
- /* FIXME: Logic stops here. Handle _IONBF, new buf value etc. correctly. */
- puts("foo");
- if ( ( ( buf = malloc( size ) ) != NULL ) || ( mode == _IONBF ) )