#include #include #include #include #include "ntux_driver_impl.h" #include "ntux_nolibc_impl.h" #include "ntux_errinfo_impl.h" #include #include #include int ntux_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 = __xfi_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); __xfi_vsprintf(buf,fmt,ap); va_end(ap); } else { return -1; } ret = 0; ch = buf; for (; cnt && ret>=0; ) { ret = __sys_write(fd,ch,cnt); while ((ret < 0) && (ret == -EINTR)) ret = __sys_write(fd,ch,cnt); ch += ret; cnt -= ret; } ret = (ret < 0) ? -1 : ch - buf; if (buf != chbuf) free(buf); return ret; }