diff --git a/changelog.md b/changelog.md index 46bc1a87245bf..3bee0499373dd 100644 --- a/changelog.md +++ b/changelog.md @@ -52,6 +52,15 @@ const bar = a # error let baz = a # error ``` +- The following POSIX wrappers have had their types changed from signed to + unsigned types on OSX and FreeBSD/OpenBSD to correct codegen errors: + - `Gid` (was `int32`, is now `uint32`) + - `Uid` (was `int32`, is now `uint32`) + - `Dev` (was `int32`, is now `uint32` on FreeBSD) + - `Nlink` (was `int16`, is now `uint32` on OpenBSD and `uint16` on OSX/other BSD) + - `sin6_flowinfo` and `sin6_scope_id` fields of `Sockaddr_in6` + (were `int32`, are now `uint32`) + - `n_net` field of `Tnetent` (was `int32`, is now `uint32`) ## Standard library additions and changes diff --git a/lib/posix/posix_macos_amd64.nim b/lib/posix/posix_macos_amd64.nim index 366181846dae4..a4b64ed622d58 100644 --- a/lib/posix/posix_macos_amd64.nim +++ b/lib/posix/posix_macos_amd64.nim @@ -122,7 +122,11 @@ type ## used for block sizes Clock* {.importc: "clock_t", header: "".} = int ClockId* {.importc: "clockid_t", header: "".} = int - Dev* {.importc: "dev_t", header: "".} = int32 + Dev* {.importc: "dev_t", header: "".} = ( + when defined(freebsd): + uint32 + else: + int32) Fsblkcnt* {.importc: "fsblkcnt_t", header: "".} = int Fsfilcnt* {.importc: "fsfilcnt_t", header: "".} = int Gid* {.importc: "gid_t", header: "".} = uint32 @@ -135,7 +139,7 @@ type else: uint16 ) - Nlink* {.importc: "nlink_t", header: "".} = int16 + Nlink* {.importc: "nlink_t", header: "".} = uint16 Off* {.importc: "off_t", header: "".} = int64 Pid* {.importc: "pid_t", header: "".} = int32 Pthread_attr* {.importc: "pthread_attr_t", header: "".} = int diff --git a/lib/posix/posix_openbsd_amd64.nim b/lib/posix/posix_openbsd_amd64.nim index fbe72511cfb1e..184cd89c073ff 100644 --- a/lib/posix/posix_openbsd_amd64.nim +++ b/lib/posix/posix_openbsd_amd64.nim @@ -131,7 +131,11 @@ type ## used for block sizes Clock* {.importc: "clock_t", header: "".} = int ClockId* {.importc: "clockid_t", header: "".} = int - Dev* {.importc: "dev_t", header: "".} = int32 + Dev* {.importc: "dev_t", header: "".} = ( + when defined(freebsd): + uint32 + else: + int32) Fsblkcnt* {.importc: "fsblkcnt_t", header: "".} = int Fsfilcnt* {.importc: "fsfilcnt_t", header: "".} = int Gid* {.importc: "gid_t", header: "".} = uint32 @@ -139,7 +143,7 @@ type Ino* {.importc: "ino_t", header: "".} = int Key* {.importc: "key_t", header: "".} = int Mode* {.importc: "mode_t", header: "".} = uint32 - Nlink* {.importc: "nlink_t", header: "".} = int16 + Nlink* {.importc: "nlink_t", header: "".} = uint32 Off* {.importc: "off_t", header: "".} = int64 Pid* {.importc: "pid_t", header: "".} = int32 Pthread_attr* {.importc: "pthread_attr_t", header: "".} = int diff --git a/tests/stdlib/twronguidtype.nim b/tests/stdlib/twrongstattype.nim similarity index 55% rename from tests/stdlib/twronguidtype.nim rename to tests/stdlib/twrongstattype.nim index 25f834d8a4343..4a1fc30c65645 100644 --- a/tests/stdlib/twronguidtype.nim +++ b/tests/stdlib/twrongstattype.nim @@ -6,3 +6,9 @@ when defined(macosx) or defined(freebsd) or defined(openbsd) or defined(netbsd): var y: uint32 let myUid = geteuid() discard myUid == uid(y) + proc dev(x: uint32): Dev = Dev(x) + let myDev = 1.Dev + discard myDev == dev(y) + proc nlink(x: uint32): Nlink = Nlink(x) + let myNlink = 1.Nlink + discard myNlink == nlink(y)