mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Move InMemoryFileSystem, PathParser, PathTools
This commit is contained in:
parent
d0a1d98885
commit
a289059ecf
25 changed files with 29 additions and 153 deletions
|
@ -1,6 +1,5 @@
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
|
@ -5,7 +5,6 @@ using LibHac.Common;
|
||||||
using LibHac.Common.Keys;
|
using LibHac.Common.Keys;
|
||||||
using LibHac.Crypto;
|
using LibHac.Crypto;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Kernel;
|
using LibHac.Kernel;
|
||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
|
|
|
@ -1,123 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using LibHac.Fs;
|
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Util;
|
|
||||||
|
|
||||||
namespace LibHac.Common;
|
|
||||||
|
|
||||||
[DebuggerDisplay("{ToString()}")]
|
|
||||||
internal ref struct PathBuilder
|
|
||||||
{
|
|
||||||
private Span<byte> _buffer;
|
|
||||||
private int _pos;
|
|
||||||
|
|
||||||
public int Length
|
|
||||||
{
|
|
||||||
get => _pos;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
Debug.Assert(value >= 0);
|
|
||||||
Debug.Assert(value <= Capacity);
|
|
||||||
_pos = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Capacity => _buffer.Length - 1;
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public PathBuilder(Span<byte> buffer)
|
|
||||||
{
|
|
||||||
_buffer = buffer;
|
|
||||||
_pos = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public Result Append(byte value)
|
|
||||||
{
|
|
||||||
int pos = _pos;
|
|
||||||
if (pos >= Capacity)
|
|
||||||
{
|
|
||||||
return ResultFs.TooLongPath.Log();
|
|
||||||
}
|
|
||||||
|
|
||||||
_buffer[pos] = value;
|
|
||||||
_pos = pos + 1;
|
|
||||||
return Result.Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public Result Append(ReadOnlySpan<byte> value)
|
|
||||||
{
|
|
||||||
int pos = _pos;
|
|
||||||
if (pos + value.Length >= Capacity)
|
|
||||||
{
|
|
||||||
return ResultFs.TooLongPath.Log();
|
|
||||||
}
|
|
||||||
|
|
||||||
value.CopyTo(_buffer.Slice(pos));
|
|
||||||
_pos = pos + value.Length;
|
|
||||||
return Result.Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public Result AppendWithPrecedingSeparator(byte value)
|
|
||||||
{
|
|
||||||
int pos = _pos;
|
|
||||||
if (pos + 1 >= Capacity)
|
|
||||||
{
|
|
||||||
// Append the separator if there's enough space
|
|
||||||
if (pos < Capacity)
|
|
||||||
{
|
|
||||||
_buffer[pos] = (byte)'/';
|
|
||||||
_pos = pos + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ResultFs.TooLongPath.Log();
|
|
||||||
}
|
|
||||||
|
|
||||||
_buffer[pos] = (byte)'/';
|
|
||||||
_buffer[pos + 1] = value;
|
|
||||||
_pos = pos + 2;
|
|
||||||
return Result.Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public Result GoUpLevels(int count)
|
|
||||||
{
|
|
||||||
Debug.Assert(count > 0);
|
|
||||||
|
|
||||||
int separators = 0;
|
|
||||||
int pos = _pos - 1;
|
|
||||||
|
|
||||||
for (; pos >= 0; pos--)
|
|
||||||
{
|
|
||||||
if (PathTools.IsDirectorySeparator(_buffer[pos]))
|
|
||||||
{
|
|
||||||
separators++;
|
|
||||||
|
|
||||||
if (separators == count) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (separators != count) return ResultFs.DirectoryUnobtainable.Log();
|
|
||||||
|
|
||||||
_pos = pos;
|
|
||||||
return Result.Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public void Terminate()
|
|
||||||
{
|
|
||||||
if (_buffer.Length > _pos)
|
|
||||||
{
|
|
||||||
_buffer[_pos] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return StringUtils.Utf8ZToString(_buffer.Slice(0, Length));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@ using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
|
using LibHac.Tools.FsSystem;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
namespace LibHac.FsSystem;
|
namespace LibHac.FsSystem;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
namespace LibHac.Tools.Fs;
|
namespace LibHac.Tools.Fs;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ using System.Collections.Generic;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
namespace LibHac.Tools.Fs;
|
namespace LibHac.Tools.Fs;
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
using Path = LibHac.Fs.Path;
|
||||||
|
|
||||||
namespace LibHac.Fs;
|
namespace LibHac.Tools.Fs;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A filesystem stored in-memory. Mainly used for testing.
|
/// A filesystem stored in-memory. Mainly used for testing.
|
|
@ -2,7 +2,6 @@
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
namespace LibHac.Tools.FsSystem;
|
namespace LibHac.Tools.FsSystem;
|
||||||
|
|
|
@ -3,7 +3,6 @@ using System.Diagnostics;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Tools.Fs;
|
using LibHac.Tools.Fs;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
|
||||||
|
|
||||||
namespace LibHac.Tools.FsSystem;
|
namespace LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace LibHac.FsSystem;
|
namespace LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enumerates a file or directory path one segment at a time.
|
/// Enumerates a file or directory path one segment at a time.
|
|
@ -5,9 +5,10 @@ using System.Runtime.CompilerServices;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Diag;
|
using LibHac.Diag;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
|
using LibHac.FsSystem;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
namespace LibHac.FsSystem;
|
namespace LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
public static class PathTools
|
public static class PathTools
|
||||||
{
|
{
|
|
@ -2,7 +2,6 @@
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
namespace LibHac.Tools.FsSystem.RomFs;
|
namespace LibHac.Tools.FsSystem.RomFs;
|
||||||
|
|
|
@ -5,7 +5,6 @@ using System.Linq;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Tools.Fs;
|
using LibHac.Tools.Fs;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
|
|
||||||
namespace LibHac.Tools.FsSystem.Save;
|
namespace LibHac.Tools.FsSystem.Save;
|
||||||
|
|
|
@ -4,7 +4,6 @@ using LibHac;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
|
||||||
using LibHac.Tools.Fs;
|
using LibHac.Tools.Fs;
|
||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using LibHac.Fs;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.Fs.Fsa;
|
|
||||||
using LibHac.Tests.Fs.IFileSystemTestBase;
|
using LibHac.Tests.Fs.IFileSystemTestBase;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
|
|
||||||
namespace LibHac.Tests.Fs;
|
namespace LibHac.Tests.Fs;
|
||||||
|
|
|
@ -7,6 +7,7 @@ using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSrv;
|
using LibHac.FsSrv;
|
||||||
using LibHac.FsSystem;
|
using LibHac.FsSystem;
|
||||||
using LibHac.Tests.Fs.IFileSystemTestBase;
|
using LibHac.Tests.Fs.IFileSystemTestBase;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace LibHac.Tests.Fs;
|
namespace LibHac.Tests.Fs;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSrv;
|
using LibHac.FsSrv;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
|
|
||||||
namespace LibHac.Tests.Fs.FileSystemClientTests;
|
namespace LibHac.Tests.Fs.FileSystemClientTests;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using LibHac.Fs;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.Fs.Fsa;
|
|
||||||
using LibHac.Tests.Fs.IFileSystemTestBase;
|
using LibHac.Tests.Fs.IFileSystemTestBase;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
|
|
||||||
namespace LibHac.Tests.Fs;
|
namespace LibHac.Tests.Fs;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ using LibHac.Common;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
using LibHac.FsSystem;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSystem;
|
using LibHac.FsSystem;
|
||||||
using LibHac.Tests.Fs.IFileSystemTestBase;
|
using LibHac.Tests.Fs.IFileSystemTestBase;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace LibHac.Tests.Fs;
|
namespace LibHac.Tests.Fs;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
using LibHac.Bcat;
|
using LibHac.Bcat;
|
||||||
using LibHac.Common.Keys;
|
using LibHac.Common.Keys;
|
||||||
using LibHac.Fs;
|
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.FsSrv;
|
using LibHac.FsSrv;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
|
|
||||||
namespace LibHac.Tests;
|
namespace LibHac.Tests;
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ using LibHac.Fs;
|
||||||
using LibHac.Fs.Fsa;
|
using LibHac.Fs.Fsa;
|
||||||
using LibHac.Kvdb;
|
using LibHac.Kvdb;
|
||||||
using LibHac.Tests.Fs.FileSystemClientTests;
|
using LibHac.Tests.Fs.FileSystemClientTests;
|
||||||
|
using LibHac.Tools.Fs;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
using TTest = System.Int32;
|
using TTest = System.Int32;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
using LibHac.Util;
|
using LibHac.Util;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue