Bladeren bron

change to throw open error always

Akeit0 7 maanden geleden
bovenliggende
commit
678a2fe040

+ 9 - 19
src/Lua/IO/ILuaFileSystem.cs

@@ -7,7 +7,7 @@ public interface ILuaFileSystem
 {
     public bool IsReadable(string path);
     public ValueTask<LuaFileContent> ReadFileContentAsync(string path, CancellationToken cancellationToken);
-    public ILuaIOStream? Open(string path, LuaFileOpenMode mode, bool throwError);
+    public ILuaIOStream Open(string path, LuaFileOpenMode mode);
     public void Rename(string oldName, string newName);
     public void Remove(string path);
     public string DirectorySeparator { get; }
@@ -70,29 +70,19 @@ public sealed class FileSystem : ILuaFileSystem
         return new(new LuaFileContent(bytes));
     }
 
-    public ILuaIOStream? Open(string path, LuaFileOpenMode luaMode, bool throwError)
+    public ILuaIOStream Open(string path, LuaFileOpenMode luaMode)
     {
         var (mode, access) = GetFileMode(luaMode);
-        try
+        
+        if (luaMode == LuaFileOpenMode.ReadAppend)
         {
-            if (luaMode == LuaFileOpenMode.ReadAppend)
-            {
-                var s = new LuaIOStreamWrapper(luaMode, File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete));
-                s.Seek(0, SeekOrigin.End);
-                return s;
-            }
-
-            return new LuaIOStreamWrapper(luaMode, File.Open(path, mode, access, FileShare.ReadWrite | FileShare.Delete));
+            var s = new LuaIOStreamWrapper(luaMode, File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete));
+            s.Seek(0, SeekOrigin.End);
+            return s;
         }
-        catch (Exception)
-        {
-            if (throwError)
-            {
-                throw;
-            }
 
-            return null;
-        }
+        return new LuaIOStreamWrapper(luaMode, File.Open(path, mode, access, FileShare.ReadWrite | FileShare.Delete));
+        
     }
 
     public void Rename(string oldName, string newName)

+ 13 - 6
src/Lua/Standard/IOLibrary.cs

@@ -76,7 +76,7 @@ public sealed class IOLibrary
         }
         else
         {
-            var stream = context.State.FileSystem.Open(arg.ToString()!, LuaFileOpenMode.ReadWriteOpen, true)!;
+            var stream = context.State.FileSystem.Open(arg.ToString(), LuaFileOpenMode.ReadWriteOpen);
             var handle = new FileHandle(stream);
             registry["stdin"] = new(handle);
             return new(context.Return(new LuaValue(handle)));
@@ -139,7 +139,7 @@ public sealed class IOLibrary
             ? context.GetArgument<string>(1)
             : "r";
         context.Return();
-        var resultCount = IOHelper.Open(context.Thread, fileName, mode, false);
+        var resultCount = IOHelper.Open(context.Thread, fileName, mode, true);
         return new(resultCount);
     }
 
@@ -160,10 +160,17 @@ public sealed class IOLibrary
         }
         else
         {
-            var stream = context.State.FileSystem.Open(arg.ToString()!, LuaFileOpenMode.ReadWriteOpen, true)!;
-            var handle = new FileHandle(stream);
-            io["stdout"] = new(handle);
-            return new(context.Return(new LuaValue(handle)));
+            try
+            {
+                var stream = context.State.FileSystem.Open(arg.ToString(), LuaFileOpenMode.ReadWriteOpen);
+                var handle = new FileHandle(stream);
+                io["stdout"] = new(handle);
+                return new(context.Return(new LuaValue(handle)));
+            }
+            catch (Exception ex) when(ex is IOException or FileNotFoundException)
+            {
+                return new(context.Return(LuaValue.Nil, ex.Message, ex.HResult));
+            }
         }
     }
 

+ 1 - 5
src/Lua/Standard/Internal/IOHelper.cs

@@ -24,11 +24,7 @@ internal static class IOHelper
 
         try
         {
-            var stream = thread.State.FileSystem.Open(fileName, fileMode, throwError);
-            if (stream == null)
-            {
-                return 0;
-            }
+            var stream = thread.State.FileSystem.Open(fileName, fileMode);
 
             thread.Stack.Push(new LuaValue(new FileHandle(stream)));
             return 1;

+ 1 - 1
tests/Lua.Tests/Helpers/NotImplementedExceptionFileSystemBase.cs

@@ -14,7 +14,7 @@ namespace Lua.Tests.Helpers
             throw new NotImplementedException();
         }
 
-        public virtual ILuaIOStream? Open(string path, LuaFileOpenMode mode, bool throwError)
+        public virtual ILuaIOStream Open(string path, LuaFileOpenMode mode)
         {
             throw new NotImplementedException();
         }