* Separated CBI from LuCI Web
[project/luci.git] / core / src / fs.lua
index 0ca191b..5c1f2a0 100644 (file)
@@ -1,5 +1,5 @@
 --[[
 --[[
-FFLuCI - Filesystem tools
+LuCI - Filesystem tools
 
 Description:
 A module offering often needed filesystem manipulation functions
 
 Description:
 A module offering often needed filesystem manipulation functions
@@ -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.
 
 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,
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,46 +24,44 @@ limitations under the License.
 
 ]]--
 
 
 ]]--
 
-module("ffluci.fs", package.seeall)
+module("luci.fs", package.seeall)
 
 require("posix")
 
 -- Glob
 
 require("posix")
 
 -- Glob
-function glob(pattern)
-       return posix.glob(pattern)
-end
+glob = posix.glob
 
 -- Checks whether a file exists
 function isfile(filename)
        local fp = io.open(filename, "r")
        if fp then fp:close() end
        return fp ~= nil
 
 -- Checks whether a file exists
 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)
 
 -- Returns the content of file
 function readfile(filename)
        local fp, err = io.open(filename)
-       
+
        if fp == nil then
                return nil, err
        end
        if fp == nil then
                return nil, err
        end
-       
+
        local data = fp:read("*a")
        fp:close()
        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")
 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
        if fp == nil then
                return nil, err
        end
-       
+
        fp:write(data)
        fp:close()
        fp:write(data)
        fp:close()
-       
+
        return true
 end
 
        return true
 end
 
@@ -79,16 +77,53 @@ basename = posix.basename
 dirname = posix.dirname
 
 -- dir wrapper
 dirname = posix.dirname
 
 -- dir wrapper
-function dir(path)
-       local dir = {}
-       for node in posix.files(path) do
-               table.insert(dir, 1, node)
-       end 
-       return dir
+dir = posix.dir
+
+-- 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
 
 end
 
--- Alias for posix.mkdir
-mkdir = posix.mkdir
-
 -- Alias for posix.rmdir
 -- Alias for posix.rmdir
-rmdir = posix.rmdir
\ No newline at end of file
+rmdir = posix.rmdir
+
+-- Alias for posix.stat
+stat = posix.stat
+
+-- Alias for posix.chmod
+chmod = posix.chmod
+
+-- Alias for posix.link
+link = posix.link
+
+-- Alias for posix.unlink
+unlink = posix.unlink