diff options
-rw-r--r-- | core/src/fs.lua | 55 |
1 files changed, 43 insertions, 12 deletions
diff --git a/core/src/fs.lua b/core/src/fs.lua index 70962ba59..fc47287b9 100644 --- a/core/src/fs.lua +++ b/core/src/fs.lua @@ -12,9 +12,9 @@ Copyright 2008 Steven Barth <steven@midlink.org> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -36,32 +36,32 @@ function isfile(filename) local fp = io.open(filename, "r") if fp then fp:close() end return fp ~= nil -end +end -- Returns the content of file function readfile(filename) local fp, err = io.open(filename) - + if fp == nil then return nil, err end - + local data = fp:read("*a") fp:close() - return data + return data end -- Writes given data to a file function writefile(filename, data) local fp, err = io.open(filename, "w") - + if fp == nil then return nil, err end - + fp:write(data) fp:close() - + return true end @@ -79,8 +79,39 @@ dirname = posix.dirname -- dir wrapper dir = posix.dir --- Alias for posix.mkdir -mkdir = posix.mkdir +-- wrapper for posix.mkdir +function mkdir(path, recursive) + if recursive then + local base = "." + + if path:sub(1,1) == "/" then + base = "" + path = path:gsub("^/+","") + end + + for elem in path:gmatch("([^/]+)/*") do + base = base .. "/" .. elem + + local stat = posix.stat( base ) + + if not stat then + local stat, errmsg, errno = posix.mkdir( base ) + + if type(stat) ~= "number" or stat ~= 0 then + return stat, errmsg, errno + end + else + if stat.type ~= "directory" then + return nil, base .. ": File exists", 17 + end + end + end + + return 0 + else + return posix.mkdir( path ) + end +end -- Alias for posix.rmdir rmdir = posix.rmdir @@ -95,4 +126,4 @@ chmod = posix.chmod link = posix.link -- Alias for posix.unlink -unlink = posix.unlink
\ No newline at end of file +unlink = posix.unlink |