diff options
-rw-r--r-- | lib/pure/os.nim | 13 | ||||
-rw-r--r-- | tests/stdlib/tos.nim | 12 |
2 files changed, 20 insertions, 5 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim index aa58fea73..79a24662d 100644 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -798,13 +798,16 @@ proc getTempDir*(): string {.rtl, extern: "nos$1", ## * `expandTilde proc <#expandTilde,string>`_ ## * `getCurrentDir proc <#getCurrentDir>`_ ## * `setCurrentDir proc <#setCurrentDir,string>`_ - const tempDirDefault = "/tmp/" + const tempDirDefault = "/tmp" + result = tempDirDefault when defined(tempDir): const tempDir {.strdefine.}: string = tempDirDefault - return tempDir - elif defined(windows): return string(getEnv("TEMP")) & "\\" - elif defined(android): return getHomeDir() - else: return tempDirDefault + result = tempDir + elif defined(windows): result = string(getEnv("TEMP")) + elif defined(android): result = getHomeDir() + else: + if existsEnv("TMPDIR"): result = string(getEnv("TMPDIR")) + normalizePathEnd(result, trailingSep=true) proc expandTilde*(path: string): string {. tags: [ReadEnvEffect, ReadIOEffect].} = diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim index 23fa4d098..2d69332fc 100644 --- a/tests/stdlib/tos.nim +++ b/tests/stdlib/tos.nim @@ -333,3 +333,15 @@ block ospaths: doAssert joinPath("", "lib") == "lib" doAssert joinPath("", "/lib") == unixToNativePath"/lib" doAssert joinPath("usr/", "/lib") == unixToNativePath"usr/lib" + +block getTempDir: + block TMPDIR: + # TMPDIR env var is not used if either of these are defined. + when not (defined(tempDir) or defined(windows) or defined(android)): + if existsEnv("TMPDIR"): + let origTmpDir = getEnv("TMPDIR") + putEnv("TMPDIR", "/mytmp") + doAssert getTempDir() == "/mytmp/" + putEnv("TMPDIR", origTmpDir) + else: + doAssert getTempDir() == "/tmp/" |