summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorChristopher Dunn <cdunn@pacificbiosciences.com>2020-11-12 02:32:38 -0600
committerGitHub <noreply@github.com>2020-11-12 09:32:38 +0100
commitc6ceefea6de2a0159f33722839bfe9a0ce9134e1 (patch)
tree557125a9f5d33a9e17ae31e952f9b628334a43cf /lib/pure
parent402df0b06139183fc8b982058774807a13534daf (diff)
downloadNim-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/pure')
-rw-r--r--lib/pure/os.nim19
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)