constraints honored?)
*/
/* FIXME: Proper buffering handling. */
+ char written;
while ( stream->bufidx < stream->bufsize )
{
- if ( ( stream->buffer[stream->bufidx++] = *(s++) ) == '\0' )
+ written = ( stream->buffer[stream->bufidx++] = *(s++) );
+ if ( ( written == '\0' ) ||
+ ( ( stream->status & _IOLBF ) && ( written == '\n' ) ) ||
+ ( stream->status & _IONBF ) )
{
break;
}
}
fflush( stream );
- if ( *(s-1) != '\0' )
+ if ( written != '\0' )
{
+ /* FIXME: For _IONBF, this recurses once per character - unacceptable. */
return fputs( s, stream );
}
else
#ifdef TEST
#include <_PDCLIB_test.h>
+#include <string.h>
+
int main( void )
{
- TESTCASE( NO_TESTDRIVER );
+ FILE * fh;
+ char buffer[100];
+ char text[] = "SUCCESS testing fputs().";
+ TESTCASE( ( fh = fopen( "testfile", "w" ) ) != NULL );
+ TESTCASE( fputs( text, fh ) != EOF );
+ TESTCASE( fclose( fh ) == 0 );
+ TESTCASE( ( fh = fopen( "testfile", "r" ) ) != NULL );
+ TESTCASE( fread( buffer, 1, strlen( text ), fh ) == strlen( text ) );
+ TESTCASE( memcmp( buffer, text, strlen( text ) ) == 0 );
+ TESTCASE( fclose( fh ) == 0 );
+ TESTCASE( remove( "testfile" ) == 0 );
return TEST_RESULTS;
}