diff options
author | Christopher Dunn <cdunn@pacificbiosciences.com> | 2020-11-12 02:32:38 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-12 09:32:38 +0100 |
commit | c6ceefea6de2a0159f33722839bfe9a0ce9134e1 (patch) | |
tree | 557125a9f5d33a9e17ae31e952f9b628334a43cf /lib | |
parent | 402df0b06139183fc8b982058774807a13534daf (diff) | |
download | Nim-c6ceefea6de2a0159f33722839bfe9a0ce9134e1.tar.gz |
Fix a problem for long symlinks in conda (#15908) [backport]
* https://github.com/conda-forge/nim-feedstock/commit/d8c80ea69dca30d99073d33845ddd79f9892755b#diff-e1d8e552330911f9f779f85b6f2c00a15e790dcc3fbb3b28f5da1d660a30c5b8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/os.nim | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 2601f9d47..234d82bc2 100644 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -1172,6 +1172,7 @@ when not defined(windows) and not weirdTarget: else: result = S_ISLNK(rawInfo.st_mode) const + maxSymlinkLen = 1024 ExeExts* = ## Platform specific file extension for executables. ## On Windows ``["exe", "cmd", "bat"]``, on Posix ``[""]``. when defined(windows): ["exe", "cmd", "bat"] else: [""] @@ -1213,11 +1214,11 @@ proc findExe*(exe: string, followSymlinks: bool = true; when not defined(windows): while followSymlinks: # doubles as if here if x.checkSymlink: - var r = newString(256) - var len = readlink(x, r, 256) + var r = newString(maxSymlinkLen) + var len = readlink(x, r, maxSymlinkLen) if len < 0: raiseOSError(osLastError(), exe) - if len > 256: + if len > maxSymlinkLen: r = newString(len+1) len = readlink(x, r, len) setLen(r, len) @@ -2561,11 +2562,11 @@ proc expandSymlink*(symlinkPath: string): string {.noWeirdTarget.} = when defined(windows): result = symlinkPath else: - result = newString(256) - var len = readlink(symlinkPath, result, 256) + result = newString(maxSymlinkLen) + var len = readlink(symlinkPath, result, maxSymlinkLen) if len < 0: raiseOSError(osLastError(), symlinkPath) - if len > 256: + if len > maxSymlinkLen: result = newString(len+1) len = readlink(symlinkPath, result, len) setLen(result, len) @@ -2863,9 +2864,9 @@ when not weirdTarget and (defined(freebsd) or defined(dragonfly) or defined(netb when not weirdTarget and (defined(linux) or defined(solaris) or defined(bsd) or defined(aix)): proc getApplAux(procPath: string): string = - result = newString(256) - var len = readlink(procPath, result, 256) - if len > 256: + result = newString(maxSymlinkLen) + var len = readlink(procPath, result, maxSymlinkLen) + if len > maxSymlinkLen: result = newString(len+1) len = readlink(procPath, result, len) setLen(result, len) |