From 4a8eb8d13e4cbeaaa72312159b65d2a51876ec32 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 11 Mar 2014 10:32:12 +0100 Subject: vty/buffer.c: Work on systems that don't implement writev() .. such as Nuttx. --- src/vty/buffer.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/vty/buffer.c b/src/vty/buffer.c index e0abe813..51140f96 100644 --- a/src/vty/buffer.c +++ b/src/vty/buffer.c @@ -26,12 +26,37 @@ #include #include #include -#include #include #include #include +#ifdef HAVE_SYS_UIO_H +#include +#else +/* some platforms (e.g. Nuttx) don't have writev(), so we reimplement it + * here */ +struct iovec +{ + void *iov_base; + size_t iov_len; +}; +static ssize_t writev(int fd, const struct iovec *iovec, int count) +{ + int i, rc; + ssize_t written = 0; + + for (i = 0; i < count; i++) { + rc = write(fd, iovec[i].iov_base, iovec[i].iov_len); + if (rc <= 0) + return rc; + written += rc; + } + + return written; +} +#endif + /* Buffer master. */ struct buffer { /* Data list. */ @@ -76,7 +101,11 @@ struct buffer *buffer_new(void *ctx, size_t size) else { static size_t default_size; if (!default_size) { +#ifdef HAVE_SYSCONF long pgsz = sysconf(_SC_PAGESIZE); +#else + long pgsz = 4096; +#endif default_size = ((((BUFFER_SIZE_DEFAULT - 1) / pgsz) + 1) * pgsz); } -- cgit v1.2.3