forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.5 KiB
105 lines
2.5 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
#include <linux/fs.h> |
|
#include <linux/export.h> |
|
|
|
/* |
|
* fs on-disk file type to dirent file type conversion |
|
*/ |
|
static const unsigned char fs_dtype_by_ftype[FT_MAX] = { |
|
[FT_UNKNOWN] = DT_UNKNOWN, |
|
[FT_REG_FILE] = DT_REG, |
|
[FT_DIR] = DT_DIR, |
|
[FT_CHRDEV] = DT_CHR, |
|
[FT_BLKDEV] = DT_BLK, |
|
[FT_FIFO] = DT_FIFO, |
|
[FT_SOCK] = DT_SOCK, |
|
[FT_SYMLINK] = DT_LNK |
|
}; |
|
|
|
/** |
|
* fs_ftype_to_dtype() - fs on-disk file type to dirent type. |
|
* @filetype: The on-disk file type to convert. |
|
* |
|
* This function converts the on-disk file type value (FT_*) to the directory |
|
* entry type (DT_*). |
|
* |
|
* Context: Any context. |
|
* Return: |
|
* * DT_UNKNOWN - Unknown type |
|
* * DT_FIFO - FIFO |
|
* * DT_CHR - Character device |
|
* * DT_DIR - Directory |
|
* * DT_BLK - Block device |
|
* * DT_REG - Regular file |
|
* * DT_LNK - Symbolic link |
|
* * DT_SOCK - Local-domain socket |
|
*/ |
|
unsigned char fs_ftype_to_dtype(unsigned int filetype) |
|
{ |
|
if (filetype >= FT_MAX) |
|
return DT_UNKNOWN; |
|
|
|
return fs_dtype_by_ftype[filetype]; |
|
} |
|
EXPORT_SYMBOL_GPL(fs_ftype_to_dtype); |
|
|
|
/* |
|
* dirent file type to fs on-disk file type conversion |
|
* Values not initialized explicitly are FT_UNKNOWN (0). |
|
*/ |
|
static const unsigned char fs_ftype_by_dtype[DT_MAX] = { |
|
[DT_REG] = FT_REG_FILE, |
|
[DT_DIR] = FT_DIR, |
|
[DT_LNK] = FT_SYMLINK, |
|
[DT_CHR] = FT_CHRDEV, |
|
[DT_BLK] = FT_BLKDEV, |
|
[DT_FIFO] = FT_FIFO, |
|
[DT_SOCK] = FT_SOCK, |
|
}; |
|
|
|
/** |
|
* fs_umode_to_ftype() - file mode to on-disk file type. |
|
* @mode: The file mode to convert. |
|
* |
|
* This function converts the file mode value to the on-disk file type (FT_*). |
|
* |
|
* Context: Any context. |
|
* Return: |
|
* * FT_UNKNOWN - Unknown type |
|
* * FT_REG_FILE - Regular file |
|
* * FT_DIR - Directory |
|
* * FT_CHRDEV - Character device |
|
* * FT_BLKDEV - Block device |
|
* * FT_FIFO - FIFO |
|
* * FT_SOCK - Local-domain socket |
|
* * FT_SYMLINK - Symbolic link |
|
*/ |
|
unsigned char fs_umode_to_ftype(umode_t mode) |
|
{ |
|
return fs_ftype_by_dtype[S_DT(mode)]; |
|
} |
|
EXPORT_SYMBOL_GPL(fs_umode_to_ftype); |
|
|
|
/** |
|
* fs_umode_to_dtype() - file mode to dirent file type. |
|
* @mode: The file mode to convert. |
|
* |
|
* This function converts the file mode value to the directory |
|
* entry type (DT_*). |
|
* |
|
* Context: Any context. |
|
* Return: |
|
* * DT_UNKNOWN - Unknown type |
|
* * DT_FIFO - FIFO |
|
* * DT_CHR - Character device |
|
* * DT_DIR - Directory |
|
* * DT_BLK - Block device |
|
* * DT_REG - Regular file |
|
* * DT_LNK - Symbolic link |
|
* * DT_SOCK - Local-domain socket |
|
*/ |
|
unsigned char fs_umode_to_dtype(umode_t mode) |
|
{ |
|
return fs_ftype_to_dtype(fs_umode_to_ftype(mode)); |
|
} |
|
EXPORT_SYMBOL_GPL(fs_umode_to_dtype);
|
|
|