| ... | ... | @@ -117,10 +117,12 @@ pub const IpAddress = extern union { |
| 117 | 117 | ip_slice[10] = 0xff; |
| 118 | 118 | ip_slice[11] = 0xff; |
| 119 | 119 | |
| 120 | | ip_slice[12] = @truncate(u8, addr >> 24 & 0xff); |
| 121 | | ip_slice[13] = @truncate(u8, addr >> 16 & 0xff); |
| 122 | | ip_slice[14] = @truncate(u8, addr >> 8 & 0xff); |
| 123 | | ip_slice[15] = @truncate(u8, addr & 0xff); |
| 120 | const ptr = @sliceToBytes((*const [1]u32)(&addr)[0..]); |
| 121 | |
| 122 | ip_slice[12] = ptr[0]; |
| 123 | ip_slice[13] = ptr[1]; |
| 124 | ip_slice[14] = ptr[2]; |
| 125 | ip_slice[15] = ptr[3]; |
| 124 | 126 | return result; |
| 125 | 127 | } else { |
| 126 | 128 | const digit = try std.fmt.charToDigit(c, 16); |
| ... | ... | @@ -269,6 +271,20 @@ pub const IpAddress = extern union { |
| 269 | 271 | }, |
| 270 | 272 | os.AF_INET6 => { |
| 271 | 273 | const port = mem.bigToNative(u16, self.in6.port); |
| 274 | if (mem.eql(u8, self.in6.addr[0..12], [_]u8{0,0,0,0,0,0,0,0,0,0,0xff,0xff})) { |
| 275 | try std.fmt.format( |
| 276 | context, |
| 277 | Errors, |
| 278 | output, |
| 279 | "[::ffff:{}.{}.{}.{}]:{}", |
| 280 | self.in6.addr[12], |
| 281 | self.in6.addr[13], |
| 282 | self.in6.addr[14], |
| 283 | self.in6.addr[15], |
| 284 | port, |
| 285 | ); |
| 286 | return; |
| 287 | } |
| 272 | 288 | const big_endian_parts = @ptrCast(*align(1) const [8]u16, &self.in6.addr); |
| 273 | 289 | const native_endian_parts = switch (builtin.endian) { |
| 274 | 290 | .Big => big_endian_parts.*, |