Klaus
--- raw.c.orig	Mon Oct  2 05:35:15 2000
+++ raw.c	Wed Apr 18 18:28:55 2001
@@ -28,12 +28,14 @@
 
 ssize_t	raw_read(struct file *, char *, size_t, loff_t *);
 ssize_t	raw_write(struct file *, const char *, size_t, loff_t *);
+loff_t  raw_lseek(struct file * , loff_t, int);
 int	raw_open(struct inode *, struct file *);
 int	raw_release(struct inode *, struct file *);
 int	raw_ctl_ioctl(struct inode *, struct file *, unsigned int, unsigned
long);
 
 
 static struct file_operations raw_fops = {
+	llseek:		raw_lseek,
 	read:		raw_read,
 	write:		raw_write,
 	open:		raw_open,
@@ -341,4 +342,46 @@
 	}
 	
 	return err;
+}
+
+
+loff_t raw_lseek(struct file * file, loff_t offset, int orig)
+{
+	int		minor;
+	kdev_t		dev;
+	unsigned long	limit;
+
+	int		sector_size, sector_bits, sector_mask;
+	int		max_sectors;
+	loff_t		fpos;
+
+	switch (orig) {
+		case 0:
+			fpos = offset;
+			break;
+		case 1:
+			fpos = file->f_pos + offset;
+			break;
+		default:
+			return -EINVAL;
+	}
+
+	minor = MINOR(file->f_dentry->d_inode->i_rdev);
+	dev = to_kdev_t(raw_device_bindings[minor]->bd_dev);
+	sector_size = raw_device_sector_size[minor];
+	sector_bits = raw_device_sector_bits[minor];
+	sector_mask = sector_size- 1;
+	max_sectors = KIO_MAX_SECTORS >> (sector_bits - 9);
+	
+	if (blk_size[MAJOR(dev)])
+		limit = (((loff_t) blk_size[MAJOR(dev)][MINOR(dev)]) <<
BLOCK_SIZE_BITS) >> sector_bits;
+	else
+		limit = INT_MAX;
+	if ((fpos & sector_mask))
+		return -EINVAL;
+	if ((fpos >> sector_bits) >= limit) {
+		return -EINVAL;
+	}
+	file->f_pos = fpos;
+	return fpos;
 }
------------------------------------------------------------------------ 
 Klaus Lichtenwalder, Dipl. Inform.,       http://www.webforum.de/Klaus/
 Fax +49-(0)89-91072699                            Lichtenwalder@ACM.org
 NIC: KL2100, KL76-RIPE                     K.Lichtenwalder@Computer.org
 PGP Key fingerprint = 2658 EA97 E1A1 2680 5ECA  0036 80F5 F250 3CF8
C2C7
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/