Mercurial > dropbear
diff packet.c @ 934:68723d66dec6
Be more careful in case a platform doesn't define UIO_MAXIOV nor IOV_MAX
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 20 May 2014 21:21:02 +0800 |
parents | c919dbb39395 |
children | a0819ecfee0b |
line wrap: on
line diff
--- a/packet.c Tue May 20 21:18:48 2014 +0800 +++ b/packet.c Tue May 20 21:21:02 2014 +0800 @@ -70,7 +70,7 @@ 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 @@ /* 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 @@ } 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 @@ /* 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;