Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › crypto/ › tls/ › Client.zig › drain
drain
Client.drain
fn drain (w : *Writer , data : []const []const u8 , splat : usize ) Writer .Error !usize
File
Code
fn drain (w : *Writer , data : []const []const u8 , splat : usize ) Writer .Error !usize {
const c : *Client = @alignCast (@fieldParentPtr ("writer" , w ));
const output = c .output ;
const ciphertext_buf = try output .writableSliceGreedy (min_buffer_len );
var ciphertext_end : usize = 0 ;
var total_clear : usize = 0 ;
done : {
{
const buf = w .buffered ();
const prepared = prepareCiphertextRecord (c , ciphertext_buf [ciphertext_end ..], buf , .application_data );
total_clear += prepared .cleartext_len ;
ciphertext_end += prepared .ciphertext_end ;
if (prepared .cleartext_len < buf .len ) break :done ;
}
for (data [0 .. data .len - 1 ]) |buf | {
const prepared = prepareCiphertextRecord (c , ciphertext_buf [ciphertext_end ..], buf , .application_data );
total_clear += prepared .cleartext_len ;
ciphertext_end += prepared .ciphertext_end ;
if (prepared .cleartext_len < buf .len ) break :done ;
}
const buf = data [data .len - 1 ];
for (0 ..splat ) |_ | {
const prepared = prepareCiphertextRecord (c , ciphertext_buf [ciphertext_end ..], buf , .application_data );
total_clear += prepared .cleartext_len ;
ciphertext_end += prepared .ciphertext_end ;
if (prepared .cleartext_len < buf .len ) break :done ;
}
}
output .advance (ciphertext_end );
return w .consume (total_clear );
}