Merge with Linux 2.5.48.
[linux-2.6/linux-mips.git] / include / linux / file.h
blobe5c90a88ba71d439983c7086b83cdc1ef6965a53
1 /*
2 * Wrapper functions for accessing the file_struct fd array.
3 */
5 #ifndef __LINUX_FILE_H
6 #define __LINUX_FILE_H
8 #include <asm/atomic.h>
9 #include <linux/posix_types.h>
10 #include <linux/compiler.h>
11 #include <linux/spinlock.h>
14 * The default fd array needs to be at least BITS_PER_LONG,
15 * as this is the granularity returned by copy_fdset().
17 #define NR_OPEN_DEFAULT BITS_PER_LONG
20 * Open file table structure
22 struct files_struct {
23 atomic_t count;
24 rwlock_t file_lock; /* Protects all the below members. Nests inside tsk->alloc_lock */
25 int max_fds;
26 int max_fdset;
27 int next_fd;
28 struct file ** fd; /* current fd array */
29 fd_set *close_on_exec;
30 fd_set *open_fds;
31 fd_set close_on_exec_init;
32 fd_set open_fds_init;
33 struct file * fd_array[NR_OPEN_DEFAULT];
36 extern void FASTCALL(__fput(struct file *));
37 extern void FASTCALL(fput(struct file *));
38 extern struct file * FASTCALL(fget(unsigned int fd));
39 extern void FASTCALL(set_close_on_exec(unsigned int fd, int flag));
40 extern void put_filp(struct file *);
41 extern int get_unused_fd(void);
42 extern void FASTCALL(put_unused_fd(unsigned int fd));
44 extern struct file ** alloc_fd_array(int);
45 extern int expand_fd_array(struct files_struct *, int nr);
46 extern void free_fd_array(struct file **, int);
48 extern fd_set *alloc_fdset(int);
49 extern int expand_fdset(struct files_struct *, int nr);
50 extern void free_fdset(fd_set *, int);
52 static inline struct file * fcheck_files(struct files_struct *files, unsigned int fd)
54 struct file * file = NULL;
56 if (fd < files->max_fds)
57 file = files->fd[fd];
58 return file;
62 * Check whether the specified fd has an open file.
64 #define fcheck(fd) fcheck_files(current->files, fd)
66 extern void FASTCALL(fd_install(unsigned int fd, struct file * file));
67 void FASTCALL(put_files_struct(struct files_struct *fs));
69 #endif /* __LINUX_FILE_H */