mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-01 02:42:05 +00:00
Fix a problem for long symlinks in conda (#15908) [backport]
* d8c80ea69d (diff-e1d8e552330911f9f779f85b6f2c00a15e790dcc3fbb3b28f5da1d660a30c5b8)
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user