VirtualBox

source: vbox/trunk/src/VBox/Additions/linux/sharedfolders/lnkops.c@ 33440

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

Linux Additions: symlinks only for Linux 2.6 guests

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.3 KB
Line 
1#include "vfsmod.h"
2
3#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
4
5static void *sf_follow_link(struct dentry *dentry, struct nameidata *nd)
6{
7 struct inode *inode = dentry->d_inode;
8 struct sf_glob_info *sf_g = GET_GLOB_INFO(inode->i_sb);
9 struct sf_inode_info *sf_i = GET_INODE_INFO(inode);
10 int error = -ENOMEM;
11 unsigned long page = get_zeroed_page(GFP_KERNEL);
12 int rc;
13
14 if (page)
15 {
16 error = 0;
17 rc = vboxReadLink(&client_handle, &sf_g->map, sf_i->path, PATH_MAX, (char *)page);
18 if (RT_FAILURE(rc))
19 {
20 LogFunc(("vboxReadLink failed, caller=%s, rc=%Rrc\n",
21 __func__, rc));
22 error = -EPROTO;
23 }
24 }
25 nd_set_link(nd, error ? ERR_PTR(error) : (char *)page);
26 return NULL;
27}
28
29static void sf_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
30{
31 char *page = nd_get_link(nd);
32 if (!IS_ERR(page))
33 free_page((unsigned long)page);
34}
35
36struct inode_operations sf_lnk_iops =
37{
38 .readlink = generic_readlink,
39 .follow_link = sf_follow_link,
40 .put_link = sf_put_link
41};
42
43#endif
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