diff --git a/src/main/resources/assets/computercraft/lua/rom/programs/delete.lua b/src/main/resources/assets/computercraft/lua/rom/programs/delete.lua index 51e8d288c..e2d296805 100644 --- a/src/main/resources/assets/computercraft/lua/rom/programs/delete.lua +++ b/src/main/resources/assets/computercraft/lua/rom/programs/delete.lua @@ -9,7 +9,10 @@ for i = 1, args.n do local files = fs.find(shell.resolve(args[i])) if #files > 0 then for n, file in ipairs(files) do - fs.delete(file) + local ok, err = pcall(fs.delete, file) + if not ok then + printError((err:gsub("^pcall: ", ""))) + end end else printError(args[i] .. ": No matching files") diff --git a/src/test/resources/test-rom/spec/programs/delete_spec.lua b/src/test/resources/test-rom/spec/programs/delete_spec.lua index d7434e550..5036f7eae 100644 --- a/src/test/resources/test-rom/spec/programs/delete_spec.lua +++ b/src/test/resources/test-rom/spec/programs/delete_spec.lua @@ -39,6 +39,11 @@ describe("The rm program", function() expect(capture(stub, "rm")) :matches { ok = true, output = "Usage: rm \n", error = "" } end) + + it("errors when trying to delete a read-only file", function() + expect(capture(stub, "rm /rom/startup.lua")) + :matches { ok = true, output = "", error = "/rom/startup.lua: Access denied\n" } + end) it("errors when a glob fails to match", function() expect(capture(stub, "rm", "never-existed"))