Lines Matching refs:tar

0 /* 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-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)z(gzip)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):[!txc]", TOYFLAG_USR|TOYFLAG_BIN))
13 bool "tar"
16 usage: tar -[cxtzhmvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR]
18 Create, extract, or list files from a tar file
125 static void write_longname(struct archive_handler *tar, char *name, char type)
146 writeall(tar->src_fd, (void*) &tmp, sizeof(tmp));
148 writeall(tar->src_fd, name, sz);
149 if (sz%512) writeall(tar->src_fd, buf, (512-(sz%512)));
161 static void add_file(struct archive_handler *tar, char **nam, struct stat *st)
205 write_longname(tar, hname, 'K'); //write longname LINK
223 write_longname(tar, hname, 'K'); //write longname LINK
238 write_longname(tar, hname, 'L'); //write longname NAME
252 writeall(tar->src_fd, (void*)&hdr, 512);
260 copy_in_out(fd, tar->src_fd, st->st_size);
261 if (st->st_size%512) writeall(tar->src_fd, buf, (512-(st->st_size%512)));
300 dup2(tar_hdl->src_fd, 1); //write to tar fd
308 static void extract_to_stdout(struct archive_handler *tar)
310 struct file_header *file_hdr = &tar->file_hdr;
312 copy_in_out(tar->src_fd, 0, file_hdr->size);
313 tar->offset += file_hdr->size;
316 static void extract_to_command(struct archive_handler *tar)
320 struct file_header *file_hdr = &tar->file_hdr;
352 copy_in_out(tar->src_fd, pipefd[1], file_hdr->size);
353 tar->offset += file_hdr->size;
357 xprintf("tar : %d: child returned %d\n", cpid, WTERMSIG(status));
361 static void extract_to_disk(struct archive_handler *tar)
366 struct file_header *file_hdr = &tar->file_hdr;
421 copy_in_out(tar->src_fd, dst_fd, file_hdr->size);
422 tar->offset += file_hdr->size;
522 static char *process_extended_hdr(struct archive_handler *tar, int size)
526 if (readall(tar->src_fd, buf, size) != size) error_exit("short read");
528 tar->offset += size;
557 static void tar_skip(struct archive_handler *tar, int sz)
561 while ((x = lskip(tar->src_fd, sz))) {
562 tar->offset += sz - x;
565 tar->offset += sz;
570 struct tar_hdr tar;
583 i = readall(tar_hdl->src_fd, &tar, 512);
590 if (!tar.name[0]) {
591 if (e) return; //end of tar 2 empty blocks
595 if (strncmp(tar.magic, "ustar", 5)) {
598 gzMagic = (unsigned char*)&tar;
605 error_exit("invalid tar format");
608 for (j = 0; j<148; j++) cksum += (unsigned int)((char*)&tar)[j];
609 for (j = 156; j<500; j++) cksum += (unsigned int)((char*)&tar)[j];
613 if (cksum != otoi(tar.chksum, sizeof(tar.chksum))) error_exit("wrong cksum");
617 file_hdr->mode = otoi(tar.mode, sizeof(tar.mode));
618 file_hdr->uid = otoi(tar.uid, sizeof(tar.uid));
619 file_hdr->gid = otoi(tar.gid, sizeof(tar.gid));
620 file_hdr->size = otoi(tar.size, sizeof(tar.size));
621 file_hdr->mtime = otoi(tar.mtime, sizeof(tar.mtime));
622 file_hdr->uname = xstrdup(tar.uname);
623 file_hdr->gname = xstrdup(tar.gname);
624 maj = otoi(tar.major, sizeof(tar.major));
625 min = otoi(tar.minor, sizeof(tar.minor));
628 if (tar.type <= '7') {
629 if (tar.link[0]) {
630 sz = sizeof(tar.link);
632 memcpy(file_hdr->link_target, tar.link, sz);
637 if (tar.prefix[0]) {
638 memcpy(file_hdr->name, tar.prefix, sizeof(tar.prefix));
643 memcpy(file_hdr->name + sz, tar.name, sizeof(tar.name));
647 switch (tar.type) {
786 //create the tar here.