_sys_write.c 720 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /* $Source$
  2. * $State$
  3. * $Revision$
  4. */
  5. #include <stdlib.h>
  6. #include <errno.h>
  7. #include <sgtty.h>
  8. #include "libsys.h"
  9. extern struct
  10. {
  11. int fd;
  12. const char* buffer;
  13. size_t count;
  14. } _sys_params_in;
  15. extern struct
  16. {
  17. size_t byteswritten;
  18. } _sys_params_out;
  19. #define P _sys_params_in
  20. void _sys_write_tty(char c)
  21. {
  22. _sys_rawwrite(c);
  23. if ((c == '\n') && !(_sys_ttyflags & RAW))
  24. _sys_rawwrite('\r');
  25. }
  26. int _sys_write(void)
  27. {
  28. int i;
  29. /* We're only allowed to write to fd 0, 1 or 2. */
  30. if ((P.fd < 0) || (P.fd > 2))
  31. return EBADF;
  32. /* Write all data. */
  33. i = 0;
  34. while (i < P.count)
  35. {
  36. _sys_write_tty(*P.buffer++);
  37. i++;
  38. }
  39. /* No failures. */
  40. _sys_params_out.byteswritten = P.count;
  41. return 0;
  42. }