patch-2.1.31 linux/fs/autofs/dir.c

Next file: linux/fs/autofs/dirhash.c
Previous file: linux/fs/autofs/Makefile
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.30/linux/fs/autofs/dir.c linux/fs/autofs/dir.c
@@ -0,0 +1,91 @@
+/* -*- linux-c -*- --------------------------------------------------------- *
+ *
+ * linux/fs/autofs/dir.c
+ *
+ *  Copyright 1997 Transmeta Corporation -- All Rights Reserved
+ *
+ * This file is part of the Linux kernel and is made available under
+ * the terms of the GNU General Public License, version 2, or at your
+ * option, any later version, incorporated herein by reference.
+ *
+ * ------------------------------------------------------------------------- */
+
+#include <linux/modversions.h>
+#include <linux/auto_fs.h>
+
+static int autofs_dir_readdir(struct inode *inode, struct file *filp,
+			       void *dirent, filldir_t filldir)
+{
+	if (!inode || !S_ISDIR(inode->i_mode))
+		return -ENOTDIR;
+
+	switch((unsigned long) filp->f_pos)
+	{
+	case 0:
+		if (filldir(dirent, ".", 1, 0, inode->i_ino) < 0)
+			return 0;
+		filp->f_pos++;
+		/* fall through */
+	case 1:
+		if (filldir(dirent, "..", 2, 1, AUTOFS_ROOT_INO) < 0)
+			return 0;
+		filp->f_pos++;
+		/* fall through */
+	}
+	return 1;
+}
+
+static int autofs_dir_lookup(struct inode *dir, const char *name, int len,
+			      struct inode **result)
+{
+	*result = dir;
+	if (!len)
+		return 0;
+	if (name[0] == '.') {
+		if (len == 1)
+			return 0;
+		if (name[1] == '.' && len == 2) {
+			/* Return the root directory */
+			*result = iget(dir->i_sb,AUTOFS_ROOT_INO);
+			iput(dir);
+			return 0;
+		}
+	}
+	*result = NULL;
+	iput(dir);
+	return -ENOENT;		/* No other entries */
+}
+
+static struct file_operations autofs_dir_operations = {
+	NULL,			/* lseek */
+	NULL,			/* read */
+	NULL,			/* write */
+	autofs_dir_readdir,	/* readdir */
+	NULL,			/* select */
+	NULL,			/* ioctl */
+	NULL,			/* mmap */
+	NULL,			/* open */
+	NULL,			/* release */
+	NULL			/* fsync */
+};
+
+struct inode_operations autofs_dir_inode_operations = {
+	&autofs_dir_operations,	/* file operations */
+	NULL,			/* create */
+	autofs_dir_lookup,	/* lookup */
+	NULL,			/* link */
+	NULL,			/* unlink */
+	NULL,			/* symlink */
+	NULL,			/* mkdir */
+	NULL,			/* rmdir */
+	NULL,			/* mknod */
+	NULL,			/* rename */
+	NULL,			/* readlink */
+	NULL,			/* follow_link */
+	NULL,			/* read_page */
+	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