Use writev() instead of writing before an allocated region

This commit is contained in:
Frank Denis
2015-11-04 02:18:19 +01:00
parent 8b8772f4f1
commit d3b16d7829
2 changed files with 22 additions and 7 deletions

View File

@@ -56,16 +56,16 @@
int tcp_write(int fd, char *buf, int len)
{
register char *ptr;
struct iovec iov[2];
uint16_t header;
/* \/ WHOEVER WROTE THAT IS A DANGEROUS PSYCHOPATH \/ */
ptr = buf - sizeof(short);
header = htons((uint16_t) len);
len = len & VTUN_FSIZE_MASK;
*((unsigned short *)ptr) = htons(len);
/* /\ WHOEVER WROTE THAT IS A DANGEROUS PSYCHOPATH /\ */
len = (len & VTUN_FSIZE_MASK) + sizeof(short);
iov[0] = (struct iovec) { .iov_base = &header, .iov_len = 2U };
iov[1] = (struct iovec) { .iov_base = buf, .iov_len = len };
return write_n(fd, ptr, len);
return write_v(fd, iov, 2);
}
int tcp_read(int fd, char *buf)