X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fcreate.c;h=7b20c02b79786df884a27b0d970dadc19ed4f7aa;hb=57bfbbde90dfcc18ee6b1e27c01ba915ecc56312;hp=f54e346f777c4828002ac6e24a103d50415312b1;hpb=b0d5935cb0bf058cd2fc286a48cfd6b6a1c098bf;p=chaz%2Ftar diff --git a/src/create.c b/src/create.c index f54e346..7b20c02 100644 --- a/src/create.c +++ b/src/create.c @@ -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; @@ -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,8 @@ dump_file0 (struct tar_stat_info *st, const char *p, } buffer[size] = '\0'; assign_string (&st->link_name, buffer); + if (transform_symlinks_option) + transform_name (&st->link_name); if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT) < size) write_long_link (st); @@ -1713,7 +1715,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 */