vfprint.c 518 B

12345678910111213141516171819202122232425262728293031323334
  1. #include <u.h>
  2. #include <libc.h>
  3. #include "fmtdef.h"
  4. /*
  5. * generic routine for flushing a formatting buffer
  6. * to a file descriptor
  7. */
  8. int
  9. _fmtFdFlush(Fmt *f)
  10. {
  11. int n;
  12. n = (char*)f->to - (char*)f->start;
  13. if(n && write((int)f->farg, f->start, n) != n)
  14. return 0;
  15. f->to = f->start;
  16. return 1;
  17. }
  18. int
  19. vfprint(int fd, char *fmt, va_list args)
  20. {
  21. Fmt f;
  22. char buf[256];
  23. int n;
  24. fmtfdinit(&f, fd, buf, sizeof(buf));
  25. f.args = args;
  26. n = dofmt(&f, fmt);
  27. if(n > 0 && _fmtFdFlush(&f) == 0)
  28. return -1;
  29. return n;
  30. }