| 377 | } |
| 378 | |
| 379 | ssize_t writev(int fd, const struct iovec *iov, int iov_cnt) { |
| 380 | ssize_t written = 0; |
| 381 | |
| 382 | for (int i = 0; i < iov_cnt; i++) { |
| 383 | int r = ::write(fd, iov[i].iov_base, iov[i].iov_len); |
| 384 | if (r < 0) |
| 385 | return r; |
| 386 | written += r; |
| 387 | if ((unsigned)r < iov[i].iov_len) |
| 388 | break; |
| 389 | } |
| 390 | |
| 391 | return written; |
| 392 | } |
| 393 | |
| 394 | int &alloc_tls() { |
| 395 | static __thread int tlsvar; |