{
if (err < 0)
{
- msg_perror ("can't write to compress");
+ msg_perror ("can't write to compression program");
exit (EX_SYSTEM);
}
else
- msg ("write to compress short %d bytes", count - err);
+ msg ("write to compression program short %d bytes",
+ count - err);
count = (err < 0) ? 0 : err;
}
ptr += count;
/* EOF */
if (err == 0)
{
- if (f_compress < 2)
+ if (!f_compress_block)
blocksize -= n;
else
bzero (ar_block->charptr + blocksize - n, n);
err = rmtwrite (archive, ar_block->charptr, blocksize);
if (err != (blocksize))
writeerror (err);
- if (f_compress < 2)
+ if (!f_compress_block)
blocksize += n;
break;
}
if (n)
{
- msg_perror ("can't read from compress");
+ msg_perror ("can't read from compression program");
exit (EX_SYSTEM);
}
err = rmtwrite (archive, ar_block->charptr, (int) blocksize);
}
/* So we should exec compress (-d) */
if (ar_reading)
- execlp ("compress", "compress", "-d", (char *) 0);
+ execlp (f_compressprog, f_compressprog, "-d", (char *) 0);
else
- execlp ("compress", "compress", (char *) 0);
- msg_perror ("can't exec compress");
+ execlp (f_compressprog, f_compressprog, (char *) 0);
+ msg_perror ("can't exec %s", f_compressprog);
_exit (EX_SYSTEM);
}
exit (EX_ARGSBAD);
}
- if (f_compress)
+ if (f_compressprog)
{
if (reading == 2 || f_verify)
{
--- /dev/null
+/* 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);
+