diff options
author | Jacek Sieka <arnetheduck@gmail.com> | 2019-07-08 09:14:35 +0200 |
---|---|---|
committer | Miran <narimiran@disroot.org> | 2019-07-08 09:14:35 +0200 |
commit | 9e7d885f3509a25ee804f2837e24b49a378a1fe1 (patch) | |
tree | bd57b9f05acab60dbd21643488d7c1ba13e457c0 /lib | |
parent | d0616ed115840053f705a8bf45fa5cf566d3e2b1 (diff) | |
download | Nim-9e7d885f3509a25ee804f2837e24b49a378a1fe1.tar.gz |
dynlib: use posix module (#11623)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/posix/posix_linux_amd64_consts.nim | 5 | ||||
-rw-r--r-- | lib/posix/posix_other_consts.nim | 5 | ||||
-rw-r--r-- | lib/pure/dynlib.nim | 28 | ||||
-rw-r--r-- | lib/pure/reservedmem.nim | 6 |
4 files changed, 19 insertions, 25 deletions
diff --git a/lib/posix/posix_linux_amd64_consts.nim b/lib/posix/posix_linux_amd64_consts.nim index dfbfe7f64..7352e8e35 100644 --- a/lib/posix/posix_linux_amd64_consts.nim +++ b/lib/posix/posix_linux_amd64_consts.nim @@ -418,6 +418,9 @@ const PROT_READ* = cint(1) const PROT_WRITE* = cint(2) const PROT_EXEC* = cint(4) const PROT_NONE* = cint(0) +const MAP_ANONYMOUS* = cint(32) +const MAP_FIXED_NOREPLACE* = cint(1048576) +const MAP_NORESERVE* = cint(16384) const MAP_SHARED* = cint(1) const MAP_PRIVATE* = cint(2) const MAP_FIXED* = cint(16) @@ -634,7 +637,7 @@ const SC_MQ_OPEN_MAX* = cint(27) const SC_MQ_PRIO_MAX* = cint(28) const SC_NGROUPS_MAX* = cint(3) const SC_OPEN_MAX* = cint(4) -const SC_PAGE_SIZE* = cint(30) +const SC_PAGESIZE* = cint(30) const SC_PRIORITIZED_IO* = cint(13) const SC_PRIORITY_SCHEDULING* = cint(10) const SC_RAW_SOCKETS* = cint(236) diff --git a/lib/posix/posix_other_consts.nim b/lib/posix/posix_other_consts.nim index cd5199078..9fcbe425d 100644 --- a/lib/posix/posix_other_consts.nim +++ b/lib/posix/posix_other_consts.nim @@ -434,6 +434,9 @@ var PROT_READ* {.importc: "PROT_READ", header: "<sys/mman.h>".}: cint var PROT_WRITE* {.importc: "PROT_WRITE", header: "<sys/mman.h>".}: cint var PROT_EXEC* {.importc: "PROT_EXEC", header: "<sys/mman.h>".}: cint var PROT_NONE* {.importc: "PROT_NONE", header: "<sys/mman.h>".}: cint +var MAP_ANONYMOUS* {.importc: "MAP_ANONYMOUS", header: "<sys/mman.h>".}: cint +var MAP_FIXED_NOREPLACE* {.importc: "MAP_FIXED_NOREPLACE", header: "<sys/mman.h>".}: cint +var MAP_NORESERVE* {.importc: "MAP_NORESERVE", header: "<sys/mman.h>".}: cint var MAP_SHARED* {.importc: "MAP_SHARED", header: "<sys/mman.h>".}: cint var MAP_PRIVATE* {.importc: "MAP_PRIVATE", header: "<sys/mman.h>".}: cint var MAP_FIXED* {.importc: "MAP_FIXED", header: "<sys/mman.h>".}: cint @@ -655,7 +658,7 @@ var SC_MQ_OPEN_MAX* {.importc: "_SC_MQ_OPEN_MAX", header: "<unistd.h>".}: cint var SC_MQ_PRIO_MAX* {.importc: "_SC_MQ_PRIO_MAX", header: "<unistd.h>".}: cint var SC_NGROUPS_MAX* {.importc: "_SC_NGROUPS_MAX", header: "<unistd.h>".}: cint var SC_OPEN_MAX* {.importc: "_SC_OPEN_MAX", header: "<unistd.h>".}: cint -var SC_PAGE_SIZE* {.importc: "_SC_PAGE_SIZE", header: "<unistd.h>".}: cint +var SC_PAGESIZE* {.importc: "_SC_PAGESIZE", header: "<unistd.h>".}: cint var SC_PRIORITIZED_IO* {.importc: "_SC_PRIORITIZED_IO", header: "<unistd.h>".}: cint var SC_PRIORITY_SCHEDULING* {.importc: "_SC_PRIORITY_SCHEDULING", header: "<unistd.h>".}: cint var SC_RAW_SOCKETS* {.importc: "_SC_RAW_SOCKETS", header: "<unistd.h>".}: cint diff --git a/lib/pure/dynlib.nim b/lib/pure/dynlib.nim index ff12be90f..f3f9b1308 100644 --- a/lib/pure/dynlib.nim +++ b/lib/pure/dynlib.nim @@ -106,7 +106,7 @@ proc loadLibPattern*(pattern: string, global_symbols=false): LibHandle = result = loadLib(c, global_symbols) if not result.isNil: break -when defined(posix): +when defined(posix) and not defined(nintendoswitch): # # ========================================================================= # This is an implementation based on the dlfcn interface. @@ -115,24 +115,18 @@ when defined(posix): # as an emulation layer on top of native functions. # ========================================================================= # - var - RTLD_NOW {.importc: "RTLD_NOW", header: "<dlfcn.h>".}: int - RTLD_GLOBAL {.importc: "RTLD_GLOBAL", header: "<dlfcn.h>".}: int - - proc dlclose(lib: LibHandle) {.importc, header: "<dlfcn.h>".} - proc dlopen(path: cstring, mode: int): LibHandle {. - importc, header: "<dlfcn.h>".} - proc dlsym(lib: LibHandle, name: cstring): pointer {. - importc, header: "<dlfcn.h>".} + import posix proc loadLib(path: string, global_symbols=false): LibHandle = - var flags = RTLD_NOW - if global_symbols: flags = flags or RTLD_GLOBAL - return dlopen(path, flags) - proc loadLib(): LibHandle = return dlopen(nil, RTLD_NOW) - proc unloadLib(lib: LibHandle) = dlclose(lib) - proc symAddr(lib: LibHandle, name: cstring): pointer = - return dlsym(lib, name) + let flags = + if global_symbols: RTLD_NOW or RTLD_GLOBAL + else: RTLD_NOW + + dlopen(path, flags) + + proc loadLib(): LibHandle = dlopen(nil, RTLD_NOW) + proc unloadLib(lib: LibHandle) = discard dlclose(lib) + proc symAddr(lib: LibHandle, name: cstring): pointer = dlsym(lib, name) elif defined(nintendoswitch): # diff --git a/lib/pure/reservedmem.nim b/lib/pure/reservedmem.nim index 22e2b5096..41fcf68ea 100644 --- a/lib/pure/reservedmem.nim +++ b/lib/pure/reservedmem.nim @@ -79,12 +79,6 @@ when defined(windows): else: import posix - var MAP_ANONYMOUS {.importc: "MAP_ANONYMOUS", header: "<sys/mman.h>".}: cint - var MAP_NORESERVE {.importc: "MAP_NORESERVE", header: "<sys/mman.h>".}: cint - # var MAP_FIXED_NOREPLACE {.importc: "MAP_FIXED_NOREPLACE", header: "<sys/mman.h>".}: cint - - var SC_PAGESIZE {.importc: "_SC_PAGESIZE", header: "<unistd.h>".}: cint - let allocationGranularity = sysconf(SC_PAGESIZE) let |