Lines Matching refs:cpio
87 static int entry_to_archive(struct cpio *, struct archive_entry *);
88 static int file_to_archive(struct cpio *, const char *);
90 static void list_item_verbose(struct cpio *, struct archive_entry *);
92 static const char *lookup_gname(struct cpio *, gid_t gid);
93 static int lookup_gname_helper(struct cpio *,
95 static const char *lookup_uname(struct cpio *, uid_t uid);
96 static int lookup_uname_helper(struct cpio *,
98 static __LA_NORETURN void mode_in(struct cpio *);
99 static __LA_NORETURN void mode_list(struct cpio *);
100 static void mode_out(struct cpio *);
101 static void mode_pass(struct cpio *, const char *);
103 static int restore_time(struct cpio *, struct archive_entry *,
114 struct cpio _cpio; /* Allocated on stack. */ in main()
115 struct cpio *cpio; in main() local
121 cpio = &_cpio; in main()
122 memset(cpio, 0, sizeof(*cpio)); in main()
123 cpio->buff = buff; in main()
124 cpio->buff_size = sizeof(buff); in main()
145 cpio->uid_override = -1; in main()
146 cpio->uname_override = NULL; in main()
147 cpio->gid_override = -1; in main()
148 cpio->gname_override = NULL; in main()
149 cpio->argv = argv; in main()
150 cpio->argc = argc; in main()
151 cpio->mode = '\0'; in main()
152 cpio->verbose = 0; in main()
153 cpio->compress = '\0'; in main()
154 cpio->extract_flags = ARCHIVE_EXTRACT_NO_AUTODIR; in main()
155 cpio->extract_flags |= ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER; in main()
156 cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_SYMLINKS; in main()
157 cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_NODOTDOT; in main()
158 cpio->extract_flags |= ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS; in main()
159 cpio->extract_flags |= ARCHIVE_EXTRACT_PERM; in main()
160 cpio->extract_flags |= ARCHIVE_EXTRACT_FFLAGS; in main()
161 cpio->extract_flags |= ARCHIVE_EXTRACT_ACL; in main()
164 cpio->extract_flags |= ARCHIVE_EXTRACT_OWNER; in main()
166 cpio->bytes_per_block = 512; in main()
167 cpio->filename = NULL; in main()
169 cpio->matching = archive_match_new(); in main()
170 if (cpio->matching == NULL) in main()
173 while ((opt = cpio_getopt(cpio)) != -1) { in main()
176 cpio->option_null = 1; in main()
179 cpio->option_pwb = 1; in main()
182 cpio->format = "bin"; in main()
185 cpio->option_append = 1; in main()
188 cpio->option_atime_restore = 1; in main()
191 cpio->bytes_per_block = 5120; in main()
194 cpio->add_filter = opt; in main()
199 t = (int)strtol(cpio->argument, &tptr, 10); in main()
200 if (errno || t <= 0 || *(cpio->argument) == '\0' || in main()
203 cpio->argument); in main()
205 cpio->bytes_per_block = t; in main()
208 cpio->format = "odc"; in main()
211 cpio->extract_flags &= ~ARCHIVE_EXTRACT_NO_AUTODIR; in main()
215 cpio->matching, cpio->argument, in main()
216 cpio->option_null) != ARCHIVE_OK) in main()
218 archive_error_string(cpio->matching)); in main()
221 cpio->filename = cpio->argument; in main()
224 if (archive_match_exclude_pattern(cpio->matching, in main()
225 cpio->argument) != ARCHIVE_OK) in main()
227 archive_error_string(cpio->matching)); in main()
230 cpio->compress = opt; in main()
233 cpio->format = cpio->argument; in main()
239 cpio->filename = cpio->argument; in main()
242 if (cpio->mode != '\0') in main()
244 "Cannot use both -i and -%c", cpio->mode); in main()
245 cpio->mode = opt; in main()
248 cpio->compress = opt; in main()
251 cpio->compress = opt; in main()
254 cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_SYMLINKS; in main()
255 cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NODOTDOT; in main()
256 cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS; in main()
259 cpio->option_follow_links = 1; in main()
262 cpio->option_link = 1; in main()
269 cpio->compress = opt; in main()
272 cpio->extract_flags |= ARCHIVE_EXTRACT_TIME; in main()
275 cpio->option_numeric_uid_gid = 1; in main()
278 cpio->extract_flags &= ~ARCHIVE_EXTRACT_OWNER; in main()
281 cpio->filename = cpio->argument; in main()
284 if (cpio->mode != '\0') in main()
286 "Cannot use both -o and -%c", cpio->mode); in main()
287 cpio->mode = opt; in main()
290 if (cpio->mode != '\0') in main()
292 "Cannot use both -p and -%c", cpio->mode); in main()
293 cpio->mode = opt; in main()
294 cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NODOTDOT; in main()
295 cpio->extract_flags &= ~ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS; in main()
298 cpio->passphrase = cpio->argument; in main()
301 cpio->extract_flags |= ARCHIVE_EXTRACT_OWNER; in main()
304 cpio->quiet = 1; in main()
308 if (owner_parse(cpio->argument, &owner, &errmsg) != 0) { in main()
315 cpio->uid_override = owner.uid; in main()
317 cpio->uname_override = owner.uname; in main()
319 cpio->gid_override = owner.gid; in main()
321 cpio->gname_override = owner.gname; in main()
324 cpio->option_rename = 1; in main()
327 cpio->option_list = 1; in main()
330 cpio->extract_flags in main()
334 cpio->add_filter = opt; in main()
337 cpio->verbose++; in main()
340 cpio->dot++; in main()
354 cpio->compress = opt; in main()
357 cpio->compress = opt; in main()
360 cpio->compress = opt; in main()
371 if (cpio->option_list && cpio->mode == '\0') in main()
372 cpio->mode = 'i'; in main()
374 if (cpio->option_list && cpio->mode != 'i') in main()
377 if (cpio->option_numeric_uid_gid && !cpio->option_list) in main()
380 if (cpio->format != NULL && cpio->mode != 'o') in main()
383 if (cpio->option_link && cpio->mode != 'p') in main()
386 if (cpio->dot && cpio->verbose) in main()
387 cpio->dot = 0; in main()
390 switch (cpio->mode) { in main()
392 if (cpio->format == NULL) { in main()
393 if (cpio->option_pwb) in main()
394 cpio->format = "pwb"; in main()
396 cpio->format = "cpio"; in main()
398 mode_out(cpio); in main()
401 while (*cpio->argv != NULL) { in main()
402 if (archive_match_include_pattern(cpio->matching, in main()
403 *cpio->argv) != ARCHIVE_OK) in main()
405 archive_error_string(cpio->matching)); in main()
406 --cpio->argc; in main()
407 ++cpio->argv; in main()
409 if (cpio->option_list) in main()
410 mode_list(cpio); in main()
412 mode_in(cpio); in main()
415 if (*cpio->argv == NULL || **cpio->argv == '\0') in main()
418 mode_pass(cpio, *cpio->argv); in main()
425 archive_match_free(cpio->matching); in main()
426 free_cache(cpio->uname_cache); in main()
427 free(cpio->uname_override); in main()
428 free_cache(cpio->gname_cache); in main()
429 free(cpio->gname_override); in main()
430 archive_read_close(cpio->archive_read_disk); in main()
431 archive_read_free(cpio->archive_read_disk); in main()
432 free(cpio->destdir); in main()
434 passphrase_free(cpio->ppbuff); in main()
435 return (cpio->return_value); in main()
511 mode_out(struct cpio *cpio) in mode_out() argument
518 if (cpio->option_append) in mode_out()
521 cpio->archive_read_disk = archive_read_disk_new(); in mode_out()
522 if (cpio->archive_read_disk == NULL) in mode_out()
524 if (cpio->option_follow_links) in mode_out()
525 archive_read_disk_set_symlink_logical(cpio->archive_read_disk); in mode_out()
527 archive_read_disk_set_symlink_physical(cpio->archive_read_disk); in mode_out()
528 archive_read_disk_set_standard_lookup(cpio->archive_read_disk); in mode_out()
530 cpio->archive = archive_write_new(); in mode_out()
531 if (cpio->archive == NULL) in mode_out()
533 switch (cpio->compress) { in mode_out()
535 r = archive_write_add_filter_grzip(cpio->archive); in mode_out()
538 r = archive_write_add_filter_xz(cpio->archive); in mode_out()
541 r = archive_write_add_filter_lrzip(cpio->archive); in mode_out()
544 r = archive_write_add_filter_lz4(cpio->archive); in mode_out()
547 r = archive_write_add_filter_lzma(cpio->archive); in mode_out()
550 r = archive_write_add_filter_lzop(cpio->archive); in mode_out()
553 r = archive_write_add_filter_zstd(cpio->archive); in mode_out()
556 r = archive_write_add_filter_bzip2(cpio->archive); in mode_out()
559 r = archive_write_add_filter_gzip(cpio->archive); in mode_out()
562 r = archive_write_add_filter_compress(cpio->archive); in mode_out()
565 r = archive_write_add_filter_none(cpio->archive); in mode_out()
570 switch (cpio->add_filter) { in mode_out()
575 r = archive_write_add_filter_b64encode(cpio->archive); in mode_out()
578 r = archive_write_add_filter_uuencode(cpio->archive); in mode_out()
583 r = archive_write_set_format_by_name(cpio->archive, cpio->format); in mode_out()
585 lafe_errc(1, 0, "%s", archive_error_string(cpio->archive)); in mode_out()
586 archive_write_set_bytes_per_block(cpio->archive, cpio->bytes_per_block); in mode_out()
587 cpio->linkresolver = archive_entry_linkresolver_new(); in mode_out()
588 archive_entry_linkresolver_set_strategy(cpio->linkresolver, in mode_out()
589 archive_format(cpio->archive)); in mode_out()
590 if (cpio->passphrase != NULL) in mode_out()
591 r = archive_write_set_passphrase(cpio->archive, in mode_out()
592 cpio->passphrase); in mode_out()
594 r = archive_write_set_passphrase_callback(cpio->archive, cpio, in mode_out()
597 lafe_errc(1, 0, "%s", archive_error_string(cpio->archive)); in mode_out()
602 r = archive_write_open_filename(cpio->archive, cpio->filename); in mode_out()
604 lafe_errc(1, 0, "%s", archive_error_string(cpio->archive)); in mode_out()
605 lr = lafe_line_reader("-", cpio->option_null); in mode_out()
607 file_to_archive(cpio, p); in mode_out()
615 archive_entry_linkify(cpio->linkresolver, &entry, &spare); in mode_out()
617 entry_to_archive(cpio, entry); in mode_out()
620 archive_entry_linkify(cpio->linkresolver, &entry, &spare); in mode_out()
623 r = archive_write_close(cpio->archive); in mode_out()
624 if (cpio->dot) in mode_out()
627 lafe_errc(1, 0, "%s", archive_error_string(cpio->archive)); in mode_out()
629 if (!cpio->quiet) { in mode_out()
631 (archive_filter_bytes(cpio->archive, 0) + 511) in mode_out()
636 archive_write_free(cpio->archive); in mode_out()
637 archive_entry_linkresolver_free(cpio->linkresolver); in mode_out()
689 file_to_archive(struct cpio *cpio, const char *srcpath) in file_to_archive() argument
704 r = archive_read_disk_entry_from_file(cpio->archive_read_disk, in file_to_archive()
708 archive_error_string(cpio->archive_read_disk)); in file_to_archive()
711 archive_error_string(cpio->archive_read_disk)); in file_to_archive()
714 cpio->return_value = 1; in file_to_archive()
718 if (cpio->uid_override >= 0) in file_to_archive()
719 archive_entry_set_uid(entry, cpio->uid_override); in file_to_archive()
720 if (cpio->gname_override != NULL) in file_to_archive()
721 archive_entry_set_uname(entry, cpio->uname_override); in file_to_archive()
722 if (cpio->gid_override >= 0) in file_to_archive()
723 archive_entry_set_gid(entry, cpio->gid_override); in file_to_archive()
724 if (cpio->gname_override != NULL) in file_to_archive()
725 archive_entry_set_gname(entry, cpio->gname_override); in file_to_archive()
734 if (cpio->destdir) { in file_to_archive()
735 len = cpio->destdir_len + strlen(srcpath) + 8; in file_to_archive()
736 if (len >= cpio->pass_destpath_alloc) { in file_to_archive()
737 while (len >= cpio->pass_destpath_alloc) { in file_to_archive()
738 cpio->pass_destpath_alloc += 512; in file_to_archive()
739 cpio->pass_destpath_alloc *= 2; in file_to_archive()
741 free(cpio->pass_destpath); in file_to_archive()
742 cpio->pass_destpath = malloc(cpio->pass_destpath_alloc); in file_to_archive()
743 if (cpio->pass_destpath == NULL) in file_to_archive()
747 strcpy(cpio->pass_destpath, cpio->destdir); in file_to_archive()
748 strcat(cpio->pass_destpath, remove_leading_slash(srcpath)); in file_to_archive()
749 destpath = cpio->pass_destpath; in file_to_archive()
751 if (cpio->option_rename) in file_to_archive()
763 if (cpio->linkresolver != NULL in file_to_archive()
765 archive_entry_linkify(cpio->linkresolver, &entry, &spare); in file_to_archive()
769 r = entry_to_archive(cpio, entry); in file_to_archive()
773 r = entry_to_archive(cpio, spare); in file_to_archive()
781 entry_to_archive(struct cpio *cpio, struct archive_entry *entry) in entry_to_archive() argument
790 if (cpio->verbose) in entry_to_archive()
792 if (cpio->dot) in entry_to_archive()
804 if (cpio->option_link in entry_to_archive()
818 r = archive_write_header(cpio->archive, t); in entry_to_archive()
821 lafe_warnc(archive_errno(cpio->archive), in entry_to_archive()
822 "%s", archive_error_string(cpio->archive)); in entry_to_archive()
826 if (r != ARCHIVE_OK && archive_errno(cpio->archive) == EXDEV) { in entry_to_archive()
852 r = archive_write_header(cpio->archive, entry); in entry_to_archive()
855 lafe_warnc(archive_errno(cpio->archive), in entry_to_archive()
858 archive_error_string(cpio->archive)); in entry_to_archive()
864 bytes_read = read(fd, cpio->buff, (unsigned)cpio->buff_size); in entry_to_archive()
867 bytes_write = archive_write_data(cpio->archive, in entry_to_archive()
868 cpio->buff, bytes_read); in entry_to_archive()
870 lafe_errc(1, archive_errno(cpio->archive), in entry_to_archive()
871 "%s", archive_error_string(cpio->archive)); in entry_to_archive()
877 bytes_read = read(fd, cpio->buff, in entry_to_archive()
878 (unsigned)cpio->buff_size); in entry_to_archive()
882 fd = restore_time(cpio, entry, srcpath, fd); in entry_to_archive()
885 if (cpio->verbose) in entry_to_archive()
893 restore_time(struct cpio *cpio, struct archive_entry *entry, in restore_time() argument
899 (void)cpio; /* UNUSED */ in restore_time()
914 if (!cpio->option_atime_restore) in restore_time()
949 mode_in(struct cpio *cpio) in mode_in() argument
960 r = archive_write_disk_set_options(ext, cpio->extract_flags); in mode_in()
968 if (cpio->option_pwb) in mode_in()
970 if (cpio->passphrase != NULL) in mode_in()
971 r = archive_read_add_passphrase(a, cpio->passphrase); in mode_in()
973 r = archive_read_set_passphrase_callback(a, cpio, in mode_in()
978 if (archive_read_open_filename(a, cpio->filename, in mode_in()
979 cpio->bytes_per_block)) in mode_in()
990 if (archive_match_path_excluded(cpio->matching, entry)) in mode_in()
992 if (cpio->option_rename) { in mode_in()
999 if (cpio->verbose) in mode_in()
1001 if (cpio->dot) in mode_in()
1003 if (cpio->uid_override >= 0) in mode_in()
1004 archive_entry_set_uid(entry, cpio->uid_override); in mode_in()
1005 if (cpio->uname_override != NULL) in mode_in()
1006 archive_entry_set_uname(entry, cpio->uname_override); in mode_in()
1007 if (cpio->gid_override >= 0) in mode_in()
1008 archive_entry_set_gid(entry, cpio->gid_override); in mode_in()
1009 if (cpio->gname_override != NULL) in mode_in()
1010 archive_entry_set_gname(entry, cpio->gname_override); in mode_in()
1016 cpio->return_value = 1; in mode_in()
1021 cpio->return_value = 1; in mode_in()
1025 if (cpio->dot) in mode_in()
1032 if (!cpio->quiet) { in mode_in()
1040 exit(cpio->return_value); in mode_in()
1074 mode_list(struct cpio *cpio) in mode_list() argument
1085 if (cpio->option_pwb) in mode_list()
1087 if (cpio->passphrase != NULL) in mode_list()
1088 r = archive_read_add_passphrase(a, cpio->passphrase); in mode_list()
1090 r = archive_read_set_passphrase_callback(a, cpio, in mode_list()
1095 if (archive_read_open_filename(a, cpio->filename, in mode_list()
1096 cpio->bytes_per_block)) in mode_list()
1107 if (archive_match_path_excluded(cpio->matching, entry)) in mode_list()
1109 if (cpio->verbose) in mode_list()
1110 list_item_verbose(cpio, entry); in mode_list()
1117 if (!cpio->quiet) { in mode_list()
1136 list_item_verbose(struct cpio *cpio, struct archive_entry *entry) in list_item_verbose() argument
1154 if (cpio->option_numeric_uid_gid) { in list_item_verbose()
1164 uname = lookup_uname(cpio, (uid_t)archive_entry_uid(entry)); in list_item_verbose()
1168 gname = lookup_gname(cpio, (uid_t)archive_entry_gid(entry)); in list_item_verbose()
1187 fmt = cpio->day_first ? "%d %b %Y" : "%b %d %Y"; in list_item_verbose()
1189 fmt = cpio->day_first ? "%d %b %H:%M" : "%b %d %H:%M"; in list_item_verbose()
1193 fmt = cpio->day_first ? "%e %b %Y" : "%b %e %Y"; in list_item_verbose()
1195 fmt = cpio->day_first ? "%e %b %H:%M" : "%b %e %H:%M"; in list_item_verbose()
1224 mode_pass(struct cpio *cpio, const char *destdir) in mode_pass() argument
1231 cpio->destdir_len = strlen(destdir); in mode_pass()
1232 cpio->destdir = malloc(cpio->destdir_len + 8); in mode_pass()
1233 memcpy(cpio->destdir, destdir, cpio->destdir_len); in mode_pass()
1234 if (cpio->destdir_len == 0 || destdir[cpio->destdir_len - 1] != '/') in mode_pass()
1235 cpio->destdir[cpio->destdir_len++] = '/'; in mode_pass()
1236 cpio->destdir[cpio->destdir_len] = '\0'; in mode_pass()
1238 cpio->archive = archive_write_disk_new(); in mode_pass()
1239 if (cpio->archive == NULL) in mode_pass()
1241 r = archive_write_disk_set_options(cpio->archive, cpio->extract_flags); in mode_pass()
1243 lafe_errc(1, 0, "%s", archive_error_string(cpio->archive)); in mode_pass()
1244 cpio->linkresolver = archive_entry_linkresolver_new(); in mode_pass()
1245 archive_write_disk_set_standard_lookup(cpio->archive); in mode_pass()
1247 cpio->archive_read_disk = archive_read_disk_new(); in mode_pass()
1248 if (cpio->archive_read_disk == NULL) in mode_pass()
1250 if (cpio->option_follow_links) in mode_pass()
1251 archive_read_disk_set_symlink_logical(cpio->archive_read_disk); in mode_pass()
1253 archive_read_disk_set_symlink_physical(cpio->archive_read_disk); in mode_pass()
1254 archive_read_disk_set_standard_lookup(cpio->archive_read_disk); in mode_pass()
1256 lr = lafe_line_reader("-", cpio->option_null); in mode_pass()
1258 file_to_archive(cpio, p); in mode_pass()
1261 archive_entry_linkresolver_free(cpio->linkresolver); in mode_pass()
1262 r = archive_write_close(cpio->archive); in mode_pass()
1263 if (cpio->dot) in mode_pass()
1266 lafe_errc(1, 0, "%s", archive_error_string(cpio->archive)); in mode_pass()
1268 if (!cpio->quiet) { in mode_pass()
1270 (archive_filter_bytes(cpio->archive, 0) + 511) in mode_pass()
1276 archive_write_free(cpio->archive); in mode_pass()
1277 free(cpio->pass_destpath); in mode_pass()
1353 lookup_name(struct cpio *cpio, struct name_cache **name_cache_variable, in lookup_name() argument
1354 int (*lookup_fn)(struct cpio *, const char **, id_t), id_t id) in lookup_name() argument
1382 if (lookup_fn(cpio, &name, id)) { in lookup_name()
1403 lookup_uname(struct cpio *cpio, uid_t uid) in lookup_uname() argument
1405 return (lookup_name(cpio, &cpio->uname_cache, in lookup_uname()
1410 lookup_uname_helper(struct cpio *cpio, const char **name, id_t id) in lookup_uname_helper() argument
1414 (void)cpio; /* UNUSED */ in lookup_uname_helper()
1430 lookup_gname(struct cpio *cpio, gid_t gid) in lookup_gname() argument
1432 return (lookup_name(cpio, &cpio->gname_cache, in lookup_gname()
1437 lookup_gname_helper(struct cpio *cpio, const char **name, id_t id) in lookup_gname_helper() argument
1441 (void)cpio; /* UNUSED */ in lookup_gname_helper()
1485 struct cpio *cpio = (struct cpio *)_client_data; in passphrase_callback() local
1488 if (cpio->ppbuff == NULL) { in passphrase_callback()
1489 cpio->ppbuff = malloc(PPBUFF_SIZE); in passphrase_callback()
1490 if (cpio->ppbuff == NULL) in passphrase_callback()
1494 cpio->ppbuff, PPBUFF_SIZE); in passphrase_callback()