From b67a1af44353c2a5147f0913bd665c2bf0eaa72a Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 10 Nov 2020 21:51:22 +0000 Subject: [PATCH] only use writev for larger chunks in buffer_putflush only use lseek if it saves a read in buffer_seek --- buffer/buffer_putflush.c | 2 +- buffer/buffer_seek.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/buffer/buffer_putflush.c b/buffer/buffer_putflush.c index a12f110..c78af7a 100644 --- a/buffer/buffer_putflush.c +++ b/buffer/buffer_putflush.c @@ -22,7 +22,7 @@ int buffer_putflush(buffer* b,const char* x,size_t len) { if (!b->p) /* if the buffer is empty, just call buffer_stubborn directly */ return buffer_stubborn(b->op,b->fd,x,len,b); #ifndef __MINGW32__ - if (b->op==write) { + if (b->op==write && len>sizeof(struct iovec)*2) { struct iovec v[2]; ssize_t w; size_t cl=b->p+len; diff --git a/buffer/buffer_seek.c b/buffer/buffer_seek.c index ed3656d..aba06e1 100644 --- a/buffer/buffer_seek.c +++ b/buffer/buffer_seek.c @@ -17,8 +17,9 @@ ssize_t buffer_seek(buffer* b,size_t len) { len -= leftinbuf; b->p = 0; // clear buffer b->n = 0; + /* change position in underlying file */ - if (b->fd != -1 && + if (b->fd != -1 && len > b->a && lseek(b->fd, len, SEEK_CUR) != -1) return len; // either we have no fd or input is not seekable // call read repeatedly