Browse Source

(extr_init): Save the device number
of the root device.
(extract_archive): Renamed gnu_restore() to purge_directory().

Sergey Poznyakoff 21 years ago
parent
commit
44391cb932
1 changed files with 14 additions and 1 deletions
  1. 14 1
      src/extract.c

+ 14 - 1
src/extract.c

@@ -115,6 +115,19 @@ extr_init (void)
   same_owner_option += we_are_root;
   same_owner_option += we_are_root;
   xalloc_fail_func = extract_finish;
   xalloc_fail_func = extract_finish;
 
 
+  /* Save 'root device' to avoid purging mount points.
+     FIXME: Should the same be done after handling -C option ? */
+  if (one_file_system_option)
+    {
+      struct stat st;      
+      char *dir = xgetcwd ();
+
+      if (deref_stat (true, dir, &st))
+	stat_diag (dir);
+      else
+	root_device = st.st_dev;
+    }
+  
   /* Option -p clears the kernel umask, so it does not affect proper
   /* Option -p clears the kernel umask, so it does not affect proper
      restoration of file permissions.  New intermediate directories will
      restoration of file permissions.  New intermediate directories will
      comply with umask at start of program.  */
      comply with umask at start of program.  */
@@ -1012,7 +1025,7 @@ extract_archive (void)
 	  /* Read the entry and delete files that aren't listed in the
 	  /* Read the entry and delete files that aren't listed in the
 	     archive.  */
 	     archive.  */
 
 
-	  gnu_restore (file_name);
+	  purge_directory (file_name);
 	}
 	}
       else if (typeflag == GNUTYPE_DUMPDIR)
       else if (typeflag == GNUTYPE_DUMPDIR)
 	skip_member ();
 	skip_member ();