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 › compiler/ › Maker/ › Fetch.zig › hashFileFallible
hashFileFallible
Fetch.hashFileFallible
fn hashFileFallible (io : Io , dir : Io .Dir , hashed_file : *HashedFile ) HashedFile .Error !void
File
Code
fn hashFileFallible (io : Io , dir : Io .Dir , hashed_file : *HashedFile ) HashedFile .Error !void {
var buf : [8000 ]u8 = undefined ;
var hasher = Package .Hash .Algo .init (.{});
hasher .update (hashed_file .normalized_path );
var file_size : u64 = 0 ;
switch (hashed_file .kind ) {
.file => {
var file = try dir .openFile (io , hashed_file .fs_path , .{});
defer file .close (io );
hasher .update (&.{ 0 , 0 });
var file_header : FileHeader = .{};
while (true ) {
const bytes_read = try file .readPositional (io , &.{&buf }, file_size );
if (bytes_read == 0 ) break ;
file_size += bytes_read ;
hasher .update (buf [0 ..bytes_read ]);
file_header .update (buf [0 ..bytes_read ]);
}
if (file_header .isExecutable ()) {
try setExecutable (io , file );
}
},
.link => {
const link_name = buf [0 ..try dir .readLink (io , hashed_file .fs_path , &buf )];
if (fs .path .sep != canonical_sep ) {
// platforms which means we must normalize path separators
// inside symlinks.
normalizePath (link_name );
}
hasher .update (link_name );
},
}
hasher .final (&hashed_file .hash );
hashed_file .size = file_size ;
}