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   
C/C++ Source or Header  |  1989-09-02  |  2KB  |  73 lines

  1. /* 
  2. ** Copyright 1986, 1987, 1988, 1989 University of Wisconsin
  3. ** 
  4. ** Permission to use, copy, modify, and distribute this software and its
  5. ** documentation for any purpose and without fee is hereby granted,
  6. ** provided that the above copyright notice appear in all copies and that
  7. ** both that copyright notice and this permission notice appear in
  8. ** supporting documentation, and that the name of the University of
  9. ** Wisconsin not be used in advertising or publicity pertaining to
  10. ** distribution of the software without specific, written prior
  11. ** permission.  The University of Wisconsin makes no representations about
  12. ** the suitability of this software for any purpose.  It is provided "as
  13. ** is" without express or implied warranty.
  14. ** 
  15. ** THE UNIVERSITY OF WISCONSIN DISCLAIMS ALL WARRANTIES WITH REGARD TO
  16. ** THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  17. ** FITNESS. IN NO EVENT SHALL THE UNIVERSITY OF WISCONSIN  BE LIABLE FOR
  18. ** ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  19. ** WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  20. ** ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  21. ** OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  22. ** 
  23. ** Authors:  Allan Bricker and Michael J. Litzkow,
  24. **              University of Wisconsin, Computer Sciences Dept.
  25. ** 
  26. */ 
  27.  
  28.  
  29. #include "condor_sys.h"
  30. #include <sys/types.h>
  31. #include <sys/uio.h>
  32.  
  33. writev( d, iov, iovcnt )
  34. int d;
  35. struct iovec *iov;
  36. int iovcnt;
  37. {
  38.     int rval;
  39.  
  40.     if( Syscalls & SYS_LOCAL ) {
  41.         rval = syscall( SYS_writev, d, iov, iovcnt );
  42.     } else {
  43.         rval = fake_writev( d, iov, iovcnt );
  44.     }
  45.  
  46.     return( rval );
  47. }
  48.  
  49. static
  50. fake_writev( d, iov, iovcnt )
  51. int d;
  52. struct iovec *iov;
  53. int iovcnt;
  54. {
  55.     register int i, rval = 0, cc;
  56.  
  57.     for( i = 0; i < iovcnt; i++ ) {
  58.         cc = REMOTE_syscall( CONDOR_write, iov->iov_base, iov->iov_len );
  59.         if( cc < 0 ) {
  60.             break;
  61.         }
  62.  
  63.         rval += cc;
  64.         if( cc != iov->iov_len ) {
  65.             break;
  66.         }
  67.  
  68.         iov++;
  69.     }
  70.  
  71.     return( rval );
  72. }
  73.