+/* Read files directly from the fast file system
+ Copyright (C) 1992 Free Software Foundation
+
+ This file is part of GNU Tar.
+
+ GNU Tar is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2, or (at
+ your option) any later version.
+
+ GNU Tar is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Tar; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+
+dev_t lastdev;
+ino_t lastino;
+
+struct dinode ino;
+struct fs fs;
+off_t offset;
+int device_fd;
+
+int *sindir, *dindir, *tindir;
+int sindirblk, dindirblk, tindirblk;
+
+read_raw_file (fd, buf, len)
+ int fd;
+ char *buf;
+ int len;
+{
+ struct stat st;
+ off_t ntoread;
+ int log_blkno, phys_blkno;
+
+ fstat (fd, &st);
+ if (st.st_dev != lastdev)
+ new_device (st.st_dev);
+
+ if (st.st_ino != lastino)
+ new_inode (st.st_ino);
+
+ /* Only read single blocks at a time */
+ if (len > fs.fs_bsize)
+ len = fs.fs_bsize;
+
+ /* Prune to the length of the file */
+ if (offset + len > ino.di_size)
+ len = ino.di_size - offset;
+
+ log_blkno = lblkno (&fs, blkno);
+