]> pd.if.org Git - pdclib.old/blob - functions/stdio/puts.c
_PDCLIB_flushbuffer for win32. correct seeking behaviour.
[pdclib.old] / functions / stdio / puts.c
1 /* $Id$ */
2
3 /* puts( const char * )
4
5    This file is part of the Public Domain C Library (PDCLib).
6    Permission is granted to use, modify, and / or redistribute at will.
7 */
8
9 #include <stdio.h>
10
11 #ifndef REGTEST
12 #include <_PDCLIB_glue.h>
13
14 extern char * _PDCLIB_eol;
15
16 int puts( const char * s )
17 {
18     if ( _PDCLIB_prepwrite( stdout ) == EOF )
19     {
20         return EOF;
21     }
22     while ( *s != '\0' )
23     {
24         stdout->buffer[ stdout->bufidx++ ] = *s++;
25         if ( stdout->bufidx == stdout->bufsize )
26         {
27             if ( _PDCLIB_flushbuffer( stdout ) == EOF )
28             {
29                 return EOF;
30             }
31         }
32     }
33     stdout->buffer[ stdout->bufidx++ ] = '\n';
34     if ( ( stdout->bufidx == stdout->bufsize ) ||
35          ( stdout->status & ( _IOLBF | _IONBF ) ) )
36     {
37         return _PDCLIB_flushbuffer( stdout );
38     }
39     else
40     {
41         return 0;
42     }
43 }
44
45 #endif
46
47 #ifdef TEST
48 #include <_PDCLIB_test.h>
49
50 int main( void )
51 {
52     FILE * fh;
53     char const * message = "SUCCESS testing puts()";
54     char buffer[23];
55     buffer[22] = 'x';
56     TESTCASE( ( fh = freopen( testfile, "wb+", stdout ) ) != NULL );
57     TESTCASE( puts( message ) >= 0 );
58     rewind( fh );
59     TESTCASE( fread( buffer, 1, 22, fh ) == 22 );
60     TESTCASE( memcmp( buffer, message, 22 ) == 0 );
61     TESTCASE( buffer[22] == 'x' );
62     TESTCASE( fclose( fh ) == 0 );
63     TESTCASE( remove( testfile ) == 0 );
64     return TEST_RESULTS;
65 }
66
67 #endif
68