Linux Audio

Check our new training course

Yocto / OpenEmbedded training

Feb 10-13, 2025
Register
Loading...
Note: File does not exist in v3.1.
  1// SPDX-License-Identifier: GPL-2.0
  2#include <linux/fs.h>
  3#include <linux/export.h>
  4
  5/*
  6 * fs on-disk file type to dirent file type conversion
  7 */
  8static const unsigned char fs_dtype_by_ftype[FT_MAX] = {
  9	[FT_UNKNOWN]	= DT_UNKNOWN,
 10	[FT_REG_FILE]	= DT_REG,
 11	[FT_DIR]	= DT_DIR,
 12	[FT_CHRDEV]	= DT_CHR,
 13	[FT_BLKDEV]	= DT_BLK,
 14	[FT_FIFO]	= DT_FIFO,
 15	[FT_SOCK]	= DT_SOCK,
 16	[FT_SYMLINK]	= DT_LNK
 17};
 18
 19/**
 20 * fs_ftype_to_dtype() - fs on-disk file type to dirent type.
 21 * @filetype: The on-disk file type to convert.
 22 *
 23 * This function converts the on-disk file type value (FT_*) to the directory
 24 * entry type (DT_*).
 25 *
 26 * Context: Any context.
 27 * Return:
 28 * * DT_UNKNOWN		- Unknown type
 29 * * DT_FIFO		- FIFO
 30 * * DT_CHR		- Character device
 31 * * DT_DIR		- Directory
 32 * * DT_BLK		- Block device
 33 * * DT_REG		- Regular file
 34 * * DT_LNK		- Symbolic link
 35 * * DT_SOCK		- Local-domain socket
 36 */
 37unsigned char fs_ftype_to_dtype(unsigned int filetype)
 38{
 39	if (filetype >= FT_MAX)
 40		return DT_UNKNOWN;
 41
 42	return fs_dtype_by_ftype[filetype];
 43}
 44EXPORT_SYMBOL_GPL(fs_ftype_to_dtype);
 45
 46/*
 47 * dirent file type to fs on-disk file type conversion
 48 * Values not initialized explicitly are FT_UNKNOWN (0).
 49 */
 50static const unsigned char fs_ftype_by_dtype[DT_MAX] = {
 51	[DT_REG]	= FT_REG_FILE,
 52	[DT_DIR]	= FT_DIR,
 53	[DT_LNK]	= FT_SYMLINK,
 54	[DT_CHR]	= FT_CHRDEV,
 55	[DT_BLK]	= FT_BLKDEV,
 56	[DT_FIFO]	= FT_FIFO,
 57	[DT_SOCK]	= FT_SOCK,
 58};
 59
 60/**
 61 * fs_umode_to_ftype() - file mode to on-disk file type.
 62 * @mode: The file mode to convert.
 63 *
 64 * This function converts the file mode value to the on-disk file type (FT_*).
 65 *
 66 * Context: Any context.
 67 * Return:
 68 * * FT_UNKNOWN		- Unknown type
 69 * * FT_REG_FILE	- Regular file
 70 * * FT_DIR		- Directory
 71 * * FT_CHRDEV		- Character device
 72 * * FT_BLKDEV		- Block device
 73 * * FT_FIFO		- FIFO
 74 * * FT_SOCK		- Local-domain socket
 75 * * FT_SYMLINK		- Symbolic link
 76 */
 77unsigned char fs_umode_to_ftype(umode_t mode)
 78{
 79	return fs_ftype_by_dtype[S_DT(mode)];
 80}
 81EXPORT_SYMBOL_GPL(fs_umode_to_ftype);
 82
 83/**
 84 * fs_umode_to_dtype() - file mode to dirent file type.
 85 * @mode: The file mode to convert.
 86 *
 87 * This function converts the file mode value to the directory
 88 * entry type (DT_*).
 89 *
 90 * Context: Any context.
 91 * Return:
 92 * * DT_UNKNOWN		- Unknown type
 93 * * DT_FIFO		- FIFO
 94 * * DT_CHR		- Character device
 95 * * DT_DIR		- Directory
 96 * * DT_BLK		- Block device
 97 * * DT_REG		- Regular file
 98 * * DT_LNK		- Symbolic link
 99 * * DT_SOCK		- Local-domain socket
100 */
101unsigned char fs_umode_to_dtype(umode_t mode)
102{
103	return fs_ftype_to_dtype(fs_umode_to_ftype(mode));
104}
105EXPORT_SYMBOL_GPL(fs_umode_to_dtype);