]> Dogcows Code - chaz/tar/blobdiff - src/extract.c
tar: go back to absolutifying filenames in normalize_filename for now
[chaz/tar] / src / extract.c
index 531654aabbd9184e93c18b8048ddb821c39f1804..9897e82a61bd1d18c4c90743f236477516205ae0 100644 (file)
@@ -23,7 +23,6 @@
 #include <quotearg.h>
 #include <utimens.h>
 #include <errno.h>
-#include <xgetcwd.h>
 #include <priv-set.h>
 
 #include "common.h"
@@ -146,7 +145,7 @@ set_mode (char const *file_name,
 {
   mode_t mode;
   bool failed;
-  
+
   if (0 < same_permissions_option
       && permstatus != INTERDIR_PERMSTATUS)
     {
@@ -648,13 +647,11 @@ extract_dir (char *file_name, int typeflag)
   if (one_file_system_option && root_device == 0)
     {
       struct stat st;
-      char *dir = xgetcwd ();
 
-      if (deref_stat (true, dir, &st))
-       stat_diag (dir);
+      if (stat (".", &st) != 0)
+       stat_diag (".");
       else
        root_device = st.st_dev;
-      free (dir);
     }
 
   if (incremental_option)
@@ -812,7 +809,7 @@ extract_file (char *file_name, int typeflag)
        }
     }
 
-  mv_begin (&current_stat_info);
+  mv_begin_read (&current_stat_info);
   if (current_stat_info.is_sparse)
     sparse_extract_file (fd, &current_stat_info, &size);
   else
@@ -893,10 +890,10 @@ create_placeholder_file (char *file_name, bool is_symlink, int *interdir_made)
        {
        case RECOVER_OK:
          continue;
-         
+
        case RECOVER_SKIP:
          return 0;
-         
+
        case RECOVER_NO:
          open_error (file_name);
          return -1;
@@ -967,9 +964,9 @@ extract_link (char *file_name, int typeflag)
   int interdir_made = 0;
   char const *link_name;
   int rc;
-  
+
   link_name = current_stat_info.link_name;
-  
+
   if (! absolute_names_option && contains_dot_dot (link_name))
     return create_placeholder_file (file_name, false, &interdir_made);
 
@@ -1035,15 +1032,15 @@ extract_symlink (char *file_name, int typeflag)
       {
       case RECOVER_OK:
        continue;
-       
+
       case RECOVER_SKIP:
        return 0;
-       
+
       case RECOVER_NO:
        symlink_error (current_stat_info.link_name, file_name);
        return -1;
       }
-  
+
   set_stat (file_name, &current_stat_info, NULL, 0, 0, SYMTYPE);
   return 0;
 
@@ -1065,7 +1062,6 @@ extract_symlink (char *file_name, int typeflag)
 static int
 extract_node (char *file_name, int typeflag)
 {
-  int status;
   int interdir_made = 0;
   mode_t mode = current_stat_info.stat.st_mode & ~ current_umask;
   mode_t invert_permissions =
@@ -1077,10 +1073,10 @@ extract_node (char *file_name, int typeflag)
       {
       case RECOVER_OK:
        continue;
-       
+
       case RECOVER_SKIP:
        return 0;
-       
+
       case RECOVER_NO:
        mknod_error (file_name);
        return -1;
@@ -1088,7 +1084,7 @@ extract_node (char *file_name, int typeflag)
 
   set_stat (file_name, &current_stat_info, NULL, invert_permissions,
            ARCHIVED_PERMSTATUS, typeflag);
-  return status;
+  return 0;
 }
 #endif
 
@@ -1107,10 +1103,10 @@ extract_fifo (char *file_name, int typeflag)
       {
       case RECOVER_OK:
        continue;
-       
+
       case RECOVER_SKIP:
        return 0;
-       
+
       case RECOVER_NO:
        mkfifo_error (file_name);
        return -1;
@@ -1274,12 +1270,12 @@ extract_archive (void)
   tar_extractor_t fun;
 
   fatal_exit_hook = extract_finish;
-  
+
   /* Try to disable the ability to unlink a directory.  */
   priv_set_remove_linkdir ();
 
   set_next_block_after (current_header);
-  decode_header (current_header, &current_stat_info, &current_format, 1);
+
   if (!current_stat_info.file_name[0]
       || (interactive_option
          && !confirm ("extract", current_stat_info.file_name)))
This page took 0.028375 seconds and 4 git commands to generate.