mirror of
				https://github.com/kenzok8/openwrt-packages.git
				synced 2025-10-30 07:50:37 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			245 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
| LuCI - Filesystem tools
 | |
| 
 | |
| Description:
 | |
| A module offering often needed filesystem manipulation functions
 | |
| 
 | |
| FileId:
 | |
| $Id$
 | |
| 
 | |
| License:
 | |
| 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
 | |
| 
 | |
| 	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,
 | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| See the License for the specific language governing permissions and
 | |
| limitations under the License.
 | |
| 
 | |
| ]]--
 | |
| 
 | |
| local io    = require "io"
 | |
| local os    = require "os"
 | |
| local ltn12 = require "luci.ltn12"
 | |
| local fs	= require "nixio.fs"
 | |
| local nutil = require "nixio.util"
 | |
| 
 | |
| local type  = type
 | |
| 
 | |
| --- LuCI filesystem library.
 | |
| module "luci.clash"
 | |
| 
 | |
| --- Test for file access permission on given path.
 | |
| -- @class		function
 | |
| -- @name		access
 | |
| -- @param str	String value containing the path
 | |
| -- @return		Number containing the return code, 0 on sucess or nil on error
 | |
| -- @return		String containing the error description (if any)
 | |
| -- @return		Number containing the os specific errno (if any)
 | |
| access = fs.access
 | |
| 
 | |
| --- Evaluate given shell glob pattern and return a table containing all matching
 | |
| -- file and directory entries.
 | |
| -- @class			function
 | |
| -- @name			glob
 | |
| -- @param filename	String containing the path of the file to read
 | |
| -- @return			Table containing file and directory entries or nil if no matches
 | |
| -- @return			String containing the error description (if no matches)
 | |
| -- @return			Number containing the os specific errno (if no matches)
 | |
| function glob(...)
 | |
| 	local iter, code, msg = fs.glob(...)
 | |
| 	if iter then
 | |
| 		return nutil.consume(iter)
 | |
| 	else
 | |
| 		return nil, code, msg
 | |
| 	end
 | |
| end
 | |
| 
 | |
| --- Checks wheather the given path exists and points to a regular file.
 | |
| -- @param filename	String containing the path of the file to test
 | |
| -- @return			Boolean indicating wheather given path points to regular file
 | |
| function isfile(filename)
 | |
| 	return fs.stat(filename, "type") == "reg"
 | |
| end
 | |
| 
 | |
| --- Checks wheather the given path exists and points to a directory.
 | |
| -- @param dirname	String containing the path of the directory to test
 | |
| -- @return			Boolean indicating wheather given path points to directory
 | |
| function isdirectory(dirname)
 | |
| 	return fs.stat(dirname, "type") == "dir"
 | |
| end
 | |
| 
 | |
| --- Read the whole content of the given file into memory.
 | |
| -- @param filename	String containing the path of the file to read
 | |
| -- @return			String containing the file contents or nil on error
 | |
| -- @return			String containing the error message on error
 | |
| readfile = fs.readfile
 | |
| 
 | |
| --- Write the contents of given string to given file.
 | |
| -- @param filename	String containing the path of the file to read
 | |
| -- @param data		String containing the data to write
 | |
| -- @return			Boolean containing true on success or nil on error
 | |
| -- @return			String containing the error message on error
 | |
| writefile = fs.writefile
 | |
| 
 | |
| --- Copies a file.
 | |
| -- @param source	Source file
 | |
| -- @param dest		Destination
 | |
| -- @return			Boolean containing true on success or nil on error
 | |
| copy = fs.datacopy
 | |
| 
 | |
| --- Renames a file.
 | |
| -- @param source	Source file
 | |
| -- @param dest		Destination
 | |
| -- @return			Boolean containing true on success or nil on error
 | |
| rename = fs.move
 | |
| 
 | |
| --- Get the last modification time of given file path in Unix epoch format.
 | |
| -- @param path	String containing the path of the file or directory to read
 | |
| -- @return		Number containing the epoch time or nil on error
 | |
| -- @return		String containing the error description (if any)
 | |
| -- @return		Number containing the os specific errno (if any)
 | |
| function mtime(path)
 | |
| 	return fs.stat(path, "mtime")
 | |
| end
 | |
| 
 | |
| --- Set the last modification time  of given file path in Unix epoch format.
 | |
| -- @param path	String containing the path of the file or directory to read
 | |
| -- @param mtime	Last modification timestamp
 | |
| -- @param atime Last accessed timestamp
 | |
| -- @return		0 in case of success nil on error
 | |
| -- @return		String containing the error description (if any)
 | |
| -- @return		Number containing the os specific errno (if any)
 | |
| function utime(path, mtime, atime)
 | |
| 	return fs.utimes(path, atime, mtime)
 | |
| end
 | |
| 
 | |
| --- Return the last element - usually the filename - from the given path with
 | |
| -- the directory component stripped.
 | |
| -- @class		function
 | |
| -- @name		basename
 | |
| -- @param path	String containing the path to strip
 | |
| -- @return		String containing the base name of given path
 | |
| -- @see			dirname
 | |
| basename = fs.basename
 | |
| 
 | |
| --- Return the directory component of the given path with the last element
 | |
| -- stripped of.
 | |
| -- @class		function
 | |
| -- @name		dirname
 | |
| -- @param path	String containing the path to strip
 | |
| -- @return		String containing the directory component of given path
 | |
| -- @see			basename
 | |
| dirname = fs.dirname
 | |
| 
 | |
| --- Return a table containing all entries of the specified directory.
 | |
| -- @class		function
 | |
| -- @name		dir
 | |
| -- @param path	String containing the path of the directory to scan
 | |
| -- @return		Table containing file and directory entries or nil on error
 | |
| -- @return		String containing the error description on error
 | |
| -- @return		Number containing the os specific errno on error
 | |
| function dir(...)
 | |
| 	local iter, code, msg = fs.dir(...)
 | |
| 	if iter then
 | |
| 		local t = nutil.consume(iter)
 | |
| 		t[#t+1] = "."
 | |
| 		t[#t+1] = ".."
 | |
| 		return t
 | |
| 	else
 | |
| 		return nil, code, msg
 | |
| 	end
 | |
| end
 | |
| 
 | |
| --- Create a new directory, recursively on demand.
 | |
| -- @param path		String with the name or path of the directory to create
 | |
| -- @param recursive	Create multiple directory levels (optional, default is true)
 | |
| -- @return			Number with the return code, 0 on sucess or nil on error
 | |
| -- @return			String containing the error description on error
 | |
| -- @return			Number containing the os specific errno on error
 | |
| function mkdir(path, recursive)
 | |
| 	return recursive and fs.mkdirr(path) or fs.mkdir(path)
 | |
| end
 | |
| 
 | |
| --- Remove the given empty directory.
 | |
| -- @class		function
 | |
| -- @name		rmdir
 | |
| -- @param path	String containing the path of the directory to remove
 | |
| -- @return		Number with the return code, 0 on sucess or nil on error
 | |
| -- @return		String containing the error description on error
 | |
| -- @return		Number containing the os specific errno on error
 | |
| rmdir = fs.rmdir
 | |
| 
 | |
| local stat_tr = {
 | |
| 	reg = "regular",
 | |
| 	dir = "directory",
 | |
| 	lnk = "link",
 | |
| 	chr = "character device",
 | |
| 	blk = "block device",
 | |
| 	fifo = "fifo",
 | |
| 	sock = "socket"
 | |
| }
 | |
| --- Get information about given file or directory.
 | |
| -- @class		function
 | |
| -- @name		stat
 | |
| -- @param path	String containing the path of the directory to query
 | |
| -- @return		Table containing file or directory properties or nil on error
 | |
| -- @return		String containing the error description on error
 | |
| -- @return		Number containing the os specific errno on error
 | |
| function stat(path, key)
 | |
| 	local data, code, msg = fs.stat(path)
 | |
| 	if data then
 | |
| 		data.mode = data.modestr
 | |
| 		data.type = stat_tr[data.type] or "?"
 | |
| 	end
 | |
| 	return key and data and data[key] or data, code, msg
 | |
| end
 | |
| 
 | |
| --- Set permissions on given file or directory.
 | |
| -- @class		function
 | |
| -- @name		chmod
 | |
| -- @param path	String containing the path of the directory
 | |
| -- @param perm	String containing the permissions to set ([ugoa][+-][rwx])
 | |
| -- @return		Number with the return code, 0 on sucess or nil on error
 | |
| -- @return		String containing the error description on error
 | |
| -- @return		Number containing the os specific errno on error
 | |
| chmod = fs.chmod
 | |
| 
 | |
| --- Create a hard- or symlink from given file (or directory) to specified target
 | |
| -- file (or directory) path.
 | |
| -- @class			function
 | |
| -- @name			link
 | |
| -- @param path1		String containing the source path to link
 | |
| -- @param path2		String containing the destination path for the link
 | |
| -- @param symlink	Boolean indicating wheather to create a symlink (optional)
 | |
| -- @return			Number with the return code, 0 on sucess or nil on error
 | |
| -- @return			String containing the error description on error
 | |
| -- @return			Number containing the os specific errno on error
 | |
| function link(src, dest, sym)
 | |
| 	return sym and fs.symlink(src, dest) or fs.link(src, dest)
 | |
| end
 | |
| 
 | |
| --- Remove the given file.
 | |
| -- @class		function
 | |
| -- @name		unlink
 | |
| -- @param path	String containing the path of the file to remove
 | |
| -- @return		Number with the return code, 0 on sucess or nil on error
 | |
| -- @return		String containing the error description on error
 | |
| -- @return		Number containing the os specific errno on error
 | |
| unlink = fs.unlink
 | |
| 
 | |
| --- Retrieve target of given symlink.
 | |
| -- @class		function
 | |
| -- @name		readlink
 | |
| -- @param path	String containing the path of the symlink to read
 | |
| -- @return		String containing the link target or nil on error
 | |
| -- @return		String containing the error description on error
 | |
| -- @return		Number containing the os specific errno on error
 | |
| readlink = fs.readlink
 | 
![github-actions[bot]](/assets/img/avatar_default.png)