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
|
/*
* Wrapper functions for accessing the file_struct fd array.
*/
#ifndef __LINUX_FILE_H
#define __LINUX_FILE_H
extern void FASTCALL(fput(struct file *));
extern struct file * FASTCALL(fget(unsigned int fd));
static inline int get_close_on_exec(unsigned int fd)
{
struct files_struct *files = current->files;
int res;
read_lock(&files->file_lock);
res = FD_ISSET(fd, files->close_on_exec);
read_unlock(&files->file_lock);
return res;
}
static inline void set_close_on_exec(unsigned int fd, int flag)
{
struct files_struct *files = current->files;
write_lock(&files->file_lock);
if (flag)
FD_SET(fd, files->close_on_exec);
else
FD_CLR(fd, files->close_on_exec);
write_unlock(&files->file_lock);
}
static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
{
struct file * file = NULL;
if (fd < files->max_fds)
file = files->fd[fd];
return file;
}
/*
* Check whether the specified fd has an open file.
*/
static inline struct file * fcheck(unsigned int fd)
{
struct file * file = NULL;
struct files_struct *files = current->files;
if (fd < files->max_fds)
file = files->fd[fd];
return file;
}
extern void put_filp(struct file *);
extern int get_unused_fd(void);
static inline void __put_unused_fd(struct files_struct *files, unsigned int fd)
{
FD_CLR(fd, files->open_fds);
if (fd < files->next_fd)
files->next_fd = fd;
}
static inline void put_unused_fd(unsigned int fd)
{
struct files_struct *files = current->files;
write_lock(&files->file_lock);
__put_unused_fd(files, fd);
write_unlock(&files->file_lock);
}
void fd_install(unsigned int fd, struct file * file);
void put_files_struct(struct files_struct *fs);
#endif /* __LINUX_FILE_H */
|