From 5def162391da5050761beb3e6efb24b99716fc99 Mon Sep 17 00:00:00 2001 From: Jonathan Marler Date: Mon, 6 Mar 2023 18:29:27 -0700 Subject: [PATCH] fix bug and simplify std.crypto.tls.Client.limitVecs --- lib/std/crypto/tls/Client.zig | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/std/crypto/tls/Client.zig b/lib/std/crypto/tls/Client.zig index c886bc7276..e67fd20925 100644 --- a/lib/std/crypto/tls/Client.zig +++ b/lib/std/crypto/tls/Client.zig @@ -1330,18 +1330,15 @@ const VecPut = struct { /// Limit iovecs to a specific byte size. fn limitVecs(iovecs: []std.os.iovec, len: usize) []std.os.iovec { - var vec_i: usize = 0; var bytes_left: usize = len; - while (true) { - if (bytes_left >= iovecs[vec_i].iov_len) { - bytes_left -= iovecs[vec_i].iov_len; - vec_i += 1; - if (vec_i == iovecs.len or bytes_left == 0) return iovecs[0..vec_i]; - continue; + for (iovecs, 0..) |*iovec, vec_i| { + if (bytes_left <= iovec.iov_len) { + iovec.iov_len = bytes_left; + return iovecs[0 .. vec_i + 1]; } - iovecs[vec_i].iov_len = bytes_left; - return iovecs[0..vec_i]; + bytes_left -= iovec.iov_len; } + return iovecs; } /// The priority order here is chosen based on what crypto algorithms Zig has