authorgravatar for 709451+Jarred-Sumner@users.noreply.github.comJarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-07 20:44:03-08:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-01-19 23:08:15+02:00
loga9eb463202f46f6190f57c3b9a5c4913d6c5d6c5
tree44003549deea81d8682e351adf1c8fd07eed65e8
parent6c98c8d891808bab97a5ccf4f25e016c401dd8c3

Make `res` nullable in `getaddrinfo`


3 files changed, 11 insertions(+), 9 deletions(-)

lib/std/c.zig+3-1
......@@ -322,7 +322,9 @@ pub extern "c" fn getaddrinfo(
322322 noalias node: ?[*:0]const u8,
323323 noalias service: ?[*:0]const u8,
324324 noalias hints: ?*const c.addrinfo,
325 noalias res: **c.addrinfo,
325 /// On Linux, `res` will not be modified on error and `freeaddrinfo` will
326 /// potentially crash if you pass it an undefined pointer
327 noalias res: *?*c.addrinfo,
326328) c.EAI;
327329
328330pub extern "c" fn freeaddrinfo(res: *c.addrinfo) void;
lib/std/net.zig+7-7
......@@ -764,7 +764,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
764764 .addrlen = 0,
765765 .next = null,
766766 };
767 var res: *os.addrinfo = undefined;
767 var res: ?*os.addrinfo = null;
768768 var first = true;
769769 while (true) {
770770 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
791791
792792 const addr_count = blk: {
793793 var count: usize = 0;
794 var it: ?*os.addrinfo = res;
794 var it = res;
795795 while (it) |info| : (it = info.next) {
796796 if (info.addr != null) {
797797 count += 1;
......@@ -801,7 +801,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
801801 };
802802 result.addrs = try arena.alloc(Address, addr_count);
803803
804 var it: ?*os.addrinfo = res;
804 var it = res;
805805 var i: usize = 0;
806806 while (it) |info| : (it = info.next) {
807807 const addr = info.addr orelse continue;
......@@ -836,7 +836,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
836836 .addrlen = 0,
837837 .next = null,
838838 };
839 var res: *os.addrinfo = undefined;
839 var res: ?*os.addrinfo = null;
840840 switch (sys.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res)) {
841841 @intToEnum(sys.EAI, 0) => {},
842842 .ADDRFAMILY => return error.HostLacksNetworkAddresses,
......@@ -854,11 +854,11 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
854854 },
855855 else => unreachable,
856856 }
857 defer sys.freeaddrinfo(res);
857 defer if (res) |some| sys.freeaddrinfo(some);
858858
859859 const addr_count = blk: {
860860 var count: usize = 0;
861 var it: ?*os.addrinfo = res;
861 var it = res;
862862 while (it) |info| : (it = info.next) {
863863 if (info.addr != null) {
864864 count += 1;
......@@ -868,7 +868,7 @@ pub fn getAddressList(allocator: mem.Allocator, name: []const u8, port: u16) !*A
868868 };
869869 result.addrs = try arena.alloc(Address, addr_count);
870870
871 var it: ?*os.addrinfo = res;
871 var it = res;
872872 var i: usize = 0;
873873 while (it) |info| : (it = info.next) {
874874 const addr = info.addr orelse continue;
lib/std/os/windows/ws2_32.zig+1-1
......@@ -2312,7 +2312,7 @@ pub extern "ws2_32" fn getaddrinfo(
23122312 pNodeName: ?[*:0]const u8,
23132313 pServiceName: ?[*:0]const u8,
23142314 pHints: ?*const addrinfoa,
2315 ppResult: **addrinfoa,
2315 ppResult: *?*addrinfoa,
23162316) callconv(WINAPI) i32;
23172317
23182318pub extern "ws2_32" fn GetAddrInfoExA(