summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2014-05-20 21:21:02 +0800
committerMatt Johnston <matt@ucc.asn.au>2014-05-20 21:21:02 +0800
commit2a1d28ea3a0a164593c7819ec1c2489224ed68d5 (patch)
treef68f89292e44fdd209b0297a8eb536d8caed4eb6
parent0e0ff51582e5c61530715ee5e33440c6ff0b47f1 (diff)
Be more careful in case a platform doesn't define UIO_MAXIOV nor IOV_MAX
-rw-r--r--packet.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/packet.c b/packet.c
index c881aab..5a279f2 100644
--- a/packet.c
+++ b/packet.c
@@ -70,7 +70,7 @@ void write_packet() {
TRACE2(("enter write_packet"))
dropbear_assert(!isempty(&ses.writequeue));
-#ifdef HAVE_WRITEV
+#if defined(HAVE_WRITEV) && (defined(IOV_MAX) || defined(UIO_MAXIOV))
#ifndef IOV_MAX
#define IOV_MAX UIO_MAXIOV
@@ -79,7 +79,9 @@ void write_packet() {
/* Make sure the size of the iov is below the maximum allowed by the OS. */
iov_max_count = ses.writequeue.count;
if (iov_max_count > IOV_MAX)
+ {
iov_max_count = IOV_MAX;
+ }
iov = m_malloc(sizeof(*iov) * iov_max_count);
for (l = ses.writequeue.head, i = 0; l; l = l->link, i++)
@@ -124,8 +126,7 @@ void write_packet() {
}
m_free(iov);
-
-#else
+#else /* No writev () */
/* Get the next buffer in the queue of encrypted packets to write*/
writebuf = (buffer*)examine(&ses.writequeue);
@@ -160,8 +161,8 @@ void write_packet() {
/* More packet left to write, leave it in the queue for later */
buf_incrpos(writebuf, written);
}
+#endif /* writev */
-#endif
now = monotonic_now();
ses.last_trx_packet_time = now;