#include #include #include #include #include "ptycon_driver_impl.h" #include "ptycon_nolibc_impl.h" #include #include #include int ptyc_dprintf(int fd, const char * fmt, ...) { int ret; int cnt; int size; va_list ap; char * ch; char * buf; char chbuf[2048]; va_start(ap,fmt); size = sizeof(chbuf); buf = ((cnt = ntapi->vsnprintf(chbuf,size,fmt,ap)) < size) ? chbuf : calloc(1, cnt + 1); va_end(ap); if (buf == chbuf) { (void)0; } else if (buf) { va_start(ap,fmt); ntapi->vsprintf(buf,fmt,ap); va_end(ap); } else { return -1; } ret = 0; ch = buf; for (; cnt && ret>=0; ) { ret = ptyc_write(fd,ch,cnt); while ((ret == NT_STATUS_ALERTED) || (ret == NT_STATUS_USER_APC)) ret = ptyc_write(fd,ch,cnt); ch += ret; cnt -= ret; } ret = (ret < 0) ? -1 : ch - buf; if (buf != chbuf) free(buf); return ret; }