* Print some data through the handle. */
| 978 | * Print some data through the handle. |
| 979 | */ |
| 980 | static ssize_t |
| 981 | xo_printf_v (xo_handle_t *xop, const char *fmt, va_list vap) |
| 982 | { |
| 983 | xo_buffer_t *xbp = &xop->xo_data; |
| 984 | ssize_t left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp); |
| 985 | ssize_t rc; |
| 986 | va_list va_local; |
| 987 | |
| 988 | va_copy(va_local, vap); |
| 989 | |
| 990 | rc = vsnprintf(xbp->xb_curp, left, fmt, va_local); |
| 991 | |
| 992 | if (rc >= left) { |
| 993 | if (!xo_buf_has_room(xbp, rc)) { |
| 994 | va_end(va_local); |
| 995 | return -1; |
| 996 | } |
| 997 | |
| 998 | va_end(va_local); /* Reset vap to the start */ |
| 999 | va_copy(va_local, vap); |
| 1000 | |
| 1001 | left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp); |
| 1002 | rc = vsnprintf(xbp->xb_curp, left, fmt, va_local); |
| 1003 | } |
| 1004 | |
| 1005 | va_end(va_local); |
| 1006 | |
| 1007 | if (rc > 0) |
| 1008 | xbp->xb_curp += rc; |
| 1009 | |
| 1010 | return rc; |
| 1011 | } |
| 1012 | |
| 1013 | static ssize_t |
| 1014 | xo_printf (xo_handle_t *xop, const char *fmt, ...) |
no test coverage detected