summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
authorJacek Sieka <arnetheduck@gmail.com>2019-07-08 09:14:35 +0200
committerMiran <narimiran@disroot.org>2019-07-08 09:14:35 +0200
commit9e7d885f3509a25ee804f2837e24b49a378a1fe1 (patch)
treebd57b9f05acab60dbd21643488d7c1ba13e457c0 /lib
parentd0616ed115840053f705a8bf45fa5cf566d3e2b1 (diff)
downloadNim-9e7d885f3509a25ee804f2837e24b49a378a1fe1.tar.gz
dynlib: use posix module (#11623)
Diffstat (limited to 'lib')
-rw-r--r--lib/posix/posix_linux_amd64_consts.nim5
-rw-r--r--lib/posix/posix_other_consts.nim5
-rw-r--r--lib/pure/dynlib.nim28
-rw-r--r--lib/pure/reservedmem.nim6
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