VirtualBox

source: vbox/trunk/src/VBox/Additions/linux/sharedfolders/vfsmod.h@ 34079

Last change on this file since 34079 was 33994, checked in by vboxsync, 14 years ago

shfl: Replaced RTFSOBJINFO and RTFSPROPERTIES with shared folder specific versions. IPRT structures like this should never have been exposed to the guest.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.0 KB
Line 
1/** @file
2 *
3 * vboxsf -- VirtualBox Guest Additions for Linux
4 */
5
6/*
7 * Copyright (C) 2006-2010 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef VFSMOD_H
19#define VFSMOD_H
20
21#include "the-linux-kernel.h"
22#include "version-generated.h"
23#include "product-generated.h"
24
25#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
26# include <linux/backing-dev.h>
27#endif
28
29#include "VBoxGuestR0LibSharedFolders.h"
30#include "vbsfmount.h"
31
32#define DIR_BUFFER_SIZE (16*_1K)
33
34/* per-shared folder information */
35struct sf_glob_info
36{
37 VBSFMAP map;
38 struct nls_table *nls;
39 int ttl;
40 int uid;
41 int gid;
42 int dmode;
43 int fmode;
44 int dmask;
45 int fmask;
46#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
47 struct backing_dev_info bdi;
48#endif
49};
50
51/* per-inode information */
52struct sf_inode_info
53{
54 /* which file */
55 SHFLSTRING *path;
56 /* some information was changed, update data on next revalidate */
57 int force_restat;
58 /* directory content changed, update the whole directory on next sf_getdent */
59 int force_reread;
60 /* file structure, only valid between open() and release() */
61 struct file *file;
62 /* handle valid if a file was created with sf_create_aux until it will
63 * be opened with sf_reg_open() */
64 SHFLHANDLE handle;
65};
66
67struct sf_dir_info
68{
69 struct list_head info_list;
70};
71
72struct sf_dir_buf
73{
74 size_t cEntries;
75 size_t cbFree;
76 size_t cbUsed;
77 void *buf;
78 struct list_head head;
79};
80
81struct sf_reg_info
82{
83 SHFLHANDLE handle;
84};
85
86/* globals */
87extern VBSFCLIENT client_handle;
88
89/* forward declarations */
90extern struct inode_operations sf_dir_iops;
91extern struct inode_operations sf_lnk_iops;
92extern struct inode_operations sf_reg_iops;
93extern struct file_operations sf_dir_fops;
94extern struct file_operations sf_reg_fops;
95extern struct dentry_operations sf_dentry_ops;
96extern struct address_space_operations sf_reg_aops;
97
98extern void sf_init_inode(struct sf_glob_info *sf_g, struct inode *inode,
99 PSHFLFSOBJINFO info);
100extern int sf_stat(const char *caller, struct sf_glob_info *sf_g,
101 SHFLSTRING *path, PSHFLFSOBJINFO result, int ok_to_fail);
102extern int sf_inode_revalidate(struct dentry *dentry);
103#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
104extern int sf_getattr(struct vfsmount *mnt, struct dentry *dentry,
105 struct kstat *kstat);
106extern int sf_setattr(struct dentry *dentry, struct iattr *iattr);
107#endif
108extern int sf_path_from_dentry(const char *caller, struct sf_glob_info *sf_g,
109 struct sf_inode_info *sf_i, struct dentry *dentry,
110 SHFLSTRING **result);
111extern int sf_nlscpy(struct sf_glob_info *sf_g,
112 char *name, size_t name_bound_len,
113 const unsigned char *utf8_name, size_t utf8_len);
114extern void sf_dir_info_free(struct sf_dir_info *p);
115extern void sf_dir_info_empty(struct sf_dir_info *p);
116extern struct sf_dir_info *sf_dir_info_alloc(void);
117extern int sf_dir_read_all(struct sf_glob_info *sf_g, struct sf_inode_info *sf_i,
118 struct sf_dir_info *sf_d, SHFLHANDLE handle);
119extern int sf_init_backing_dev(struct sf_glob_info *sf_g, const char *name);
120extern void sf_done_backing_dev(struct sf_glob_info *sf_g);
121
122#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
123# define STRUCT_STATFS struct statfs
124#else
125# define STRUCT_STATFS struct kstatfs
126#endif
127int sf_get_volume_info(struct super_block *sb,STRUCT_STATFS *stat);
128
129#ifdef __cplusplus
130# define CMC_API __attribute__ ((cdecl, regparm (0)))
131#else
132# define CMC_API __attribute__ ((regparm (0)))
133#endif
134
135#define TRACE() LogFunc(("tracepoint\n"))
136
137/* Following casts are here to prevent assignment of void * to
138 pointers of arbitrary type */
139#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
140# define GET_GLOB_INFO(sb) ((struct sf_glob_info *) (sb)->u.generic_sbp)
141# define SET_GLOB_INFO(sb, sf_g) (sb)->u.generic_sbp = sf_g
142#else
143# define GET_GLOB_INFO(sb) ((struct sf_glob_info *) (sb)->s_fs_info)
144# define SET_GLOB_INFO(sb, sf_g) (sb)->s_fs_info = sf_g
145#endif
146
147#if LINUX_VERSION_CODE >= KERNEL_VERSION (2, 6, 19) || defined(KERNEL_FC6)
148/* FC6 kernel 2.6.18, vanilla kernel 2.6.19+ */
149# define GET_INODE_INFO(i) ((struct sf_inode_info *) (i)->i_private)
150# define SET_INODE_INFO(i, sf_i) (i)->i_private = sf_i
151#else
152/* vanilla kernel up to 2.6.18 */
153# define GET_INODE_INFO(i) ((struct sf_inode_info *) (i)->u.generic_ip)
154# define SET_INODE_INFO(i, sf_i) (i)->u.generic_ip = sf_i
155#endif
156
157#endif /* vfsmod.h */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette