assertEqualInt(ARCHIVE_OK, archive_write_close(a));
assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+ /*
+ * Test behavior after a fatal error (triggered by giving
+ * archive_write_open_memory() a very small buffer).
+ */
+ if (!use_prog) {
+ used1 = 0;
+ assert((a = archive_write_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_set_format_ustar(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_add_filter_bzip2(a));
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_open_memory(a, buff, 100, &used1));
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_set_filetype(ae, AE_IFREG);
+ archive_entry_set_size(ae, 4000000);
+ archive_entry_copy_pathname(ae, "file");
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_write_header(a, ae));
+ for (i = 0; i < 1000000; i++) {
+ r = archive_write_data(a, &i, 4);
+ if (r == ARCHIVE_FATAL)
+ break;
+ }
+ assertEqualIntA(a, ARCHIVE_FATAL, r);
+ archive_entry_free(ae);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+ }
+
/*
* Clean up.
*/