exclusion_tags = tag;
}
-static void
+void
exclusion_tag_warning (const char *dirname, const char *tagname,
const char *message)
{
message));
}
-static enum exclusion_tag_type
+enum exclusion_tag_type
check_exclusion_tags (char *dirname, const char **tag_file_name)
{
static char *tagname;
static size_t tagsize;
struct exclusion_tag *tag;
size_t dlen = strlen (dirname);
+ int addslash = dirname[dlen-1] != '/';
char *nptr = NULL;
for (tag = exclusion_tags; tag; tag = tag->next)
{
- size_t size = dlen + tag->length + 1;
+ size_t size = dlen + addslash + tag->length + 1;
if (size > tagsize)
{
tagsize = size;
{
strcpy (tagname, dirname);
nptr = tagname + dlen;
+ if (addslash)
+ *nptr++ = '/';
}
strcpy (nptr, tag->name);
if (access (tagname, F_OK) == 0
while (size_left > 0)
{
size_t bufsize, count;
-
+
mv_size_left (size_left);
blk = find_next_block ();
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)
{
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;
}
}
switch (check_exclusion_tags (st->orig_file_name, &tag_file_name))
{
- case exclusion_tag_none:
case exclusion_tag_all:
+ /* Handled in dump_file0 */
+ break;
+
+ case exclusion_tag_none:
{
char const *entry;
size_t entry_len;
static void
file_count_links (struct tar_stat_info *st)
{
+ if (hard_dereference_option)
+ return;
if (st->stat.st_nlink > 1)
{
struct link *duplicate;
case dump_status_ok:
case dump_status_short:
mv_end ();
+ file_count_links (st);
break;
case dump_status_fail:
abort ();
}
- file_count_links (st);
-
ok = status == dump_status_ok;
}
}
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);
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 */