1/* 2 * Wrapper functions for accessing the file_struct fd array. 3 */ 4 5#ifndef __LINUX_FILE_H 6#define __LINUX_FILE_H 7 8extern void FASTCALL(fput(struct file *)); 9extern struct file * FASTCALL(fget(unsigned int fd)); 10 11static inline int get_close_on_exec(unsigned int fd) 12{ 13 struct files_struct *files = current->files; 14 int res; 15 read_lock(&files->file_lock); 16 res = FD_ISSET(fd, files->close_on_exec); 17 read_unlock(&files->file_lock); 18 return res; 19} 20 21static inline void set_close_on_exec(unsigned int fd, int flag) 22{ 23 struct files_struct *files = current->files; 24 write_lock(&files->file_lock); 25 if (flag) 26 FD_SET(fd, files->close_on_exec); 27 else 28 FD_CLR(fd, files->close_on_exec); 29 write_unlock(&files->file_lock); 30} 31 32static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd) 33{ 34 struct file * file = NULL; 35 36 if (fd < files->max_fds) 37 file = files->fd[fd]; 38 return file; 39} 40 41/* 42 * Check whether the specified fd has an open file. 43 */ 44static inline struct file * fcheck(unsigned int fd) 45{ 46 struct file * file = NULL; 47 struct files_struct *files = current->files; 48 49 if (fd < files->max_fds) 50 file = files->fd[fd]; 51 return file; 52} 53 54extern void put_filp(struct file *); 55 56extern int get_unused_fd(void); 57 58static inline void __put_unused_fd(struct files_struct *files, unsigned int fd) 59{ 60 FD_CLR(fd, files->open_fds); 61 if (fd < files->next_fd) 62 files->next_fd = fd; 63} 64 65static inline void put_unused_fd(unsigned int fd) 66{ 67 struct files_struct *files = current->files; 68 69 write_lock(&files->file_lock); 70 __put_unused_fd(files, fd); 71 write_unlock(&files->file_lock); 72} 73 74void fd_install(unsigned int fd, struct file * file); 75void put_files_struct(struct files_struct *fs); 76 77#endif /* __LINUX_FILE_H */ 78

