Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

new helpers: fdget()/fdput()

Signed-off-bs: Al Viro <viro@zeniv.linux.org.uk>

Al Viro a5b470ba 2a117354

+26
+26
include/linux/file.h
··· 26 26 fput(file); 27 27 } 28 28 29 + struct fd { 30 + struct file *file; 31 + int need_put; 32 + }; 33 + 34 + static inline void fdput(struct fd fd) 35 + { 36 + if (fd.need_put) 37 + fput(fd.file); 38 + } 39 + 29 40 extern struct file *fget(unsigned int fd); 30 41 extern struct file *fget_light(unsigned int fd, int *fput_needed); 42 + 43 + static inline struct fd fdget(unsigned int fd) 44 + { 45 + int b; 46 + struct file *f = fget_light(fd, &b); 47 + return (struct fd){f,b}; 48 + } 49 + 50 + static inline struct fd fdget_raw(unsigned int fd) 51 + { 52 + int b; 53 + struct file *f = fget_raw_light(fd, &b); 54 + return (struct fd){f,b}; 55 + } 56 + 31 57 extern struct file *fget_raw(unsigned int fd); 32 58 extern struct file *fget_raw_light(unsigned int fd, int *fput_needed); 33 59 extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);