summaryrefslogtreecommitdiff
path: root/libhw_cr
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-04-26 23:30:31 -0600
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-05-12 13:02:05 -0600
commit42729f477684b12735b572a4975d32fb1002a530 (patch)
tree8edcd3eede207af6d9ae2557f8fcb05290659597 /libhw_cr
parent5255dbd5196f0125b51d969c46e46ac5765db7ed (diff)
libhw_generic: io.h: Clarify that sum lenghts of iovecs must not be 0
Diffstat (limited to 'libhw_cr')
-rw-r--r--libhw_cr/host_net.c8
-rw-r--r--libhw_cr/rp2040_hwspi.c8
-rw-r--r--libhw_cr/w5500.c6
3 files changed, 15 insertions, 7 deletions
diff --git a/libhw_cr/host_net.c b/libhw_cr/host_net.c
index 01f4370..d162504 100644
--- a/libhw_cr/host_net.c
+++ b/libhw_cr/host_net.c
@@ -241,6 +241,10 @@ static ssize_t hostnet_tcp_readv(struct _hostnet_tcp_conn *conn, const struct io
assert(conn);
assert(iov);
assert(iovcnt > 0);
+ size_t count = 0;
+ for (int i = 0; i < iovcnt; i++)
+ count += iov[i].iov_len;
+ assert(count);
ssize_t ret;
struct hostnet_pthread_readv_args args = {
@@ -319,6 +323,10 @@ static ssize_t hostnet_tcp_writev(struct _hostnet_tcp_conn *conn, const struct i
assert(conn);
assert(iov);
assert(iovcnt > 0);
+ size_t count = 0;
+ for (int i = 0; i < iovcnt; i++)
+ count += iov[i].iov_len;
+ assert(count);
ssize_t ret;
struct hostnet_pthread_writev_args args = {
diff --git a/libhw_cr/rp2040_hwspi.c b/libhw_cr/rp2040_hwspi.c
index c0b4fa4..ee03b03 100644
--- a/libhw_cr/rp2040_hwspi.c
+++ b/libhw_cr/rp2040_hwspi.c
@@ -158,12 +158,14 @@ static void rp2040_hwspi_readwritev(struct rp2040_hwspi *self, const struct dupl
uint8_t bogus_rx_dst;
+ size_t count = 0;
int pruned_iovcnt = 0;
- for (int i = 0; i < iovcnt; i++)
+ for (int i = 0; i < iovcnt; i++) {
+ count += iov[i].iov_len;
if (iov[i].iov_len)
pruned_iovcnt++;
- if (!pruned_iovcnt)
- return;
+ }
+ assert(count);
/* It doesn't *really* matter which aliases we choose:
*
diff --git a/libhw_cr/w5500.c b/libhw_cr/w5500.c
index e676364..cb424b0 100644
--- a/libhw_cr/w5500.c
+++ b/libhw_cr/w5500.c
@@ -608,10 +608,9 @@ static ssize_t w5500_tcp_writev(struct _w5500_socket *socket, const struct iovec
size_t count = 0;
for (int i = 0; i < iovcnt; i++)
count += iov[i].iov_len;
+ assert(count);
log_debugf("tcp_conn.write(%zu)", count);
ASSERT_SELF(stream_conn, TCP);
- if (count == 0)
- return 0;
/* What we really want is to pause until we receive an ACK for
* some data we just queued, so that we can line up some new
@@ -701,10 +700,9 @@ static ssize_t w5500_tcp_readv(struct _w5500_socket *socket, const struct iovec
size_t count = 0;
for (int i = 0; i < iovcnt; i++)
count += iov[i].iov_len;
+ assert(count);
log_debugf("tcp_conn.read(%zu)", count);
ASSERT_SELF(stream_conn, TCP);
- if (count == 0)
- return 0;
struct alarmclock_trigger trigger = {};
if (socket->read_deadline_ns)