summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorrockcavera <rockcavera@gmail.com>2021-12-17 05:01:33 -0300
committerGitHub <noreply@github.com>2021-12-17 09:01:33 +0100
commit5ddaf3e1fbff4c0519088612f9ec3b10d62d2316 (patch)
treebd1121d4f16be446235ebc0b502bf593690b2032
parent609388e33fb9a19d65b5dee8711d411916981802 (diff)
downloadNim-5ddaf3e1fbff4c0519088612f9ec3b10d62d2316.tar.gz
fix #19244 - solves the problem of the InAddr object constructor in Windows. (#19259)
* Update winlean.nim

* Update tnet_ll.nim
-rw-r--r--lib/windows/winlean.nim2
-rw-r--r--tests/stdlib/tnet_ll.nim6
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim
index b8f3886d7..6e626e4ba 100644
--- a/lib/windows/winlean.nim
+++ b/lib/windows/winlean.nim
@@ -478,7 +478,7 @@ type
 
   PSockAddr = ptr SockAddr
 
-  InAddr* {.importc: "IN_ADDR", header: "winsock2.h".} = object
+  InAddr* {.importc: "IN_ADDR", header: "winsock2.h", union.} = object
     s_addr*: uint32  # IP address
 
   Sockaddr_in* {.importc: "SOCKADDR_IN",
diff --git a/tests/stdlib/tnet_ll.nim b/tests/stdlib/tnet_ll.nim
index 248dbb79b..2d340cea8 100644
--- a/tests/stdlib/tnet_ll.nim
+++ b/tests/stdlib/tnet_ll.nim
@@ -26,6 +26,7 @@ suite "inet_ntop tests":
     # regular
     var ip4 = InAddr()
     ip4.s_addr = 0x10111213'u32
+    check: ip4.s_addr == 0x10111213'u32
 
     var buff: array[0..255, char]
     let r = inet_ntop(AF_INET, cast[pointer](ip4.s_addr.addr), buff[0].addr, buff.len.int32)
@@ -43,3 +44,8 @@ suite "inet_ntop tests":
     let r = inet_ntop(AF_INET6, cast[pointer](ip6[0].addr), buff[0].addr, buff.len.int32)
     let res = if r == nil: "" else: $r
     check: not ipv6Support or res == "10:110:20:120:30:130:40:140"
+
+  test "InAddr":
+    # issue 19244
+    var ip4 = InAddr(s_addr: 0x10111213'u32)
+    check: ip4.s_addr == 0x10111213'u32