feature. See also
. The project being documented here (as the example) is the Zig library itself.
Threaded.lookupHosts
fn lookupHosts(
t: *Threaded,
host_name: HostName,
resolved: *Io.Queue(HostName.LookupResult),
options: HostName.LookupOptions,
) !void
File
Code
fn lookupHosts(
t: *Threaded,
host_name: HostName,
resolved: *Io.Queue(HostName.LookupResult),
options: HostName.LookupOptions,
) !void {
const path_w = if (is_windows) path_w: {
var path_w_buf: [windows.PATH_MAX_WIDE:0]u16 = undefined;
const system_dir = windows.getSystemDirectoryWtf16Le();
const suffix = [_]u16{
'\\', 'd', 'r', 'i', 'v', 'e', 'r', 's', '\\', 'e', 't', 'c', '\\', 'h', 'o', 's', 't', 's',
};
@memcpy(path_w_buf[0..system_dir.len], system_dir);
@memcpy(path_w_buf[system_dir.len..][0..suffix.len], &suffix);
path_w_buf[system_dir.len + suffix.len] = 0;
break :path_w wToPrefixedFileW(null, &path_w_buf, .{}) catch |err| switch (err) {
error.FileNotFound,
error.AccessDenied,
=> return error.UnknownHostName,
error.Canceled => |e| return e,
else => {
return error.DetectingNetworkConfigurationFailed;
},
};
};
const file = (if (is_windows)
dirOpenFileWtf16(null, path_w.span(), .{})
else
dirOpenFile(t, .cwd(), "/etc/hosts", .{})) catch |err| switch (err) {
error.FileNotFound,
error.NotDir,
error.AccessDenied,
=> return error.UnknownHostName,
error.Canceled => |e| return e,
else => {
return error.DetectingNetworkConfigurationFailed;
},
};
defer fileClose(t, &.{file});
var line_buf: [512]u8 = undefined;
var file_reader = file.reader(t.io(), &line_buf);
return t.lookupHostsReader(host_name, resolved, options, &file_reader.interface) catch |err| switch (err) {
error.ReadFailed => switch (file_reader.err.?) {
error.Canceled => |e| return e,
else => {
return error.DetectingNetworkConfigurationFailed;
},
},
error.Canceled,
error.Closed,
error.UnknownHostName,
=> |e| return e,
};
}