* ffluci/core: fs.lua: add wrapper for mkdir() to allow recursive creation of directo...
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 25 May 2008 14:38:29 +0000 (14:38 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 25 May 2008 14:38:29 +0000 (14:38 +0000)
core/src/fs.lua

index 70962ba..fc47287 100644 (file)
@@ -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,
@@ -36,32 +36,32 @@ function isfile(filename)
        local fp = io.open(filename, "r")
        if fp then fp:close() end
        return fp ~= nil
        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,8 +79,39 @@ dirname = posix.dirname
 -- dir wrapper
 dir = posix.dir
 
 -- 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
 
 -- Alias for posix.rmdir
 rmdir = posix.rmdir
@@ -95,4 +126,4 @@ chmod = posix.chmod
 link = posix.link
 
 -- Alias for posix.unlink
 link = posix.link
 
 -- Alias for posix.unlink
-unlink = posix.unlink
\ No newline at end of file
+unlink = posix.unlink