21int main(
int argc,
const char **argv) {
24 struct archive_entry *entry;
30 a = archive_write_new();
31 archive_write_set_format_pax_restricted(a);
32 archive_write_add_filter_xz(a);
33 archive_write_set_options(a,
"compression-level=5,threads=1");
36 r = archive_write_open_filename(a, argv[1]);
37 if (r != ARCHIVE_OK) {
38 printf(
"%s\n", archive_error_string(a));
43 for (
int i = 2; i < argc; ++i) {
44 disk = archive_read_disk_new();
45 archive_read_disk_set_standard_lookup(disk);
46 r = archive_read_disk_open(disk, argv[i]);
47 if (r != ARCHIVE_OK) {
48 printf(
"%s\n", archive_error_string(a));
52 entry = archive_entry_new();
53 r = archive_read_next_header2(disk, entry);
54 if (r == ARCHIVE_EOF) {
57 if (r != ARCHIVE_OK) {
58 printf(
"%s\n", archive_error_string(disk));
61 archive_read_disk_descend(disk);
62 r = archive_write_header(a, entry);
64 printf(
"%s\n", archive_error_string(a));
66 if (r == ARCHIVE_FATAL) {
67 printf(
"FATAL error - unable to write entry to archive.");
70 if (r > ARCHIVE_FAILED) {
71 fd = open(archive_entry_sourcepath(entry), O_RDONLY);
74 archive_write_data(a,
buff, len);
79 archive_entry_free(entry);
81 archive_write_free(disk);
83 archive_write_close(a);
84 archive_write_free(a);