home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
c
/
condor40.zip
/
CONDOR
/
src
/
condor_lib
/
writev.c
< prev
Wrap
C/C++ Source or Header
|
1989-09-02
|
2KB
|
73 lines
/*
** Copyright 1986, 1987, 1988, 1989 University of Wisconsin
**
** Permission to use, copy, modify, and distribute this software and its
** documentation for any purpose and without fee is hereby granted,
** provided that the above copyright notice appear in all copies and that
** both that copyright notice and this permission notice appear in
** supporting documentation, and that the name of the University of
** Wisconsin not be used in advertising or publicity pertaining to
** distribution of the software without specific, written prior
** permission. The University of Wisconsin makes no representations about
** the suitability of this software for any purpose. It is provided "as
** is" without express or implied warranty.
**
** THE UNIVERSITY OF WISCONSIN DISCLAIMS ALL WARRANTIES WITH REGARD TO
** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
** FITNESS. IN NO EVENT SHALL THE UNIVERSITY OF WISCONSIN BE LIABLE FOR
** ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
** WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
** ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
** OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**
** Authors: Allan Bricker and Michael J. Litzkow,
** University of Wisconsin, Computer Sciences Dept.
**
*/
#include "condor_sys.h"
#include <sys/types.h>
#include <sys/uio.h>
writev( d, iov, iovcnt )
int d;
struct iovec *iov;
int iovcnt;
{
int rval;
if( Syscalls & SYS_LOCAL ) {
rval = syscall( SYS_writev, d, iov, iovcnt );
} else {
rval = fake_writev( d, iov, iovcnt );
}
return( rval );
}
static
fake_writev( d, iov, iovcnt )
int d;
struct iovec *iov;
int iovcnt;
{
register int i, rval = 0, cc;
for( i = 0; i < iovcnt; i++ ) {
cc = REMOTE_syscall( CONDOR_write, iov->iov_base, iov->iov_len );
if( cc < 0 ) {
break;
}
rval += cc;
if( cc != iov->iov_len ) {
break;
}
iov++;
}
return( rval );
}