]> Dogcows Code - chaz/tar/blobdiff - src/create.c
* NEWS, configure.ac: Version 1.20.91
[chaz/tar] / src / create.c
index f54e346f777c4828002ac6e24a103d50415312b1..a925160e1be90c5b5b0cab7cc301a3ec3e7135fc 100644 (file)
@@ -1041,7 +1041,7 @@ dump_regular_file (int fd, struct tar_stat_info *st)
   while (size_left > 0)
     {
       size_t bufsize, count;
-
+      
       mv_size_left (size_left);
 
       blk = find_next_block ();
@@ -1066,8 +1066,7 @@ dump_regular_file (int fd, struct tar_stat_info *st)
          return dump_status_short;
        }
       size_left -= count;
-      if (count)
-       set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
+      set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
 
       if (count != bufsize)
        {
@@ -1081,7 +1080,7 @@ dump_regular_file (int fd, struct tar_stat_info *st)
                 STRINGIFY_BIGINT (size_left, buf)));
          if (! ignore_failed_read_option) 
            exit_status = TAREXIT_DIFFERS;
-         pad_archive (size_left - (bufsize-count));
+         pad_archive (size_left - (bufsize - count));
          return dump_status_short;
        }
     }
@@ -1423,6 +1422,8 @@ dump_hard_link (struct tar_stat_info *st)
 static void
 file_count_links (struct tar_stat_info *st)
 {
+  if (hard_dereference_option)
+    return;
   if (st->stat.st_nlink > 1)
     {
       struct link *duplicate;
@@ -1494,7 +1495,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
   assign_string (&st->file_name,
                  safer_name_suffix (p, false, absolute_names_option));
 
-  transform_name (&st->file_name);
+  transform_name (&st->file_name, XFORM_REGFILE);
 
   if (deref_stat (dereference_option, p, &st->stat) != 0)
     {
@@ -1615,6 +1616,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
            case dump_status_ok:
            case dump_status_short:
              mv_end ();
+             file_count_links (st);
              break;
 
            case dump_status_fail:
@@ -1624,8 +1626,6 @@ dump_file0 (struct tar_stat_info *st, const char *p,
              abort ();
            }
 
-         file_count_links (st);
-
          ok = status == dump_status_ok;
        }
 
@@ -1705,6 +1705,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
        }
       buffer[size] = '\0';
       assign_string (&st->link_name, buffer);
+      transform_name (&st->link_name, XFORM_SYMLINK);
       if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT) < size)
        write_long_link (st);
 
@@ -1713,7 +1714,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
       header = start_header (st);
       if (!header)
        return;
-      tar_copy_str (header->header.linkname, buffer, NAME_FIELD_SIZE);
+      tar_copy_str (header->header.linkname, st->link_name, NAME_FIELD_SIZE);
       header->header.typeflag = SYMTYPE;
       finish_header (st, header, block_ordinal);
       /* nothing more to do to it */
This page took 0.029164 seconds and 4 git commands to generate.