]> Dogcows Code - chaz/tar/commitdiff
*** empty log message ***
authorFrançois Pinard <pinard@iro.umontreal.ca>
Wed, 16 Nov 1994 02:47:32 +0000 (02:47 +0000)
committerFrançois Pinard <pinard@iro.umontreal.ca>
Wed, 16 Nov 1994 02:47:32 +0000 (02:47 +0000)
src/buffer.c
src/read_ffs.c [new file with mode: 0644]

index 31e1283cc8a3ba69449e3536f0dba11a12f6d996..45298103fa2eebaef399a3bc615e5175644ab201 100644 (file)
@@ -440,11 +440,12 @@ child_open ()
                        {
                          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;
@@ -472,20 +473,20 @@ child_open ()
                  /* 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);
@@ -500,10 +501,10 @@ child_open ()
     }
   /* 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);
 }
 
@@ -573,7 +574,7 @@ open_archive (reading)
       exit (EX_ARGSBAD);
     }
 
-  if (f_compress)
+  if (f_compressprog)
     {
       if (reading == 2 || f_verify)
        {
diff --git a/src/read_ffs.c b/src/read_ffs.c
new file mode 100644 (file)
index 0000000..18164cf
--- /dev/null
@@ -0,0 +1,57 @@
+/* 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);
+  
This page took 0.028714 seconds and 4 git commands to generate.