(start_private_header,write_header_name)
(dump_hard_link): Restore compatibility with 1.13.25
This commit is contained in:
25
src/create.c
25
src/create.c
@@ -370,6 +370,16 @@ tar_copy_str (char *dst, const char *src, size_t len)
|
|||||||
strncpy (dst, src, len);
|
strncpy (dst, src, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Same as tar_copy_str, but always terminate with NUL if using
|
||||||
|
is OLDGNU format */
|
||||||
|
static void
|
||||||
|
tar_name_copy_str (char *dst, const char *src, size_t len)
|
||||||
|
{
|
||||||
|
tar_copy_str (dst, src, len);
|
||||||
|
if (archive_format == OLDGNU_FORMAT)
|
||||||
|
dst[len-1] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Write a "private" header */
|
/* Write a "private" header */
|
||||||
union block *
|
union block *
|
||||||
start_private_header (const char *name, size_t size)
|
start_private_header (const char *name, size_t size)
|
||||||
@@ -379,7 +389,7 @@ start_private_header (const char *name, size_t size)
|
|||||||
|
|
||||||
memset (header->buffer, 0, sizeof (union block));
|
memset (header->buffer, 0, sizeof (union block));
|
||||||
|
|
||||||
tar_copy_str (header->header.name, name, NAME_FIELD_SIZE);
|
tar_name_copy_str (header->header.name, name, NAME_FIELD_SIZE);
|
||||||
OFF_TO_CHARS (size, header->header.size);
|
OFF_TO_CHARS (size, header->header.size);
|
||||||
|
|
||||||
time (&t);
|
time (&t);
|
||||||
@@ -402,7 +412,7 @@ write_short_name (struct tar_stat_info *st)
|
|||||||
{
|
{
|
||||||
union block *header = find_next_block ();
|
union block *header = find_next_block ();
|
||||||
memset (header->buffer, 0, sizeof (union block));
|
memset (header->buffer, 0, sizeof (union block));
|
||||||
tar_copy_str (header->header.name, st->file_name, NAME_FIELD_SIZE);
|
tar_name_copy_str (header->header.name, st->file_name, NAME_FIELD_SIZE);
|
||||||
return header;
|
return header;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -590,7 +600,9 @@ write_header_name (struct tar_stat_info *st)
|
|||||||
xheader_store ("path", st, NULL);
|
xheader_store ("path", st, NULL);
|
||||||
return write_short_name (st);
|
return write_short_name (st);
|
||||||
}
|
}
|
||||||
else if (NAME_FIELD_SIZE < strlen (st->file_name))
|
else if ((archive_format == OLDGNU_FORMAT
|
||||||
|
&& OLDGNU_NAME_FIELD_SIZE < strlen (st->file_name))
|
||||||
|
|| NAME_FIELD_SIZE < strlen (st->file_name))
|
||||||
return write_long_name (st);
|
return write_long_name (st);
|
||||||
else
|
else
|
||||||
return write_short_name (st);
|
return write_short_name (st);
|
||||||
@@ -1256,7 +1268,9 @@ dump_hard_link (struct tar_stat_info *st)
|
|||||||
|
|
||||||
block_ordinal = current_block_ordinal ();
|
block_ordinal = current_block_ordinal ();
|
||||||
assign_string (&st->link_name, link_name);
|
assign_string (&st->link_name, link_name);
|
||||||
if (NAME_FIELD_SIZE < strlen (link_name))
|
if ((archive_format == OLDGNU_FORMAT
|
||||||
|
&& OLDGNU_NAME_FIELD_SIZE < strlen (link_name))
|
||||||
|
|| NAME_FIELD_SIZE < strlen (link_name))
|
||||||
write_long_link (st);
|
write_long_link (st);
|
||||||
|
|
||||||
st->stat.st_size = 0;
|
st->stat.st_size = 0;
|
||||||
@@ -1490,7 +1504,8 @@ dump_file0 (struct tar_stat_info *st, char *p,
|
|||||||
}
|
}
|
||||||
buffer[size] = '\0';
|
buffer[size] = '\0';
|
||||||
assign_string (&st->link_name, buffer);
|
assign_string (&st->link_name, buffer);
|
||||||
if (size > NAME_FIELD_SIZE)
|
if ((archive_format == OLDGNU_FORMAT && size > OLDGNU_NAME_FIELD_SIZE)
|
||||||
|
|| size > NAME_FIELD_SIZE)
|
||||||
write_long_link (st);
|
write_long_link (st);
|
||||||
|
|
||||||
block_ordinal = current_block_ordinal ();
|
block_ordinal = current_block_ordinal ();
|
||||||
|
|||||||
Reference in New Issue
Block a user