Fix a problem for long symlinks in conda (#15908) [backport]
* d8c80ea69d (diff-e1d8e55233)
This commit is contained in:
parent
402df0b061
commit
c6ceefea6d
1 changed files with 10 additions and 9 deletions
|
|
@ -1172,6 +1172,7 @@ when not defined(windows) and not weirdTarget:
|
||||||
else: result = S_ISLNK(rawInfo.st_mode)
|
else: result = S_ISLNK(rawInfo.st_mode)
|
||||||
|
|
||||||
const
|
const
|
||||||
|
maxSymlinkLen = 1024
|
||||||
ExeExts* = ## Platform specific file extension for executables.
|
ExeExts* = ## Platform specific file extension for executables.
|
||||||
## On Windows ``["exe", "cmd", "bat"]``, on Posix ``[""]``.
|
## On Windows ``["exe", "cmd", "bat"]``, on Posix ``[""]``.
|
||||||
when defined(windows): ["exe", "cmd", "bat"] else: [""]
|
when defined(windows): ["exe", "cmd", "bat"] else: [""]
|
||||||
|
|
@ -1213,11 +1214,11 @@ proc findExe*(exe: string, followSymlinks: bool = true;
|
||||||
when not defined(windows):
|
when not defined(windows):
|
||||||
while followSymlinks: # doubles as if here
|
while followSymlinks: # doubles as if here
|
||||||
if x.checkSymlink:
|
if x.checkSymlink:
|
||||||
var r = newString(256)
|
var r = newString(maxSymlinkLen)
|
||||||
var len = readlink(x, r, 256)
|
var len = readlink(x, r, maxSymlinkLen)
|
||||||
if len < 0:
|
if len < 0:
|
||||||
raiseOSError(osLastError(), exe)
|
raiseOSError(osLastError(), exe)
|
||||||
if len > 256:
|
if len > maxSymlinkLen:
|
||||||
r = newString(len+1)
|
r = newString(len+1)
|
||||||
len = readlink(x, r, len)
|
len = readlink(x, r, len)
|
||||||
setLen(r, len)
|
setLen(r, len)
|
||||||
|
|
@ -2561,11 +2562,11 @@ proc expandSymlink*(symlinkPath: string): string {.noWeirdTarget.} =
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
result = symlinkPath
|
result = symlinkPath
|
||||||
else:
|
else:
|
||||||
result = newString(256)
|
result = newString(maxSymlinkLen)
|
||||||
var len = readlink(symlinkPath, result, 256)
|
var len = readlink(symlinkPath, result, maxSymlinkLen)
|
||||||
if len < 0:
|
if len < 0:
|
||||||
raiseOSError(osLastError(), symlinkPath)
|
raiseOSError(osLastError(), symlinkPath)
|
||||||
if len > 256:
|
if len > maxSymlinkLen:
|
||||||
result = newString(len+1)
|
result = newString(len+1)
|
||||||
len = readlink(symlinkPath, result, len)
|
len = readlink(symlinkPath, result, len)
|
||||||
setLen(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)):
|
when not weirdTarget and (defined(linux) or defined(solaris) or defined(bsd) or defined(aix)):
|
||||||
proc getApplAux(procPath: string): string =
|
proc getApplAux(procPath: string): string =
|
||||||
result = newString(256)
|
result = newString(maxSymlinkLen)
|
||||||
var len = readlink(procPath, result, 256)
|
var len = readlink(procPath, result, maxSymlinkLen)
|
||||||
if len > 256:
|
if len > maxSymlinkLen:
|
||||||
result = newString(len+1)
|
result = newString(len+1)
|
||||||
len = readlink(procPath, result, len)
|
len = readlink(procPath, result, len)
|
||||||
setLen(result, len)
|
setLen(result, len)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue