1N/A/*********************************************************************** 1N/A* This software is part of the ast package * 1N/A* Copyright (c) 1985-2011 AT&T Intellectual Property * 1N/A* and is licensed under the * 1N/A* Common Public License, Version 1.0 * 1N/A* by AT&T Intellectual Property * 1N/A* A copy of the License is available at * 1N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 1N/A* Information and Software Systems Research * 1N/A* Glenn Fowler <gsf@research.att.com> * 1N/A* David Korn <dgk@research.att.com> * 1N/A* Phong Vo <kpv@research.att.com> * 1N/A***********************************************************************/ 1N/A/* Write a buffer out to a file descriptor or 1N/A** extending a buffer for a SF_STRING stream. 1N/A** Written by Kiem-Phong Vo 1N/ASfio_t* f;
/* write out the buffered content of this stream */ 1N/Aint c;
/* if c>=0, c is also written out */ 1N/A SFMTXDECL(f);
/* declare a local stream variable for multithreading */ 1N/A {
/* check stream mode */ 1N/A /* current data extent */ 1N/A {
/* extend string stream buffer */ 1N/A /* !(f->flags&SF_STRING) is required because exception 1N/A handlers may turn a string stream to a file stream */ 1N/A {
/* write into buffer */ 1N/A {
/* unbuffered io */ 1N/A {
if((n -= w) > 0)
/* save unwritten data, then resume */ 1N/A break;
/* do normal exit below */ 1N/A else /* nothing was done, returning failure */ 1N/A else /* w < 0 means SF_EDISC or SF_ESTACK in sfwr() */ 1N/A {
if(c < 0)
/* back to the calling write operation */ 1N/A else continue;
/* try again to write out c */