summaryrefslogtreecommitdiff
path: root/src/luarocks/fs/linux.lua
diff options
context:
space:
mode:
authorMike Vink <mike@pionative.com>2025-02-03 21:29:42 +0100
committerMike Vink <mike@pionative.com>2025-02-03 21:29:42 +0100
commit5155816b7b925dec5d5feb1568b1d7ceb00938b9 (patch)
treedeca28ea15e79f6f804c3d90d2ba757881638af5 /src/luarocks/fs/linux.lua
fetch tarballHEADmaster
Diffstat (limited to 'src/luarocks/fs/linux.lua')
-rw-r--r--src/luarocks/fs/linux.lua50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/luarocks/fs/linux.lua b/src/luarocks/fs/linux.lua
new file mode 100644
index 0000000..c1b057c
--- /dev/null
+++ b/src/luarocks/fs/linux.lua
@@ -0,0 +1,50 @@
+--- Linux-specific implementation of filesystem and platform abstractions.
+local linux = {}
+
+local fs = require("luarocks.fs")
+local dir = require("luarocks.dir")
+
+function linux.is_dir(file)
+ file = fs.absolute_name(file)
+ file = dir.normalize(file) .. "/."
+ local fd, _, code = io.open(file, "r")
+ if code == 2 then -- "No such file or directory"
+ return false
+ end
+ if code == 20 then -- "Not a directory", regardless of permissions
+ return false
+ end
+ if code == 13 then -- "Permission denied", but is a directory
+ return true
+ end
+ if fd then
+ local _, _, ecode = fd:read(1)
+ fd:close()
+ if ecode == 21 then -- "Is a directory"
+ return true
+ end
+ end
+ return false
+end
+
+function linux.is_file(file)
+ file = fs.absolute_name(file)
+ if fs.is_dir(file) then
+ return false
+ end
+ file = dir.normalize(file)
+ local fd, _, code = io.open(file, "r")
+ if code == 2 then -- "No such file or directory"
+ return false
+ end
+ if code == 13 then -- "Permission denied", but it exists
+ return true
+ end
+ if fd then
+ fd:close()
+ return true
+ end
+ return false
+end
+
+return linux