You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#include <system.h>
return dump_status_short;
}
size_left -= count;
-
- set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
-
+ if (count)
+ set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
+
if (count != bufsize)
{
char buf[UINTMAX_STRSIZE_BOUND];
STRINGIFY_BIGINT (size_left, buf)));
if (! ignore_failed_read_option)
exit_status = TAREXIT_FAILURE;
- pad_archive (size_left);
+ pad_archive (size_left - (bufsize-count));
return dump_status_short;
}
}
/* Calculate the hash of a link. */
-static unsigned
-hash_link (void const *entry, unsigned n_buckets)
+static size_t
+hash_link (void const *entry, size_t n_buckets)
{
struct link const *l = entry;
uintmax_t num = l->dev ^ l->ino;
if ((duplicate = hash_lookup (link_table, &lp)))
{
/* We found a link. */
- char const *link_name = safer_name_suffix (duplicate->name, true);
+ char const *link_name = safer_name_suffix (duplicate->name, true,
+ absolute_names_option);
duplicate->nlink--;
return;
assign_string (&st->orig_file_name, p);
- assign_string (&st->file_name, safer_name_suffix (p, false));
+ assign_string (&st->file_name,
+ safer_name_suffix (p, false, absolute_names_option));
if (deref_stat (dereference_option, p, &st->stat) != 0)
{
return;
}
+ if (is_avoided_name (p))
+ return;
if (S_ISDIR (st->stat.st_mode))
{
dump_dir (st, top_level, parent_device);
utime (p, &restore_times);
return;
}
- else if (is_avoided_name (p))
- return;
else
{
/* Check for multiple links. */