]>
Commit | Line | Data |
---|---|---|
bbe7449e PP |
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 | unsigned 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 | } | |
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 | unsigned char fs_umode_to_ftype(umode_t mode) | |
78 | { | |
79 | 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 | unsigned char fs_umode_to_dtype(umode_t mode) | |
102 | { | |
103 | return fs_ftype_to_dtype(fs_umode_to_ftype(mode)); | |
104 | } | |
105 | EXPORT_SYMBOL_GPL(fs_umode_to_dtype); |