Browse Source

Obtain root_device here, to make sure it works correctly with -C.

Sergey Poznyakoff 19 years ago
parent
commit
ca43ee9769
1 changed files with 13 additions and 13 deletions
  1. 13 13
      src/extract.c

+ 13 - 13
src/extract.c

@@ -120,19 +120,6 @@ extr_init (void)
   same_permissions_option += we_are_root;
   same_permissions_option += we_are_root;
   same_owner_option += we_are_root;
   same_owner_option += we_are_root;
 
 
-  /* 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.  */
@@ -626,6 +613,19 @@ extract_dir (char *file_name, int typeflag)
   mode_t mode;
   mode_t mode;
   int interdir_made = 0;
   int interdir_made = 0;
 
 
+  /* Save 'root device' to avoid purging mount points. */
+  if (one_file_system_option && root_device == 0)
+    {
+      struct stat st;
+      char *dir = xgetcwd ();
+
+      if (deref_stat (true, dir, &st))
+	stat_diag (dir);
+      else
+	root_device = st.st_dev;
+      free (dir);
+    }
+
   if (incremental_option)
   if (incremental_option)
     /* Read the entry and delete files that aren't listed in the archive.  */
     /* Read the entry and delete files that aren't listed in the archive.  */
     purge_directory (file_name);
     purge_directory (file_name);