Lines Matching defs:bsdtar
60 #include "bsdtar.h"
79 static int append_archive(struct bsdtar *, struct archive *,
81 static int append_archive_filename(struct bsdtar *,
83 static void archive_names_from_file(struct bsdtar *bsdtar,
85 static int copy_file_data_block(struct bsdtar *,
90 static void report_write(struct bsdtar *, struct archive *,
92 static void test_for_append(struct bsdtar *);
95 static void write_archive(struct archive *, struct bsdtar *);
96 static void write_entry(struct bsdtar *, struct archive *,
98 static void write_file(struct bsdtar *, struct archive *,
100 static void write_hierarchy(struct bsdtar *, struct archive *,
124 set_writer_options(struct bsdtar *bsdtar, struct archive *a)
149 if (ARCHIVE_OK != archive_write_set_options(a, bsdtar->option_options))
154 set_reader_options(struct bsdtar *bsdtar, struct archive *a)
159 (void)bsdtar; /* UNUSED */
182 if (bsdtar->flags & OPTFLAG_IGNORE_ZEROS)
189 tar_mode_c(struct bsdtar *bsdtar)
195 if (*bsdtar->argv == NULL && bsdtar->names_from_file == NULL)
201 if (cset_get_format(bsdtar->cset) == NULL) {
203 cset_set_format(bsdtar->cset, "pax restricted");
206 cset_get_format(bsdtar->cset));
210 cset_get_format(bsdtar->cset),
215 archive_write_set_bytes_per_block(a, bsdtar->bytes_per_block);
216 archive_write_set_bytes_in_last_block(a, bsdtar->bytes_in_last_block);
218 r = cset_write_add_filters(bsdtar->cset, a, &filter_name);
224 set_writer_options(bsdtar, a);
225 if (bsdtar->passphrase != NULL)
226 r = archive_write_set_passphrase(a, bsdtar->passphrase);
228 r = archive_write_set_passphrase_callback(a, bsdtar,
232 if (ARCHIVE_OK != archive_write_open_filename(a, bsdtar->filename))
234 write_archive(a, bsdtar);
242 tar_mode_r(struct bsdtar *bsdtar)
251 test_for_append(bsdtar);
256 bsdtar->fd = open(bsdtar->filename, O_RDWR | O_CREAT | O_BINARY);
258 bsdtar->fd = open(bsdtar->filename, O_RDWR | O_CREAT | O_BINARY, 0666);
260 if (bsdtar->fd < 0)
262 "Cannot open %s", bsdtar->filename);
269 set_reader_options(bsdtar, a);
270 r = archive_read_open_fd(a, bsdtar->fd, 10240);
273 "Can't read archive %s: %s", bsdtar->filename,
278 close(bsdtar->fd);
299 if (cset_get_format(bsdtar->cset) != NULL) {
302 cset_get_format(bsdtar->cset));
309 cset_get_format(bsdtar->cset), bsdtar->filename);
320 if (lseek(bsdtar->fd, end_offset, SEEK_SET) < 0)
322 set_writer_options(bsdtar, a);
323 if (ARCHIVE_OK != archive_write_open_fd(a, bsdtar->fd))
326 write_archive(a, bsdtar); /* XXX check return val XXX */
328 close(bsdtar->fd);
329 bsdtar->fd = -1;
333 tar_mode_u(struct bsdtar *bsdtar)
342 bsdtar->archive_dir = &archive_dir;
348 test_for_append(bsdtar);
350 bsdtar->fd = open(bsdtar->filename, O_RDWR | O_BINARY);
351 if (bsdtar->fd < 0)
353 "Cannot open %s", bsdtar->filename);
359 set_reader_options(bsdtar, a);
360 if (archive_read_open_fd(a, bsdtar->fd, bsdtar->bytes_per_block)
363 "Can't open %s: %s", bsdtar->filename,
371 close(bsdtar->fd);
375 if (archive_match_exclude_entry(bsdtar->matching,
379 archive_error_string(bsdtar->matching));
394 archive_write_set_bytes_per_block(a, bsdtar->bytes_per_block);
395 archive_write_set_bytes_in_last_block(a, bsdtar->bytes_in_last_block);
397 if (lseek(bsdtar->fd, end_offset, SEEK_SET) < 0)
399 set_writer_options(bsdtar, a);
400 if (ARCHIVE_OK != archive_write_open_fd(a, bsdtar->fd))
403 write_archive(a, bsdtar);
405 close(bsdtar->fd);
406 bsdtar->fd = -1;
408 while (bsdtar->archive_dir->head != NULL) {
409 p = bsdtar->archive_dir->head->next;
410 free(bsdtar->archive_dir->head->name);
411 free(bsdtar->archive_dir->head);
412 bsdtar->archive_dir->head = p;
414 bsdtar->archive_dir->tail = NULL;
422 write_archive(struct archive *a, struct bsdtar *bsdtar)
428 bsdtar->buff_size = 64 * 1024;
429 while (bsdtar->buff_size < (size_t)bsdtar->bytes_per_block)
430 bsdtar->buff_size *= 2;
432 bsdtar->buff_size += 16 * 1024;
435 if ((bsdtar->buff = malloc(bsdtar->buff_size)) == NULL)
438 if ((bsdtar->resolver = archive_entry_linkresolver_new()) == NULL)
440 archive_entry_linkresolver_set_strategy(bsdtar->resolver,
444 if ((bsdtar->diskreader = archive_read_disk_new()) == NULL)
447 switch (bsdtar->symlink_mode) {
449 archive_read_disk_set_symlink_hybrid(bsdtar->diskreader);
452 archive_read_disk_set_symlink_logical(bsdtar->diskreader);
455 archive_read_disk_set_symlink_physical(bsdtar->diskreader);
459 archive_read_disk_set_matching(bsdtar->diskreader,
460 bsdtar->matching, excluded_callback, bsdtar);
462 bsdtar->diskreader, metadata_filter, bsdtar);
464 archive_read_disk_set_behavior(bsdtar->diskreader,
465 bsdtar->readdisk_flags);
466 archive_read_disk_set_standard_lookup(bsdtar->diskreader);
468 if (bsdtar->names_from_file != NULL)
469 archive_names_from_file(bsdtar, a);
471 while (*bsdtar->argv) {
472 arg = *bsdtar->argv;
476 bsdtar->argv++;
477 arg = *bsdtar->argv;
481 bsdtar->return_value = 1;
487 bsdtar->return_value = 1;
491 set_chdir(bsdtar, arg);
494 do_chdir(bsdtar); /* Handle a deferred -C */
496 if (append_archive_filename(bsdtar, a,
500 write_hierarchy(bsdtar, a, arg);
502 bsdtar->argv++;
505 archive_read_disk_set_matching(bsdtar->diskreader, NULL, NULL, NULL);
507 bsdtar->diskreader, NULL, NULL);
509 archive_entry_linkify(bsdtar->resolver, &entry, &sparse_entry);
513 struct archive *disk = bsdtar->diskreader;
517 * of the entry because the disk reader bsdtar->diskreader
529 bsdtar->return_value = 1;
545 bsdtar->return_value = 1;
550 write_file(bsdtar, a, entry);
555 archive_entry_linkify(bsdtar->resolver, &entry, &sparse_entry);
560 bsdtar->return_value = 1;
565 free(bsdtar->buff);
566 archive_entry_linkresolver_free(bsdtar->resolver);
567 bsdtar->resolver = NULL;
568 archive_read_free(bsdtar->diskreader);
569 bsdtar->diskreader = NULL;
571 if (bsdtar->flags & OPTFLAG_TOTALS) {
587 archive_names_from_file(struct bsdtar *bsdtar, struct archive *a)
592 bsdtar->next_line_is_dir = 0;
594 lr = lafe_line_reader(bsdtar->names_from_file,
595 (bsdtar->flags & OPTFLAG_NULL));
597 if (bsdtar->next_line_is_dir) {
599 set_chdir(bsdtar, line);
603 bsdtar->return_value = 1;
605 bsdtar->next_line_is_dir = 0;
606 } else if (((bsdtar->flags & OPTFLAG_NULL) == 0) &&
608 bsdtar->next_line_is_dir = 1;
611 do_chdir(bsdtar); /* Handle a deferred -C */
612 write_hierarchy(bsdtar, a, line);
616 if (bsdtar->next_line_is_dir)
626 * bsdtar->return_value but return zero, so the overall archiving
630 append_archive_filename(struct bsdtar *bsdtar, struct archive *a,
643 set_reader_options(bsdtar, ina);
645 if (bsdtar->passphrase != NULL)
646 rc = archive_read_add_passphrase(a, bsdtar->passphrase);
648 rc = archive_read_set_passphrase_callback(ina, bsdtar,
653 bsdtar->bytes_per_block)) {
655 bsdtar->return_value = 1;
659 rc = append_archive(bsdtar, a, ina);
664 bsdtar->return_value = 1;
672 append_archive(struct bsdtar *bsdtar, struct archive *a, struct archive *ina)
678 if (archive_match_excluded(bsdtar->matching, in_entry))
680 if(edit_pathname(bsdtar, in_entry))
682 if ((bsdtar->flags & OPTFLAG_INTERACTIVE) &&
685 if (bsdtar->verbose > 1) {
687 list_item_verbose(bsdtar, stderr, in_entry);
688 } else if (bsdtar->verbose > 0)
692 report_write(bsdtar, a, in_entry, 0);
696 if (!bsdtar->verbose)
709 else if (copy_file_data_block(bsdtar, a, ina, in_entry))
713 if (bsdtar->verbose)
722 copy_file_data_block(struct bsdtar *bsdtar, struct archive *a,
735 report_write(bsdtar, a, entry, progress);
742 null_buff = bsdtar->buff;
743 memset(null_buff, 0, bsdtar->buff_size);
747 if (sparse > (int64_t)bsdtar->buff_size)
748 ns = bsdtar->buff_size;
799 struct bsdtar *bsdtar = (struct bsdtar *)_data;
801 if (bsdtar->flags & OPTFLAG_NO_SUBDIRS)
805 if ((bsdtar->flags & OPTFLAG_INTERACTIVE) &&
814 struct bsdtar *bsdtar = (struct bsdtar *)_data;
836 if ((bsdtar->flags & OPTFLAG_INTERACTIVE) &&
841 if (((bsdtar->flags & OPTFLAG_NO_SUBDIRS) == 0) &&
852 write_hierarchy(struct bsdtar *bsdtar, struct archive *a, const char *path)
854 struct archive *disk = bsdtar->diskreader;
862 bsdtar->return_value = 1;
865 bsdtar->first_fs = -1;
877 bsdtar->return_value = 1;
885 if (bsdtar->uid >= 0) {
886 archive_entry_set_uid(entry, bsdtar->uid);
887 if (!bsdtar->uname)
889 archive_read_disk_uname(bsdtar->diskreader,
890 bsdtar->uid));
892 if (bsdtar->gid >= 0) {
893 archive_entry_set_gid(entry, bsdtar->gid);
894 if (!bsdtar->gname)
896 archive_read_disk_gname(bsdtar->diskreader,
897 bsdtar->gid));
899 if (bsdtar->uname)
900 archive_entry_set_uname(entry, bsdtar->uname);
901 if (bsdtar->gname)
902 archive_entry_set_gname(entry, bsdtar->gname);
908 if (edit_pathname(bsdtar, entry))
912 if (bsdtar->verbose > 1) {
914 list_item_verbose(bsdtar, stderr, entry);
915 } else if (bsdtar->verbose > 0) {
925 archive_entry_linkify(bsdtar->resolver, &entry, &spare_entry);
928 write_file(bsdtar, a, entry);
936 if (bsdtar->verbose)
948 write_file(struct bsdtar *bsdtar, struct archive *a,
951 write_entry(bsdtar, a, entry);
958 write_entry(struct bsdtar *bsdtar, struct archive *a,
965 if (bsdtar->verbose > 1) {
967 list_item_verbose(bsdtar, stderr, entry);
986 if (copy_file_data_block(bsdtar, a, bsdtar->diskreader, entry))
992 report_write(struct bsdtar *bsdtar, struct archive *a,
998 if (bsdtar->verbose)
1020 test_for_append(struct bsdtar *bsdtar)
1024 if (*bsdtar->argv == NULL && bsdtar->names_from_file == NULL)
1026 if (bsdtar->filename == NULL)
1029 if (stat(bsdtar->filename, &s) != 0)
1035 bsdtar->filename);