2005-04-17 02:20:36 +04:00
/*
* symlink . c
*
* Copyright ( C ) 2002 by John Newbigin
*
* Please add a note about your changes to smbfs in the ChangeLog file .
*/
# include <linux/kernel.h>
# include <linux/errno.h>
# include <linux/fcntl.h>
# include <linux/stat.h>
# include <linux/mm.h>
# include <linux/slab.h>
# include <linux/pagemap.h>
# include <linux/net.h>
# include <linux/namei.h>
# include <asm/uaccess.h>
# include <asm/system.h>
# include <linux/smbno.h>
# include <linux/smb_fs.h>
# include "smb_debug.h"
# include "proto.h"
int smb_symlink ( struct inode * inode , struct dentry * dentry , const char * oldname )
{
DEBUG1 ( " create symlink %s -> %s/%s \n " , oldname , DENTRY_PATH ( dentry ) ) ;
return smb_proc_symlink ( server_from_dentry ( dentry ) , dentry , oldname ) ;
}
[PATCH] Fix up symlink function pointers
This fixes up the symlink functions for the calling convention change:
* afs, autofs4, befs, devfs, freevxfs, jffs2, jfs, ncpfs, procfs,
smbfs, sysvfs, ufs, xfs - prototype change for ->follow_link()
* befs, smbfs, xfs - same for ->put_link()
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-08-20 03:17:39 +04:00
static void * smb_follow_link ( struct dentry * dentry , struct nameidata * nd )
2005-04-17 02:20:36 +04:00
{
char * link = __getname ( ) ;
DEBUG1 ( " followlink of %s/%s \n " , DENTRY_PATH ( dentry ) ) ;
if ( ! link ) {
link = ERR_PTR ( - ENOMEM ) ;
} else {
int len = smb_proc_read_link ( server_from_dentry ( dentry ) ,
dentry , link , PATH_MAX - 1 ) ;
if ( len < 0 ) {
2005-11-07 11:59:37 +03:00
__putname ( link ) ;
2005-04-17 02:20:36 +04:00
link = ERR_PTR ( len ) ;
} else {
link [ len ] = 0 ;
}
}
nd_set_link ( nd , link ) ;
[PATCH] Fix up symlink function pointers
This fixes up the symlink functions for the calling convention change:
* afs, autofs4, befs, devfs, freevxfs, jffs2, jfs, ncpfs, procfs,
smbfs, sysvfs, ufs, xfs - prototype change for ->follow_link()
* befs, smbfs, xfs - same for ->put_link()
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-08-20 03:17:39 +04:00
return NULL ;
2005-04-17 02:20:36 +04:00
}
[PATCH] Fix up symlink function pointers
This fixes up the symlink functions for the calling convention change:
* afs, autofs4, befs, devfs, freevxfs, jffs2, jfs, ncpfs, procfs,
smbfs, sysvfs, ufs, xfs - prototype change for ->follow_link()
* befs, smbfs, xfs - same for ->put_link()
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-08-20 03:17:39 +04:00
static void smb_put_link ( struct dentry * dentry , struct nameidata * nd , void * p )
2005-04-17 02:20:36 +04:00
{
char * s = nd_get_link ( nd ) ;
if ( ! IS_ERR ( s ) )
2005-11-07 11:59:37 +03:00
__putname ( s ) ;
2005-04-17 02:20:36 +04:00
}
2007-02-12 11:55:40 +03:00
const struct inode_operations smb_link_inode_operations =
2005-04-17 02:20:36 +04:00
{
. readlink = generic_readlink ,
. follow_link = smb_follow_link ,
. put_link = smb_put_link ,
} ;