message));
}
-enum exclusion_tag_type
+enum exclusion_tag_type
check_exclusion_tags (const char *dirname, const char **tag_file_name)
{
static char *tagname;
size_t dlen = strlen (dirname);
int addslash = !ISSLASH (dirname[dlen-1]);
size_t noff = 0;
-
+
for (tag = exclusion_tags; tag; tag = tag->next)
{
size_t size = dlen + addslash + tag->length + 1;
1. In OLDGNU_FORMAT all strings in a tar header end in \0
2. Incremental archives use oldgnu_header.
-
+
Apart from this they are completely identical. */
uintmax_t s = (negsub &= archive_format == GNU_FORMAT) ? - sub : sub;
char subbuf[UINTMAX_STRSIZE_BOUND + 1];
size_t length = strlen (name);
size_t i, nlen;
union block *header;
-
+
if (length > PREFIX_FIELD_SIZE + NAME_FIELD_SIZE + 1)
{
ERROR ((0, 0, _("%s: file name is too long (max %d); not dumped"),
char *p;
int type;
time_t t;
-
+
if (st->xhdr.buffer || st->xhdr.stk == NULL)
return old_header;
while (size_left > 0)
{
size_t bufsize, count;
-
+
blk = find_next_block ();
bufsize = available_space_after (blk);
size_left),
quotearg_colon (st->orig_file_name),
STRINGIFY_BIGINT (size_left, buf)));
- if (! ignore_failed_read_option)
+ if (! ignore_failed_read_option)
set_exit_status (TAREXIT_DIFFERS);
pad_archive (size_left - (bufsize - count));
return dump_status_short;
size_t bufsize;
ssize_t count;
const char *buffer, *p_buffer;
-
+
block_ordinal = current_block_ordinal ();
buffer = safe_directory_contents (gnu_list_name->directory);
totsize = dumpdir_size (buffer);
finish_header (st, blk, block_ordinal);
p_buffer = buffer;
size_left = totsize;
-
+
mv_begin_write (st->file_name, totsize, totsize);
while (size_left > 0)
{
{
char *name_buf;
size_t name_size;
-
+
switch (check_exclusion_tags (st->orig_file_name, &tag_file_name))
{
case exclusion_tag_all:
/* Handled in dump_file0 */
break;
-
+
case exclusion_tag_none:
{
char const *entry;
if (!excluded_name (name_buf))
dump_file (name_buf, false, our_device);
}
-
+
free (name_buf);
}
break;
dump_file (name_buf, false, our_device);
free (name_buf);
break;
-
+
case exclusion_tag_under:
exclusion_tag_warning (st->orig_file_name, tag_file_name,
_("contents not dumped"));
assign_string (&linkname, st->orig_file_name);
transform_name (&linkname, XFORM_LINK);
-
+
lp = xmalloc (offsetof (struct link, name)
+ strlen (linkname) + 1);
lp->ino = st->stat.st_ino;
lp->nlink = st->stat.st_nlink;
strcpy (lp->name, linkname);
free (linkname);
-
+
if (! ((link_table
|| (link_table = hash_initialize (0, 0, hash_link,
compare_links, 0)))
&& (duplicate = hash_insert (link_table, lp))))
xalloc_die ();
-
+
if (duplicate != lp)
abort ();
lp->nlink--;
/* See if we want only new files, and check if this one is too old to
put in the archive.
-
+
This check is omitted if incremental_option is set *and* the
requested file is not explicitely listed in the command line. */
-
+
if (!(incremental_option && !is_individual_file (p))
&& !S_ISDIR (st->stat.st_mode)
&& OLDER_TAR_STAT_TIME (*st, m)
close (fd);
return;
}
-
+
ok = dump_dir (fd, st, top_level, parent_device);
/* dump_dir consumes FD if successful. */