|
|
@@ -467,7 +467,7 @@ archive_write_gnutar_header(struct archive_write *a,
|
|
|
}
|
|
|
}
|
|
|
if (gnutar->linkname_length > GNUTAR_linkname_size) {
|
|
|
- size_t todo = gnutar->linkname_length;
|
|
|
+ size_t length = gnutar->linkname_length + 1;
|
|
|
struct archive_entry *temp = archive_entry_new2(&a->archive);
|
|
|
|
|
|
/* Uname/gname here don't really matter since no one reads them;
|
|
|
@@ -476,7 +476,7 @@ archive_write_gnutar_header(struct archive_write *a,
|
|
|
archive_entry_set_gname(temp, "wheel");
|
|
|
|
|
|
archive_entry_set_pathname(temp, "././@LongLink");
|
|
|
- archive_entry_set_size(temp, gnutar->linkname_length + 1);
|
|
|
+ archive_entry_set_size(temp, length);
|
|
|
ret = archive_format_gnutar_header(a, buff, temp, 'K');
|
|
|
if (ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
@@ -484,11 +484,12 @@ archive_write_gnutar_header(struct archive_write *a,
|
|
|
if(ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
archive_entry_free(temp);
|
|
|
- /* Write as many 512 bytes blocks as needed to write full name. */
|
|
|
- ret = __archive_write_output(a, gnutar->linkname, todo);
|
|
|
+ /* Write name and trailing null byte. */
|
|
|
+ ret = __archive_write_output(a, gnutar->linkname, length);
|
|
|
if(ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
- ret = __archive_write_nulls(a, 0x1ff & (-(ssize_t)todo));
|
|
|
+ /* Pad to 512 bytes */
|
|
|
+ ret = __archive_write_nulls(a, 0x1ff & (-(ssize_t)length));
|
|
|
if (ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
}
|
|
|
@@ -496,7 +497,7 @@ archive_write_gnutar_header(struct archive_write *a,
|
|
|
/* If pathname is longer than 100 chars we need to add an 'L' header. */
|
|
|
if (gnutar->pathname_length > GNUTAR_name_size) {
|
|
|
const char *pathname = gnutar->pathname;
|
|
|
- size_t todo = gnutar->pathname_length;
|
|
|
+ size_t length = gnutar->pathname_length + 1;
|
|
|
struct archive_entry *temp = archive_entry_new2(&a->archive);
|
|
|
|
|
|
/* Uname/gname here don't really matter since no one reads them;
|
|
|
@@ -505,7 +506,7 @@ archive_write_gnutar_header(struct archive_write *a,
|
|
|
archive_entry_set_gname(temp, "wheel");
|
|
|
|
|
|
archive_entry_set_pathname(temp, "././@LongLink");
|
|
|
- archive_entry_set_size(temp, gnutar->pathname_length + 1);
|
|
|
+ archive_entry_set_size(temp, length);
|
|
|
ret = archive_format_gnutar_header(a, buff, temp, 'L');
|
|
|
if (ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
@@ -513,11 +514,12 @@ archive_write_gnutar_header(struct archive_write *a,
|
|
|
if(ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
archive_entry_free(temp);
|
|
|
- /* Write as many 512 bytes blocks as needed to write full name. */
|
|
|
- ret = __archive_write_output(a, pathname, todo);
|
|
|
+ /* Write pathname + trailing null byte. */
|
|
|
+ ret = __archive_write_output(a, pathname, length);
|
|
|
if(ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
- ret = __archive_write_nulls(a, 0x1ff & (-(ssize_t)todo));
|
|
|
+ /* Pad to multiple of 512 bytes. */
|
|
|
+ ret = __archive_write_nulls(a, 0x1ff & (-(ssize_t)length));
|
|
|
if (ret < ARCHIVE_WARN)
|
|
|
goto exit_write_header;
|
|
|
}
|