Skip to content

Commit

Permalink
Fixed accounting for zero terminator in long path limitation
Browse files Browse the repository at this point in the history
Fixes #1909

Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
  • Loading branch information
Qstick and Taloth committed Jun 5, 2022
1 parent 7b4e33e commit 81714d2
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions src/NzbDrone.Common/Disk/LongPathSupport.cs
@@ -1,15 +1,76 @@
using System;
using System.IO;
using NzbDrone.Common.EnvironmentInfo;

namespace NzbDrone.Common.Disk
{
public static class LongPathSupport
{
private static int MAX_PATH;
private static int MAX_NAME;

public static void Enable()
{
// Mono has an issue with enabling long path support via app.config.
// This works for both mono and .net on Windows.
AppContext.SetSwitch("Switch.System.IO.UseLegacyPathHandling", false);
AppContext.SetSwitch("Switch.System.IO.BlockLongPaths", false);

DetectLongPathLimits();
}

private static void DetectLongPathLimits()
{
if (!int.TryParse(Environment.GetEnvironmentVariable("MAX_PATH"), out MAX_PATH))
{
if (OsInfo.IsLinux)
{
MAX_PATH = 4096;
}
else
{
try
{
Path.GetDirectoryName($@"C:\{new string('a', 300)}\ab");
MAX_PATH = 4096;
}
catch
{
MAX_PATH = 260 - 1;
}
}
}

if (!int.TryParse(Environment.GetEnvironmentVariable("MAX_NAME"), out MAX_NAME))
{
MAX_NAME = 255;
}
}

public static int MaxFilePathLength
{
get
{
if (MAX_PATH == 0)
{
DetectLongPathLimits();
}

return MAX_PATH;
}
}

public static int MaxFileNameLength
{
get
{
if (MAX_NAME == 0)
{
DetectLongPathLimits();
}

return MAX_NAME;
}
}
}
}

0 comments on commit 81714d2

Please sign in to comment.