• Home
  • Raw
  • Download

Lines Matching full:tar

1 /* tar.c - create/extract archives
8 * http://www.gnu.org/software/tar/manual/html_node/Writing-to-an-External-Program.html
10 USE_TAR(NEWTOY(tar, "&(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(to-co…
12 config TAR
13 bool "tar"
16 usage: tar -[cxtjzhmvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR]
18 Create, extract, or list files from a tar file
126 static void write_longname(struct archive_handler *tar, char *name, char type) in write_longname() argument
147 writeall(tar->src_fd, (void*) &tmp, sizeof(tmp)); in write_longname()
149 writeall(tar->src_fd, name, sz); in write_longname()
150 if (sz%512) writeall(tar->src_fd, buf, (512-(sz%512))); in write_longname()
162 static void add_file(struct archive_handler *tar, char **nam, struct stat *st) in add_file() argument
206 write_longname(tar, hname, 'K'); //write longname LINK in add_file()
224 write_longname(tar, hname, 'K'); //write longname LINK in add_file()
239 write_longname(tar, hname, 'L'); //write longname NAME in add_file()
253 writeall(tar->src_fd, (void*)&hdr, 512); in add_file()
261 copy_in_out(fd, tar->src_fd, st->st_size); in add_file()
262 if (st->st_size%512) writeall(tar->src_fd, buf, (512-(st->st_size%512))); in add_file()
301 dup2(tar_hdl->src_fd, 1); //write to tar fd in compress_stream()
309 static void extract_to_stdout(struct archive_handler *tar) in extract_to_stdout() argument
311 struct file_header *file_hdr = &tar->file_hdr; in extract_to_stdout()
313 copy_in_out(tar->src_fd, 0, file_hdr->size); in extract_to_stdout()
314 tar->offset += file_hdr->size; in extract_to_stdout()
317 static void extract_to_command(struct archive_handler *tar) in extract_to_command() argument
321 struct file_header *file_hdr = &tar->file_hdr; in extract_to_command()
353 copy_in_out(tar->src_fd, pipefd[1], file_hdr->size); in extract_to_command()
354 tar->offset += file_hdr->size; in extract_to_command()
358 xprintf("tar : %d: child returned %d\n", cpid, WTERMSIG(status)); in extract_to_command()
362 static void extract_to_disk(struct archive_handler *tar) in extract_to_disk() argument
367 struct file_header *file_hdr = &tar->file_hdr; in extract_to_disk()
430 copy_in_out(tar->src_fd, dst_fd, file_hdr->size); in extract_to_disk()
431 tar->offset += file_hdr->size; in extract_to_disk()
532 static char *process_extended_hdr(struct archive_handler *tar, int size) in process_extended_hdr() argument
536 if (readall(tar->src_fd, buf, size) != size) error_exit("short read"); in process_extended_hdr()
538 tar->offset += size; in process_extended_hdr()
567 static void tar_skip(struct archive_handler *tar, int sz) in tar_skip() argument
571 while ((x = lskip(tar->src_fd, sz))) { in tar_skip()
572 tar->offset += sz - x; in tar_skip()
575 tar->offset += sz; in tar_skip()
580 struct tar_hdr tar; in unpack_tar() local
592 i = readall(tar_hdl->src_fd, &tar, 512); in unpack_tar()
599 if (!tar.name[0]) { in unpack_tar()
600 if (e) return; //end of tar 2 empty blocks in unpack_tar()
604 if (strncmp(tar.magic, "ustar", 5)) { in unpack_tar()
607 if ((!strncmp(tar.name, "\x1f\x8b", 2) || !strncmp(tar.name, "BZh", 3)) in unpack_tar()
609 toys.optflags |= (*tar.name == 'B') ? FLAG_j : FLAG_z; in unpack_tar()
614 error_exit("invalid tar format"); in unpack_tar()
617 for (j = 0; j<148; j++) cksum += (unsigned int)((char*)&tar)[j]; in unpack_tar()
618 for (j = 156; j<500; j++) cksum += (unsigned int)((char*)&tar)[j]; in unpack_tar()
622 if (cksum != otoi(tar.chksum, sizeof(tar.chksum))) error_exit("wrong cksum"); in unpack_tar()
626 file_hdr->mode = otoi(tar.mode, sizeof(tar.mode)); in unpack_tar()
627 file_hdr->uid = otoi(tar.uid, sizeof(tar.uid)); in unpack_tar()
628 file_hdr->gid = otoi(tar.gid, sizeof(tar.gid)); in unpack_tar()
629 file_hdr->size = otoi(tar.size, sizeof(tar.size)); in unpack_tar()
630 file_hdr->mtime = otoi(tar.mtime, sizeof(tar.mtime)); in unpack_tar()
631 file_hdr->uname = xstrdup(tar.uname); in unpack_tar()
632 file_hdr->gname = xstrdup(tar.gname); in unpack_tar()
633 maj = otoi(tar.major, sizeof(tar.major)); in unpack_tar()
634 min = otoi(tar.minor, sizeof(tar.minor)); in unpack_tar()
637 if (tar.type <= '7') { in unpack_tar()
638 if (tar.link[0]) { in unpack_tar()
639 sz = sizeof(tar.link); in unpack_tar()
641 memcpy(file_hdr->link_target, tar.link, sz); in unpack_tar()
646 if (tar.prefix[0]) { in unpack_tar()
647 memcpy(file_hdr->name, tar.prefix, sizeof(tar.prefix)); in unpack_tar()
652 memcpy(file_hdr->name + sz, tar.name, sizeof(tar.name)); in unpack_tar()
656 switch (tar.type) { in unpack_tar()
795 //create the tar here. in tar_main()