X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fextract.c;h=65b9a359e45bc3a1974ef20ff3556dcad9ae90a3;hb=f94cf6216bdbd93ff7a178d5da15aa47934422df;hp=0ed41532592c683bec9a905e2ad749bf6c080957;hpb=463d99453f51ac4ae875d9bae97418671e7a62bc;p=chaz%2Ftar diff --git a/src/extract.c b/src/extract.c index 0ed4153..65b9a35 100644 --- a/src/extract.c +++ b/src/extract.c @@ -115,6 +115,19 @@ extr_init (void) same_owner_option += we_are_root; 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 restoration of file permissions. New intermediate directories will 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 archive. */ - gnu_restore (file_name); + purge_directory (file_name); } else if (typeflag == GNUTYPE_DUMPDIR) skip_member ();