LCOV - code coverage report
Current view: top level - include/linux - file.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 11 0.0 %
Date: 2023-03-27 20:00:47 Functions: 0 2 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * Wrapper functions for accessing the file_struct fd array.
       4             :  */
       5             : 
       6             : #ifndef __LINUX_FILE_H
       7             : #define __LINUX_FILE_H
       8             : 
       9             : #include <linux/compiler.h>
      10             : #include <linux/types.h>
      11             : #include <linux/posix_types.h>
      12             : #include <linux/errno.h>
      13             : 
      14             : struct file;
      15             : 
      16             : extern void fput(struct file *);
      17             : 
      18             : struct file_operations;
      19             : struct task_struct;
      20             : struct vfsmount;
      21             : struct dentry;
      22             : struct inode;
      23             : struct path;
      24             : extern struct file *alloc_file_pseudo(struct inode *, struct vfsmount *,
      25             :         const char *, int flags, const struct file_operations *);
      26             : extern struct file *alloc_file_clone(struct file *, int flags,
      27             :         const struct file_operations *);
      28             : 
      29             : static inline void fput_light(struct file *file, int fput_needed)
      30             : {
      31             :         if (fput_needed)
      32             :                 fput(file);
      33             : }
      34             : 
      35             : struct fd {
      36             :         struct file *file;
      37             :         unsigned int flags;
      38             : };
      39             : #define FDPUT_FPUT       1
      40             : #define FDPUT_POS_UNLOCK 2
      41             : 
      42             : static inline void fdput(struct fd fd)
      43             : {
      44           0 :         if (fd.flags & FDPUT_FPUT)
      45           0 :                 fput(fd.file);
      46             : }
      47             : 
      48             : extern struct file *fget(unsigned int fd);
      49             : extern struct file *fget_raw(unsigned int fd);
      50             : extern struct file *fget_task(struct task_struct *task, unsigned int fd);
      51             : extern unsigned long __fdget(unsigned int fd);
      52             : extern unsigned long __fdget_raw(unsigned int fd);
      53             : extern unsigned long __fdget_pos(unsigned int fd);
      54             : extern void __f_unlock_pos(struct file *);
      55             : 
      56             : static inline struct fd __to_fd(unsigned long v)
      57             : {
      58           0 :         return (struct fd){(struct file *)(v & ~3),v & 3};
      59             : }
      60             : 
      61             : static inline struct fd fdget(unsigned int fd)
      62             : {
      63           0 :         return __to_fd(__fdget(fd));
      64             : }
      65             : 
      66             : static inline struct fd fdget_raw(unsigned int fd)
      67             : {
      68           0 :         return __to_fd(__fdget_raw(fd));
      69             : }
      70             : 
      71             : static inline struct fd fdget_pos(int fd)
      72             : {
      73           0 :         return __to_fd(__fdget_pos(fd));
      74             : }
      75             : 
      76           0 : static inline void fdput_pos(struct fd f)
      77             : {
      78           0 :         if (f.flags & FDPUT_POS_UNLOCK)
      79           0 :                 __f_unlock_pos(f.file);
      80           0 :         fdput(f);
      81           0 : }
      82             : 
      83             : extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);
      84             : extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
      85             : extern void set_close_on_exec(unsigned int fd, int flag);
      86             : extern bool get_close_on_exec(unsigned int fd);
      87             : extern int __get_unused_fd_flags(unsigned flags, unsigned long nofile);
      88             : extern int get_unused_fd_flags(unsigned flags);
      89             : extern void put_unused_fd(unsigned int fd);
      90             : 
      91             : extern void fd_install(unsigned int fd, struct file *file);
      92             : 
      93             : extern int __receive_fd(struct file *file, int __user *ufd,
      94             :                         unsigned int o_flags);
      95             : 
      96             : extern int receive_fd(struct file *file, unsigned int o_flags);
      97             : 
      98             : static inline int receive_fd_user(struct file *file, int __user *ufd,
      99             :                                   unsigned int o_flags)
     100             : {
     101             :         if (ufd == NULL)
     102             :                 return -EFAULT;
     103             :         return __receive_fd(file, ufd, o_flags);
     104             : }
     105             : int receive_fd_replace(int new_fd, struct file *file, unsigned int o_flags);
     106             : 
     107             : extern void flush_delayed_fput(void);
     108             : extern void __fput_sync(struct file *);
     109             : 
     110             : extern unsigned int sysctl_nr_open_min, sysctl_nr_open_max;
     111             : 
     112             : #endif /* __LINUX_FILE_H */

Generated by: LCOV version 1.14