home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / namei.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.8 KB  |  97 lines

  1. #ifndef _LINUX_NAMEI_H
  2. #define _LINUX_NAMEI_H
  3.  
  4. #include <linux/linkage.h>
  5. #include <linux/dcache.h>
  6.  
  7. struct vfsmount;
  8.  
  9. struct open_intent {
  10.     int    flags;
  11.     int    create_mode;
  12.     struct file *file;
  13. };
  14.  
  15. enum { MAX_NESTED_LINKS = 5 };
  16.  
  17. struct nameidata {
  18.     struct dentry    *dentry;
  19.     struct vfsmount *mnt;
  20.     struct qstr    last;
  21.     unsigned int    flags;
  22.     int        last_type;
  23.     unsigned    depth;
  24.     char *saved_names[MAX_NESTED_LINKS + 1];
  25.  
  26.     /* Intent data */
  27.     union {
  28.         struct open_intent open;
  29.     } intent;
  30. };
  31.  
  32. /*
  33.  * Type of the last component on LOOKUP_PARENT
  34.  */
  35. enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND};
  36.  
  37. /*
  38.  * The bitmask for a lookup event:
  39.  *  - follow links at the end
  40.  *  - require a directory
  41.  *  - ending slashes ok even for nonexistent files
  42.  *  - internal "there are more path compnents" flag
  43.  *  - locked when lookup done with dcache_lock held
  44.  *  - dentry cache is untrusted; force a real lookup
  45.  */
  46. #define LOOKUP_FOLLOW         1
  47. #define LOOKUP_DIRECTORY     2
  48. #define LOOKUP_CONTINUE         4
  49. #define LOOKUP_PARENT        16
  50. #define LOOKUP_NOALT        32
  51. #define LOOKUP_REVAL        64
  52. /*
  53.  * Intent data
  54.  */
  55. #define LOOKUP_OPEN        (0x0100)
  56. #define LOOKUP_CREATE        (0x0200)
  57. #define LOOKUP_ACCESS        (0x0400)
  58.  
  59. extern int FASTCALL(__user_walk(const char __user *, unsigned, struct nameidata *));
  60. extern int FASTCALL(__user_walk_fd(int dfd, const char __user *, unsigned, struct nameidata *));
  61. #define user_path_walk(name,nd) \
  62.     __user_walk_fd(AT_FDCWD, name, LOOKUP_FOLLOW, nd)
  63. #define user_path_walk_link(name,nd) \
  64.     __user_walk_fd(AT_FDCWD, name, 0, nd)
  65. extern int FASTCALL(path_lookup(const char *, unsigned, struct nameidata *));
  66. extern int FASTCALL(path_walk(const char *, struct nameidata *));
  67. extern int FASTCALL(link_path_walk(const char *, struct nameidata *));
  68. extern void path_release(struct nameidata *);
  69. extern void path_release_on_umount(struct nameidata *);
  70.  
  71. extern int __user_path_lookup_open(const char __user *, unsigned lookup_flags, struct nameidata *nd, int open_flags);
  72. extern int path_lookup_open(int dfd, const char *name, unsigned lookup_flags, struct nameidata *, int open_flags);
  73. extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
  74.         int (*open)(struct inode *, struct file *));
  75. extern struct file *nameidata_to_filp(struct nameidata *nd, int flags);
  76. extern void release_open_intent(struct nameidata *);
  77.  
  78. extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
  79.  
  80. extern int follow_down(struct vfsmount **, struct dentry **);
  81. extern int follow_up(struct vfsmount **, struct dentry **);
  82.  
  83. extern struct dentry *lock_rename(struct dentry *, struct dentry *);
  84. extern void unlock_rename(struct dentry *, struct dentry *);
  85.  
  86. static inline void nd_set_link(struct nameidata *nd, char *path)
  87. {
  88.     nd->saved_names[nd->depth] = path;
  89. }
  90.  
  91. static inline char *nd_get_link(struct nameidata *nd)
  92. {
  93.     return nd->saved_names[nd->depth];
  94. }
  95.  
  96. #endif /* _LINUX_NAMEI_H */
  97.