Line data Source code
1 : /*
2 : * Wrapper functions for accessing the file_struct fd array.
3 : */
4 :
5 : #ifndef __LINUX_FILE_H
6 : #define __LINUX_FILE_H
7 :
8 : #include <linux/compiler.h>
9 : #include <linux/types.h>
10 : #include <linux/posix_types.h>
11 :
12 : struct file;
13 :
14 : extern void fput(struct file *);
15 :
16 : struct file_operations;
17 : struct vfsmount;
18 : struct dentry;
19 : struct path;
20 : extern struct file *alloc_file(struct path *, fmode_t mode,
21 : const struct file_operations *fop);
22 :
23 : static inline void fput_light(struct file *file, int fput_needed)
24 : {
25 : if (fput_needed)
26 : fput(file);
27 : }
28 :
29 : struct fd {
30 : struct file *file;
31 : unsigned int flags;
32 : };
33 : #define FDPUT_FPUT 1
34 : #define FDPUT_POS_UNLOCK 2
35 :
36 : static inline void fdput(struct fd fd)
37 : {
38 216 : if (fd.flags & FDPUT_FPUT)
39 0 : fput(fd.file);
40 : }
41 :
42 : extern struct file *fget(unsigned int fd);
43 : extern struct file *fget_raw(unsigned int fd);
44 : extern unsigned long __fdget(unsigned int fd);
45 : extern unsigned long __fdget_raw(unsigned int fd);
46 : extern unsigned long __fdget_pos(unsigned int fd);
47 :
48 : static inline struct fd __to_fd(unsigned long v)
49 : {
50 216 : return (struct fd){(struct file *)(v & ~3),v & 3};
51 : }
52 :
53 : static inline struct fd fdget(unsigned int fd)
54 : {
55 216 : return __to_fd(__fdget(fd));
56 : }
57 :
58 : static inline struct fd fdget_raw(unsigned int fd)
59 : {
60 : return __to_fd(__fdget_raw(fd));
61 : }
62 :
63 : extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);
64 : extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
65 : extern void set_close_on_exec(unsigned int fd, int flag);
66 : extern bool get_close_on_exec(unsigned int fd);
67 : extern void put_filp(struct file *);
68 : extern int get_unused_fd_flags(unsigned flags);
69 : #define get_unused_fd() get_unused_fd_flags(0)
70 : extern void put_unused_fd(unsigned int fd);
71 :
72 : extern void fd_install(unsigned int fd, struct file *file);
73 :
74 : extern void flush_delayed_fput(void);
75 : extern void __fput_sync(struct file *);
76 :
77 : #endif /* __LINUX_FILE_H */
|