| 429 | } |
| 430 | |
| 431 | static ssize_t |
| 432 | xo_snprintf (char *out, ssize_t outsize, const char *fmt, ...) |
| 433 | { |
| 434 | ssize_t status; |
| 435 | ssize_t retval = 0; |
| 436 | va_list ap; |
| 437 | |
| 438 | if (out && outsize) { |
| 439 | va_start(ap, fmt); |
| 440 | status = vsnprintf(out, outsize, fmt, ap); |
| 441 | if (status < 0) { /* this should never happen, */ |
| 442 | *out = 0; /* handle it in the safest way possible if it does */ |
| 443 | retval = 0; |
| 444 | } else { |
| 445 | retval = status; |
| 446 | retval = retval > outsize ? outsize : retval; |
| 447 | } |
| 448 | va_end(ap); |
| 449 | } |
| 450 | |
| 451 | return retval; |
| 452 | } |
| 453 | |
| 454 | static xo_ssize_t |
| 455 | xo_syslog_handle_write (void *opaque, const char *data) |
no test coverage detected