/**************************************************************************** * * Open Watcom Project * * Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. * * ======================================================================== * * This file contains Original Code and/or Modifications of Original * Code as defined in and that are subject to the Sybase Open Watcom * Public License version 1.0 (the 'License'). You may not use this file * except in compliance with the License. BY USING THIS FILE YOU AGREE TO * ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is * provided with the Original Code and Modifications, and is also * available at www.sybase.com/developer/opensource. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR * NON-INFRINGEMENT. Please see the License for the specific language * governing rights and limitations under the License. * * ======================================================================== * * Description: Implementation of fputs() - put string to stream. * ****************************************************************************/ #include "variety.h" #include "widechar.h" #include #include "fileacc.h" #include "rtdata.h" #include "flush.h" #include "streamio.h" _WCRTLINK int __F_NAME(fputs,fputws)( const CHAR_TYPE *s, FILE *fp ) { const CHAR_TYPE *start; int c; int not_buffered; int rc; _ValidFile( fp, __F_NAME(EOF,WEOF) ); _AccessFile( fp ); if( _FP_BASE(fp) == NULL ) { __ioalloc( fp ); /* allocate buffer */ } not_buffered = 0; if( fp->_flag & _IONBF ) { not_buffered = 1; fp->_flag &= ~_IONBF; fp->_flag |= _IOLBF; } rc = 0; start = s; while( c = *s ) { s++; #ifndef __WIDECHAR__ if( (fputc)( c, fp ) == EOF ) { /* 23-oct-91 */ rc = EOF; break; } #else if( (fputwc)( c, fp ) == WEOF ) { /* 23-oct-91 */ rc = -1; break; } #endif } if( not_buffered ) { fp->_flag &= ~_IOLBF; fp->_flag |= _IONBF; if( rc == 0 ) { rc = __flush( fp ); /* 23-oct-91 */ } } if( rc == 0 ) { /* return the number of items written */ /* this is ok by ANSI which says that success is */ /* indicated by a non-negative return value */ rc = s - start; } _ReleaseFile( fp ); return( rc ); }