| 243 |
ret = vsnprintf(buf, sizeof(buf), format, args); |
ret = vsnprintf(buf, sizeof(buf), format, args); |
| 244 |
va_end(args); |
va_end(args); |
| 245 |
|
|
| 246 |
if (ret > 0) |
if (ret >= 0) |
| 247 |
{ |
{ |
| 248 |
int written = (ret >= sizeof(buf) ? (int)sizeof(buf) - 1 : ret); |
int written = (ret >= sizeof(buf) ? (int)sizeof(buf) - 1 : ret); |
| 249 |
|
|
| 256 |
{ |
{ |
| 257 |
memcpy(stdout_buf + stdout_buf_len, buf, (size_t)written); |
memcpy(stdout_buf + stdout_buf_len, buf, (size_t)written); |
| 258 |
stdout_buf_len += written; |
stdout_buf_len += written; |
| 259 |
|
ret = written; |
| 260 |
} |
} |
| 261 |
else |
else |
| 262 |
{ |
{ |
| 263 |
errno = EAGAIN; |
errno = EAGAIN; |
| 264 |
int need = stdout_buf_len + ret - OUTPUT_BUF_SIZE; |
int need = stdout_buf_len + written - OUTPUT_BUF_SIZE; |
| 265 |
log_error("Output buffer is full, additional %d is required\n", need); |
log_error("Output buffer is full, additional %d bytes are required\n", need); |
| 266 |
ret = -1; |
ret = -need; |
| 267 |
} |
} |
| 268 |
} |
} |
| 269 |
|
|