home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 4: GNU Archives / Linux Cubed Series 4 - GNU Archives.iso / gnu / glibc-1.09 / glibc-1 / glibc-1.09.1 / sysdeps / standalone / __write.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-26  |  1.9 KB  |  73 lines

  1. /* Copyright (C) 1994 Free Software Foundation, Inc.
  2.    Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
  3.      On-Line Applications Research Corporation.
  4.  
  5. This file is part of the GNU C Library.
  6.  
  7. The GNU C Library is free software; you can redistribute it and/or
  8. modify it under the terms of the GNU Library General Public License as
  9. published by the Free Software Foundation; either version 2 of the
  10. License, or (at your option) any later version.
  11.  
  12. The GNU C Library is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15. Library General Public License for more details.
  16.  
  17. You should have received a copy of the GNU Library General Public
  18. License along with the GNU C Library; see the file COPYING.LIB.  If
  19. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  20. Cambridge, MA 02139, USA.  */
  21.  
  22. #include <ansidecl.h>
  23. #include <sysdep.h>
  24. #include <errno.h>
  25. #include <unistd.h>
  26. #include <stddef.h>
  27.  
  28. #include "filedesc.h"
  29. #include <fcntl.h>
  30. #include <standalone.h>
  31.  
  32. /* Write NBYTES of BUF to FD.  Return the number written, or -1.  */
  33. ssize_t
  34. DEFUN(__write, (fd, buf, nbytes),
  35.       int fd AND CONST PTR buf AND size_t nbytes)
  36. {
  37.   int count;
  38.   CONST char *data = buf;
  39.  
  40.   if (nbytes == 0)
  41.     return 0;
  42.   if ( !__FD_Is_valid( fd ) || !__FD_Table[ fd ].in_use )
  43.     {
  44.       errno = EBADF;
  45.       return -1;
  46.     }
  47.   if (buf == NULL)
  48.     {
  49.       errno = EINVAL;
  50.       return -1;
  51.     }
  52.  
  53.   if ( !(__FD_Table[ fd ].flags & (O_WRONLY|O_RDWR)) )  /* is it writeable? */
  54.     {
  55.       errno = EBADF;
  56.       return -1;
  57.     }
  58.  
  59.   /*
  60.    *  All open file descriptors are mapped to the console.
  61.    */
  62.  
  63.   for ( count=0 ; count != nbytes ; count++ ) {
  64.     if ( _Console_Putc(data[ count ]) == -1 )
  65.       return -1;
  66.     if ( data[count] == '\n' && _Console_Putc('\r') == -1 )
  67.       return -1;
  68.   }
  69.  
  70.   return count;
  71. }
  72.  
  73.