diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-03-10 13:40:47 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-03-10 13:40:47 +0100 |
commit | a1a44c99de2a1e9302832e33815360acf3dbae18 (patch) | |
tree | b4c9ec1af8f86a07c2b12ef20a61955e9c554907 /lib/pure | |
parent | 87e52bddbe5dc853f9fca2f9fb1cce23bfe25cb9 (diff) | |
parent | e6dfadf55dc205934d50cb94812063d7d1cf93b5 (diff) | |
download | Nim-a1a44c99de2a1e9302832e33815360acf3dbae18.tar.gz |
Merge pull request #3947 from def-/iofbf
Support IOFBF and IONBF on all systems
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/os.nim | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 017385825..470559e17 100644 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -1350,15 +1350,12 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [ReadIOEffect].} = ## Returns the filename of the application's executable. ## ## This procedure will resolve symlinks. - ## - ## **Note**: This does not work reliably on BSD. # Linux: /proc/<pid>/exe # Solaris: # /proc/<pid>/object/a.out (filename only) # /proc/<pid>/path/a.out (complete pathname) - # *BSD (and maybe Darwin too): - # /proc/<pid>/file + # FreeBSD: /proc/<pid>/file when defined(windows): when useWinUnicode: var buf = newWideCString("", 256) @@ -1368,15 +1365,6 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [ReadIOEffect].} = result = newString(256) var len = getModuleFileNameA(0, result, 256) setlen(result, int(len)) - elif defined(linux) or defined(aix): - result = getApplAux("/proc/self/exe") - if result.len == 0: result = getApplHeuristic() - elif defined(solaris): - result = getApplAux("/proc/" & $getpid() & "/path/a.out") - if result.len == 0: result = getApplHeuristic() - elif defined(freebsd): - result = getApplAux("/proc/" & $getpid() & "/file") - if result.len == 0: result = getApplHeuristic() elif defined(macosx): var size: cuint32 getExecPath1(nil, size) @@ -1386,9 +1374,15 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [ReadIOEffect].} = if result.len > 0: result = result.expandFilename else: + when defined(linux) or defined(aix) or defined(netbsd): + result = getApplAux("/proc/self/exe") + elif defined(solaris): + result = getApplAux("/proc/" & $getpid() & "/path/a.out") + elif defined(freebsd): + result = getApplAux("/proc/" & $getpid() & "/file") # little heuristic that may work on other POSIX-like systems: - result = string(getEnv("_")) - if result.len == 0: result = getApplHeuristic() + if result.len == 0: + result = getApplHeuristic() proc getApplicationFilename*(): string {.rtl, extern: "nos$1", deprecated.} = ## Returns the filename of the application's executable. @@ -1404,7 +1398,6 @@ proc getApplicationDir*(): string {.rtl, extern: "nos$1", deprecated.} = proc getAppDir*(): string {.rtl, extern: "nos$1", tags: [ReadIOEffect].} = ## Returns the directory of the application's executable. - ## **Note**: This does not work reliably on BSD. result = splitFile(getAppFilename()).dir proc sleep*(milsecs: int) {.rtl, extern: "nos$1", tags: [TimeEffect].} = |