Fix prefix length calculation in ustar mode.

* src/create.c (split_long_name): Fix prefix length
calculation.
(write_ustar_long_name): Improve ustar mode compatibility
with the Sun version.
This commit is contained in:
Sergey Poznyakoff
2010-01-22 17:52:42 +02:00
parent cac45fffc5
commit cd91cd3c62

View File

@@ -602,8 +602,10 @@ split_long_name (const char *name, size_t length)
{
size_t i;
if (length > PREFIX_FIELD_SIZE)
if (length > PREFIX_FIELD_SIZE + 1)
length = PREFIX_FIELD_SIZE + 1;
else if (ISSLASH (name[length - 1]))
length--;
for (i = length - 1; i > 0; i--)
if (ISSLASH (name[i]))
break;
@@ -614,9 +616,9 @@ static union block *
write_ustar_long_name (const char *name)
{
size_t length = strlen (name);
size_t i;
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"),
@@ -626,7 +628,7 @@ write_ustar_long_name (const char *name)
}
i = split_long_name (name, length);
if (i == 0 || length - i - 1 > NAME_FIELD_SIZE)
if (i == 0 || (nlen = length - i - 1) > NAME_FIELD_SIZE || nlen == 0)
{
ERROR ((0, 0,
_("%s: file name is too long (cannot be split); not dumped"),