Make luci.fs.rename work across fielsystems
[project/luci.git] / libs / core / luasrc / fs.lua
index ea346ee..abea5b5 100644 (file)
@@ -25,8 +25,8 @@ limitations under the License.
 ]]--
 
 local io    = require "io"
-local os       = require "os"
-local ltn12 = require "ltn12"
+local os    = require "os"
+local ltn12 = require "luci.ltn12"
 local posix = require "posix"
 
 local type  = type
@@ -110,7 +110,14 @@ end
 -- @param dest         Destination
 -- @return                     Boolean containing true on success or nil on error
 function rename(source, dest)
-       return os.rename(source, dest)
+       local stat, err, code = os.rename(source, dest)
+       if code == 18 then
+               stat, err, code = copy(source, dest)
+               if stat then
+                       stat, err, code = unlink(source)
+               end
+       end
+       return stat, err, code
 end
 
 --- Get the last modification time of given file path in Unix epoch format.