/* Read the body as a Mac OS metadata blob. */
size = archive_entry_size(entry);
- *unconsumed = (size + 511) & ~ 511;
- tar_flush_unconsumed(a, unconsumed);
/*
* TODO: Look beyond the body here to peek at the next header.
* If it's a regular header (not an extension header)
return (ARCHIVE_FATAL);
}
archive_entry_copy_mac_metadata(entry, data, size);
+ *unconsumed = (size + 511) & ~ 511;
+ tar_flush_unconsumed(a, unconsumed);
return (tar_read_header(a, tar, entry, unconsumed));
}
"abcdefghijklmnopqrstuvwxyz/"
/*
- * Apple shipped an extended version of GNU tar with Mac OX X 10.5
+ * Apple shipped an extended version of GNU tar with Mac OS X 10.5
* and earlier.
*/
void test_compat_mac_1()
attr = archive_entry_mac_metadata(ae, &attrSize);
assert(attr != NULL);
assertEqualInt(225, attrSize);
+ assertEqualMem("\x00\x05\x16\x07\x00\x02\x00\x00Mac OS X", attr, 16);
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("file", archive_entry_pathname(ae));
attr = archive_entry_mac_metadata(ae, &attrSize);
assert(attr != NULL);
assertEqualInt(225, attrSize);
+ assertEqualMem("\x00\x05\x16\x07\x00\x02\x00\x00Mac OS X", attr, 16);
/* Verify the end-of-archive. */
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
char name[] = "test_compat_mac-2.tar.Z";
struct archive_entry *ae;
struct archive *a;
+ const void *attr;
+ size_t attrSize;
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
assertEqualString("staff", archive_entry_gname(ae));
assertEqualInt(040755, archive_entry_mode(ae));
+ attr = archive_entry_mac_metadata(ae, &attrSize);
+ assert(attr == NULL);
+ assertEqualInt(0, attrSize);
+
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("./mydir/", archive_entry_pathname(ae));
assertEqualInt(1303628303, archive_entry_mtime(ae));
assertEqualString("staff", archive_entry_gname(ae));
assertEqualInt(040755, archive_entry_mode(ae));
+ attr = archive_entry_mac_metadata(ae, &attrSize);
+ assert(attr != NULL);
+ assertEqualInt(267, attrSize);
+ assertEqualMem("\x00\x05\x16\x07\x00\x02\x00\x00Mac OS X", attr, 16);
+
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualString("./myfile", archive_entry_pathname(ae));
assertEqualInt(1303628303, archive_entry_mtime(ae));
assertEqualString("staff", archive_entry_gname(ae));
assertEqualInt(0100644, archive_entry_mode(ae));
+ attr = archive_entry_mac_metadata(ae, &attrSize);
+ assert(attr != NULL);
+ assertEqualInt(267, attrSize);
+ assertEqualMem("\x00\x05\x16\x07\x00\x02\x00\x00Mac OS X", attr, 16);
+
/* Verify the end-of-archive. */
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));