Make res nullable in getaddrinfo

This commit is contained in:
Jarred Sumner 2023-01-07 20:44:03 -08:00 committed by Veikka Tuominen
parent 6c98c8d891
commit a9eb463202
3 changed files with 11 additions and 9 deletions

View File

@ -322,7 +322,9 @@ pub extern "c" fn getaddrinfo(
noalias node: ?[*:0]const u8,
noalias service: ?[*:0]const u8,
noalias hints: ?*const c.addrinfo,
noalias res: **c.addrinfo,
/// On Linux, `res` will not be modified on error and `freeaddrinfo` will
/// potentially crash if you pass it an undefined pointer
noalias res: *?*c.addrinfo,
) c.EAI;
pub extern "c" fn freeaddrinfo(res: *c.addrinfo) void;

View File

@ -764,7 +764,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
.addrlen = 0,
.next = null,
};
var res: *os.addrinfo = undefined;
var res: ?*os.addrinfo = null;
var first = true;
while (true) {
const rc = ws2_32.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res);
@ -791,7 +791,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
const addr_count = blk: {
var count: usize = 0;
var it: ?*os.addrinfo = res;
var it = res;
while (it) |info| : (it = info.next) {
if (info.addr != null) {
count += 1;
@ -801,7 +801,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
};
result.addrs = try arena.alloc(Address, addr_count);
var it: ?*os.addrinfo = res;
var it = res;
var i: usize = 0;
while (it) |info| : (it = info.next) {
const addr = info.addr orelse continue;
@ -836,7 +836,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
.addrlen = 0,
.next = null,
};
var res: *os.addrinfo = undefined;
var res: ?*os.addrinfo = null;
switch (sys.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res)) {
@intToEnum(sys.EAI, 0) => {},
.ADDRFAMILY => return error.HostLacksNetworkAddresses,
@ -854,11 +854,11 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
},
else => unreachable,
}
defer sys.freeaddrinfo(res);
defer if (res) |some| sys.freeaddrinfo(some);
const addr_count = blk: {
var count: usize = 0;
var it: ?*os.addrinfo = res;
var it = res;
while (it) |info| : (it = info.next) {
if (info.addr != null) {
count += 1;
@ -868,7 +868,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
};
result.addrs = try arena.alloc(Address, addr_count);
var it: ?*os.addrinfo = res;
var it = res;
var i: usize = 0;
while (it) |info| : (it = info.next) {
const addr = info.addr orelse continue;

View File

@ -2312,7 +2312,7 @@ pub extern "ws2_32" fn getaddrinfo(
pNodeName: ?[*:0]const u8,
pServiceName: ?[*:0]const u8,
pHints: ?*const addrinfoa,
ppResult: **addrinfoa,
ppResult: *?*addrinfoa,
) callconv(WINAPI) i32;
pub extern "ws2_32" fn GetAddrInfoExA(