patch-2.1.112 linux/fs/ufs/ufs_symlink.c

Next file: linux/fs/ufs/util.c
Previous file: linux/fs/ufs/ufs_swab.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.111/linux/fs/ufs/ufs_symlink.c linux/fs/ufs/ufs_symlink.c
@@ -1,146 +0,0 @@
-/*
- *  linux/fs/ufs/ufs_symlink.c
- *
- * Copyright (C) 1996
- * Adrian Rodriguez (adrian@franklins-tower.rutgers.edu)
- * Laboratory for Computer Science Research Computing Facility
- * Rutgers, The State University of New Jersey
- *
- * Ported to 2.1.62 by Francois-Rene Rideau <rideau@ens.fr> 19971109
- *
- * 4.4BSD (FreeBSD) support added on February 1st 1998 by
- * Niels Kristian Bech Jensen <nkbj@image.dk> partially based
- * on code by Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>.
- */
-
-#include <linux/fs.h>
-#include <linux/ufs_fs.h>
-#include <linux/sched.h>
-
-#include <asm/uaccess.h>
-
-extern int ufs_bmap (struct inode *, int);
-
-static int
-ufs_readlink(struct dentry * dentry, char * buffer, int buflen)
-{
-	struct inode * inode = dentry->d_inode;
-	struct super_block * sb = inode->i_sb;
-	unsigned long int block;
-	struct buffer_head * bh = NULL;
-	char * link;
-	int i;
-	char c;
-
-	if (sb->u.ufs_sb.s_flags & (UFS_DEBUG|UFS_DEBUG_LINKS)) {
-	        printk("ufs_readlink: called on ino %lu dev %u/%u\n",
-	               inode->i_ino, MAJOR(inode->i_dev), MINOR(inode->i_dev));
-	}
-
-	if (!S_ISLNK(inode->i_mode)) {
-		return -EINVAL;
-	}
-   
-	if (buflen > sb->s_blocksize - 1)
-		buflen = sb->s_blocksize - 1;
-	if (inode->i_blocks) {
-	        /* XXX - error checking */
-	        block = ufs_bmap(inode, 0);
-	        if (sb->u.ufs_sb.s_flags &(UFS_DEBUG|UFS_DEBUG_LINKS)) {
-	                printk("ufs_readlink: bmap got %lu for ino %lu\n",
-	                       block, inode->i_ino);
-		}
-	        bh = bread(inode->i_dev, block, sb->s_blocksize);
-		if (!bh) {
-	                printk("ufs_readlink: can't read block 0 for ino %lu on dev %u/%u\n",
-	                       inode->i_ino, MAJOR(inode->i_dev),
-	                       MINOR(inode->i_dev));
-			return 0;
-		}
-		link = bh->b_data;
-		/* no need to bswap */
-	} else /* fast symlink */ {
-	        link = (char *)&(inode->u.ufs_i.i_u1.i_symlink[0]);
-	}
-	i = 0;
-	while (i < buflen && (c = link[i])) {
-		i++;
-		put_user (c, buffer++);
-	}
-	brelse (bh);
-	return i;
-}
-
-/*
- * XXX - blatantly stolen from minix fs
- */
-static struct dentry *
-ufs_follow_link(struct dentry * dentry, struct dentry * base)
-{
-	struct inode * inode = dentry->d_inode;
-	unsigned long int block;
-	struct buffer_head * bh = NULL;
-	char * link;
-
-	if (inode->i_sb->u.ufs_sb.s_flags & (UFS_DEBUG|UFS_DEBUG_LINKS)) {
-	        printk("ufs_follow_link: called on ino %lu dev %u/%u\n",
-	               inode->i_ino, MAJOR(inode->i_dev), MINOR(inode->i_dev));
-	}
-
-	if (inode->i_blocks) {
-	        /* read the link from disk */
-	        /* XXX - error checking */
-	        block = ufs_bmap(inode, 0);
-	        bh = bread(inode->i_dev, block, inode->i_sb->s_blocksize);
-	        if (bh == NULL) {
-	                printk("ufs_follow_link: can't read block 0 for ino %lu on dev %u/%u\n",
-	                       inode->i_ino, MAJOR(inode->i_dev),
-	                       MINOR(inode->i_dev));
-			dput(base);
-	                return ERR_PTR(-EIO);
-	        }
-	        link = bh->b_data;
-	} else /* fast symlink */ {
-	        link = (char *)&(inode->u.ufs_i.i_u1.i_symlink[0]);
-	}
-	base = lookup_dentry(link, base, 1);
-	brelse (bh);
-	return base;
-}
-
-
-static struct file_operations ufs_symlink_operations = {
-	NULL,			/* lseek */
-	NULL,			/* read */
-	NULL,			/* write */
-	NULL,			/* readdir */
-	NULL,			/* select */
-	NULL,			/* ioctl */
-	NULL,			/* mmap */
-	NULL,			/* open */
-	NULL,			/* release */
-	NULL,			/* fsync */  /* XXX - is this ok? */
-	NULL,			/* fasync */
-	NULL,			/* check_media_change */
-	NULL,			/* revalidate */
-};
-
-struct inode_operations ufs_symlink_inode_operations = {
-	&ufs_symlink_operations,	/* default directory file operations */
-	NULL,			/* create */
-	NULL,			/* lookup */
-	NULL,			/* link */
-	NULL,			/* unlink */
-	NULL,			/* symlink */
-	NULL,			/* mkdir */
-	NULL,			/* rmdir */
-	NULL,			/* mknod */
-	NULL,			/* rename */
-	&ufs_readlink,		/* readlink */
-	&ufs_follow_link,	/* follow_link */
-	NULL,			/* readpage */
-	NULL,			/* writepage */
-	NULL,			/* bmap */
-	NULL,			/* truncate */
-	NULL,			/* permission */
-};

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov