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