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 standard library.
std › Io › Threaded › writeResolutionQuery Private Function writeResolutionQuery Doc Source Private Function std.Io.Threaded.writeResolutionQuery
fn writeResolutionQuery (q : *[280 ]u8 , op : u4 , dname : []const u8 , class : u8 , ty : HostName .DnsRecord , entropy : [2 ]u8 ) usize Params q : *[280 ]u8 op : u4 dname : []const u8 class : u8 ty : HostName .DnsRecord entropy : [2 ]u8 File Io/Threaded.zig: 14946
14946
14947
14948
14949
14950
14951
14952
14953
14954
14955
14956
14957
14958
14959
14960
14961
14962
14963
14964
14965
14966
14967
14968
14969
14970
14971
14972
14973 fn writeResolutionQuery (q : *[280 ]u8 , op : u4 , dname : []const u8 , class : u8 , ty : HostName .DnsRecord , entropy : [2 ]u8 ) usize {
// This implementation is ported from musl libc.
// A more idiomatic "ziggy" implementation would be welcome.
var name = dname ;
if (std .mem .endsWith (u8 , name , "." )) name .len -= 1 ;
assert (name .len <= 253 );
const n = 17 + name .len + @intFromBool (name .len != 0 );
// Construct query template - ID will be filled later
q [0 ..2 ].* = entropy ;
@memset (q [2 ..n ], 0 );
q [2 ] = @as (u8 , op ) * 8 + 1 ;
q [5 ] = 1 ;
@memcpy (q [13 ..][0 ..name .len ], name );
var i : usize = 13 ;
var j : usize = undefined ;
while (q [i ] != 0 ) : (i = j + 1 ) {
j = i ;
while (q [j ] != 0 and q [j ] != '.' ) : (j += 1 ) {}
// TODO determine the circumstances for this and whether or
// not this should be an error.
if (j - i - 1 > 62 ) unreachable ;
q [i - 1 ] = @intCast (j - i );
}
q [i + 1 ] = @backingInt (ty );
q [i + 3 ] = class ;
return n ;
}
Writes DNS resolution query packet data to
w; at most 280 bytes.