Line data Source code
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 : */ 8 : static 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 : */ 37 2369807687 : unsigned char fs_ftype_to_dtype(unsigned int filetype) 38 : { 39 2369807687 : if (filetype >= FT_MAX) 40 : return DT_UNKNOWN; 41 : 42 2777245994 : return fs_dtype_by_ftype[filetype]; 43 : } 44 : EXPORT_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 : */ 50 : static 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 : */ 77 3574646 : unsigned char fs_umode_to_ftype(umode_t mode) 78 : { 79 3574646 : return fs_ftype_by_dtype[S_DT(mode)]; 80 : } 81 : EXPORT_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 : */ 101 407439533 : unsigned char fs_umode_to_dtype(umode_t mode) 102 : { 103 407439533 : return fs_ftype_to_dtype(fs_umode_to_ftype(mode)); 104 : } 105 : EXPORT_SYMBOL_GPL(fs_umode_to_dtype);