Blame view

fs/fs_types.c 2.54 KB
bbe7449e2   Phillip Potter   fs: common implem...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
  // 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);