mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-12 03:00:30 +00:00
Ensure files cannot be closed multiple times
Also fix an NPE if we try to close them twice. Fixes #230
This commit is contained in:
parent
ffa4cc241b
commit
d8e1c73d26
@ -212,6 +212,7 @@ public class BinaryReadableHandle extends HandleGeneric
|
||||
}
|
||||
}
|
||||
case 3: // close
|
||||
checkOpen();
|
||||
close();
|
||||
return null;
|
||||
case 4: // seek
|
||||
|
@ -95,6 +95,7 @@ public class BinaryWritableHandle extends HandleGeneric
|
||||
return null;
|
||||
}
|
||||
case 2: // close
|
||||
checkOpen();
|
||||
close();
|
||||
return null;
|
||||
case 3: // seek
|
||||
|
@ -152,6 +152,7 @@ public class EncodedReadableHandle extends HandleGeneric
|
||||
return null;
|
||||
}
|
||||
case 3: // close
|
||||
checkOpen();
|
||||
close();
|
||||
return null;
|
||||
default:
|
||||
|
@ -93,6 +93,7 @@ public class EncodedWritableHandle extends HandleGeneric
|
||||
return null;
|
||||
}
|
||||
case 3: // close
|
||||
checkOpen();
|
||||
close();
|
||||
return null;
|
||||
default:
|
||||
|
@ -37,8 +37,13 @@ public abstract class HandleGeneric implements ILuaObject
|
||||
protected final void close()
|
||||
{
|
||||
m_open = false;
|
||||
IoUtil.closeQuietly( m_closable );
|
||||
m_closable = null;
|
||||
|
||||
Closeable closeable = m_closable;
|
||||
if( closeable != null )
|
||||
{
|
||||
IoUtil.closeQuietly( closeable );
|
||||
m_closable = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -54,6 +54,20 @@ describe("The fs library", function()
|
||||
expect { fs.open("rom/x", "r") }:same { nil, "/rom/x: No such file" }
|
||||
expect { fs.open("x", "r") }:same { nil, "/x: No such file" }
|
||||
end)
|
||||
|
||||
it("errors when closing twice", function()
|
||||
local handle = fs.open("rom/startup.lua", "r")
|
||||
handle.close()
|
||||
expect.error(handle.close):eq("attempt to use a closed file")
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("reading in binary mode", function()
|
||||
it("errors when closing twice", function()
|
||||
local handle = fs.open("rom/startup.lua", "rb")
|
||||
handle.close()
|
||||
expect.error(handle.close):eq("attempt to use a closed file")
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("writing", function()
|
||||
@ -64,6 +78,20 @@ describe("The fs library", function()
|
||||
it("fails on read-only mounts", function()
|
||||
expect { fs.open("rom/x", "w") }:same { nil, "/rom/x: Access denied" }
|
||||
end)
|
||||
|
||||
it("errors when closing twice", function()
|
||||
local handle = fs.open("test-files/out.txt", "w")
|
||||
handle.close()
|
||||
expect.error(handle.close):eq("attempt to use a closed file")
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("writing in binary mode", function()
|
||||
it("errors when closing twice", function()
|
||||
local handle = fs.open("test-files/out.txt", "wb")
|
||||
handle.close()
|
||||
expect.error(handle.close):eq("attempt to use a closed file")
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("appending", function()
|
||||
|
Loading…
Reference in New Issue
Block a user