From 50f7052ecf6de860ef4c66ed9981d5b8c0c7930b Mon Sep 17 00:00:00 2001 From: Tim Kientzle Date: Thu, 2 Jan 2014 19:25:02 -0800 Subject: [PATCH] Change new extra block from 'LA' to 'el' to follow updated draft spec --- libarchive/archive_read_support_format_zip.c | 4 ++-- libarchive/archive_write_set_format_zip.c | 8 +++++--- libarchive/test/test_write_format_zip_compression_store.c | 4 ++-- libarchive/test/test_write_format_zip_file.c | 2 +- libarchive/test/test_write_format_zip_file_zip64.c | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/libarchive/archive_read_support_format_zip.c b/libarchive/archive_read_support_format_zip.c index 1c653a608..b3ccf7c00 100644 --- a/libarchive/archive_read_support_format_zip.c +++ b/libarchive/archive_read_support_format_zip.c @@ -339,9 +339,9 @@ process_extra(const char *p, size_t extra_length, struct zip_entry* zip_entry) } break; } - case 0x414C: + case 0x6c65: { - /* Experimental 'LA' field */ + /* Experimental 'el' field */ int bitmap, bitmap_last; if (datasize < 1) diff --git a/libarchive/archive_write_set_format_zip.c b/libarchive/archive_write_set_format_zip.c index 32889e80d..edb06d068 100644 --- a/libarchive/archive_write_set_format_zip.c +++ b/libarchive/archive_write_set_format_zip.c @@ -641,11 +641,11 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) archive_le16enc(zip64_start + 2, e - (zip64_start + 4)); } - { /* Experimental 'LA' extension to improve streaming. */ + { /* Experimental 'el' extension to improve streaming. */ unsigned char *external_info = e; - memcpy(e, "LA\000\000", 4); // 0x414C + 2-byte length + memcpy(e, "el\000\000", 4); // 0x6c65 + 2-byte length e += 4; - e[0] = 5; /* bitmap of included fields */ + e[0] = 7; /* bitmap of included fields */ e += 1; archive_le16enc(e, /* "Version created by" */ 3 * 256 + version_needed); @@ -655,6 +655,8 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) archive_le32enc(e, /* external file attributes */ archive_entry_mode(zip->entry) << 16); e += 4; + // Libarchive does not currently support file comments. + archive_le16enc(external_info + 2, e - (external_info + 4)); } diff --git a/libarchive/test/test_write_format_zip_compression_store.c b/libarchive/test/test_write_format_zip_compression_store.c index 69cedc442..e339f71bf 100644 --- a/libarchive/test/test_write_format_zip_compression_store.c +++ b/libarchive/test/test_write_format_zip_compression_store.c @@ -228,7 +228,7 @@ DEFINE_TEST(test_write_format_zip_compression_store) assertEqualInt(i4(q + 11), file_gid); /* 'Ux' GID */ q = q + 4 + i2(q + 2); - assertEqualInt(i2(q), 0x414c); /* 'LA' experimental extension header */ + assertEqualInt(i2(q), 0x6c65); /* 'el' experimental extension header */ assertEqualInt(i2(q + 2), 9); /* size */ assertEqualInt(q[4], 7); /* Bitmap of fields included. */ assertEqualInt(i2(q + 5) >> 8, 3); /* system & version made by */ @@ -317,7 +317,7 @@ DEFINE_TEST(test_write_format_zip_compression_store) assertEqualInt(i4(q + 11), folder_gid); /* 'ux' GID */ q = q + 4 + i2(q + 2); - assertEqualInt(i2(q), 0x414c); /* 'LA' experimental extension header */ + assertEqualInt(i2(q), 0x6c65); /* 'el' experimental extension header */ assertEqualInt(i2(q + 2), 9); /* size */ assertEqualInt(q[4], 7); /* bitmap of fields */ assertEqualInt(i2(q + 5) >> 8, 3); /* system & version made by */ diff --git a/libarchive/test/test_write_format_zip_file.c b/libarchive/test/test_write_format_zip_file.c index 88a733fb5..f417e467d 100644 --- a/libarchive/test/test_write_format_zip_file.c +++ b/libarchive/test/test_write_format_zip_file.c @@ -216,7 +216,7 @@ DEFINE_TEST(test_write_format_zip_file) assertEqualInt(i4(p + 11), file_gid); /* 'Ux' GID */ p += 4 + i2(p + 2); - assertEqualInt(i2(p), 0x414c); /* 'LA' experimental extension block */ + assertEqualInt(i2(p), 0x6c65); /* 'el' experimental extension block */ assertEqualInt(i2(p + 2), 9); /* size */ assertEqualInt(p[4], 7); /* bitmap of fields in this block */ assertEqualInt(i2(p + 5) >> 8, 3); /* System & version made by */ diff --git a/libarchive/test/test_write_format_zip_file_zip64.c b/libarchive/test/test_write_format_zip_file_zip64.c index 60770653d..ce6611538 100644 --- a/libarchive/test/test_write_format_zip_file_zip64.c +++ b/libarchive/test/test_write_format_zip_file_zip64.c @@ -249,7 +249,7 @@ DEFINE_TEST(test_write_format_zip_file_zip64) /* compressed file size we can't verify here */ p += 4 + i2(p + 2); - assertEqualInt(i2(p), 0x414c); /* 'LA' experimental extension header */ + assertEqualInt(i2(p), 0x6c65); /* 'el' experimental extension header */ assertEqualInt(i2(p + 2), 9); /* size */ assertEqualInt(p[4], 7); /* bitmap of included fields */ assertEqualInt(i2(p + 5) >> 8, 3); /* system & version made by */ -- 2.47.2