Lines Matching refs:hdr
78 } hdr;
179 struct tar_hdr hdr;
226 memset(&hdr, 0, sizeof(hdr));
227 strncpy(hdr.name, hname, sizeof(hdr.name));
228 ITOO(hdr.mode, st->st_mode &07777);
229 ITOO(hdr.uid, st->st_uid);
230 ITOO(hdr.gid, st->st_gid);
231 ITOO(hdr.size, 0); //set size later
232 ITOO(hdr.mtime, st->st_mtime);
233 strcpy(hdr.magic, "ustar ");
266 hdr.type = '0'+i;
271 if (strlen(lnk) > sizeof(hdr.link)) write_longname(lnk, 'K');
272 strncpy(hdr.link, lnk, sizeof(hdr.link));
275 hdr.type = '0';
276 ITOO(hdr.size, st->st_size);
277 } else if (S_ISDIR(st->st_mode)) hdr.type = '5';
278 else if (S_ISFIFO(st->st_mode)) hdr.type = '6';
280 hdr.type = (S_ISCHR(st->st_mode))?'3':'4';
281 ITOO(hdr.major, dev_major(st->st_rdev));
282 ITOO(hdr.minor, dev_minor(st->st_rdev));
288 if (strlen(hname) > sizeof(hdr.name)) write_longname(hname, 'L');
292 strncpy(hdr.uname, TT.owner ? TT.owner : pw->pw_name, sizeof(hdr.uname));
294 strncpy(hdr.gname, TT.group ? TT.group : gr->gr_name, sizeof(hdr.gname));
298 if (hdr.type == '0') {
323 hdr.type = 'S';
324 lnk = (char *)&hdr;
332 ITOO(hdr.size, len);
338 itoo(hdr.chksum, sizeof(hdr.chksum)-1, tar_cksum(&hdr));
339 hdr.chksum[7] = ' ';
344 xwrite(TT.fd, &hdr, 512);
364 if (hdr.type == '0' || hdr.type == 'S') {
365 if (hdr.type == '0') xsendfile_pad(fd, TT.fd, st->st_size);
448 if (len+used>TT.hdr.size) error_exit("sparse overflow");
449 } else len = TT.hdr.size;
456 skippy(TT.hdr.size-used);
467 char *name = TT.hdr.name;
468 int ala = TT.hdr.mode;
471 if (S_ISREG(ala) && !TT.hdr.link_target) skippy(TT.hdr.size);
486 if (TT.hdr.link_target) {
487 if (link(TT.hdr.link_target, name))
488 return perror_msg("can't link '%s' -> '%s'", name, TT.hdr.link_target);
494 else skippy(TT.hdr.size);
498 return perror_msg("%s: can't create", TT.hdr.name);
500 if (symlink(TT.hdr.link_target, TT.hdr.name))
501 return perror_msg("can't link '%s' -> '%s'", name, TT.hdr.link_target);
502 } else if (mknod(name, ala, TT.hdr.device))
507 int u = TT.hdr.uid, g = TT.hdr.gid;
509 if (TT.owner) TT.hdr.uid = TT.ouid;
510 else if (!FLAG(numeric_owner) && *TT.hdr.uname) {
511 struct passwd *pw = getpwnam(TT.hdr.uname);
512 if (pw && (TT.owner || !FLAG(numeric_owner))) TT.hdr.uid = pw->pw_uid;
515 if (TT.group) TT.hdr.gid = TT.ggid;
516 else if (!FLAG(numeric_owner) && *TT.hdr.uname) {
517 struct group *gr = getgrnam(TT.hdr.gname);
518 if (gr) TT.hdr.gid = gr->gr_gid;
524 if (!S_ISLNK(ala)) chmod(TT.hdr.name, FLAG(p) ? ala : ala&0777);
535 *(long long *)sl->str = TT.hdr.mtime;
539 } else wsettime(TT.hdr.name, TT.hdr.mtime);
557 if (TT.hdr.size%512) skippy(512-TT.hdr.size%512);
566 TT.hdr.size = 0;
574 TT.hdr.size = OTOI(tar.size);
581 if (tar.type == 'K') alloread(&TT.hdr.link_target, TT.hdr.size);
582 else if (tar.type == 'L') alloread(&TT.hdr.name, TT.hdr.size);
588 alloread(&buf, TT.hdr.size);
589 for (p = buf; (p-buf)<TT.hdr.size; p += len) {
591 if (i<1 || len<4 || len>TT.hdr.size) {
597 TT.hdr.name = xstrdup(p+n);
604 } else skippy(TT.hdr.size);
639 TT.hdr.ssize = TT.sparse[2*TT.sparselen-1]+TT.sparse[2*TT.sparselen-2];
642 TT.hdr.ssize = TT.hdr.size;
646 TT.hdr.mode = OTOI(tar.mode)&0xfff;
647 if (tar.type == 'S' || !tar.type) TT.hdr.mode |= 0x8000;
648 else TT.hdr.mode |= (char []){8,8,10,2,6,4,1,8}[tar.type-'0']<<12;
649 TT.hdr.uid = OTOI(tar.uid);
650 TT.hdr.gid = OTOI(tar.gid);
651 TT.hdr.mtime = OTOI(tar.mtime);
654 TT.hdr.device = dev_makedev(maj, min);
655 TT.hdr.uname = xstrndup(TT.owner ? TT.owner : tar.uname, sizeof(tar.uname));
656 TT.hdr.gname = xstrndup(TT.group ? TT.group : tar.gname, sizeof(tar.gname));
658 if (TT.owner) TT.hdr.uid = TT.ouid;
660 struct passwd *pw = getpwnam(TT.hdr.uname);
661 if (pw && (TT.owner || !FLAG(numeric_owner))) TT.hdr.uid = pw->pw_uid;
664 if (TT.group) TT.hdr.gid = TT.ggid;
666 struct group *gr = getgrnam(TT.hdr.gname);
667 if (gr) TT.hdr.gid = gr->gr_gid;
670 if (!TT.hdr.link_target && *tar.link)
671 TT.hdr.link_target = xstrndup(tar.link, sizeof(tar.link));
672 if (!TT.hdr.name) {
675 TT.hdr.name = xmprintf("%.*s%s%.*s", i, tar.prefix,
681 if (S_ISREG(TT.hdr.mode) && (s = strend(TT.hdr.name, "/"))) {
683 TT.hdr.mode = (TT.hdr.mode & ~S_IFMT) | S_IFDIR;
687 if ((TT.hdr.link_target && *TT.hdr.link_target)
688 || (tar.type && !S_ISREG(TT.hdr.mode)))
689 TT.hdr.size = 0;
694 if ((delete = filter(TT.incl, TT.hdr.name)) && TT.incl != TT.seen) {
708 if (filter(TT.excl, TT.hdr.name) || (TT.incl && !delete))
709 skippy(TT.hdr.size);
712 struct tm *lc = localtime(TT.mtime ? &TT.mtt : &TT.hdr.mtime);
715 mode_to_string(TT.hdr.mode, perm);
717 sprintf(perm, "%u", TT.hdr.uid);
718 sprintf(gname, "%u", TT.hdr.gid);
719 printf(" %s/%s ", *TT.hdr.uname ? TT.hdr.uname : perm,
720 *TT.hdr.gname ? TT.hdr.gname : gname);
722 else printf("%9lld", TT.hdr.ssize);
727 printf("%s", TT.hdr.name);
728 if (TT.hdr.link_target) printf(" -> %s", TT.hdr.link_target);
730 skippy(TT.hdr.size);
732 if (FLAG(v)) printf("%s\n", TT.hdr.name);
735 if (S_ISREG(TT.hdr.mode)) {
739 xsetenv(xmprintf("TAR_MODE=%o", TT.hdr.mode), 0);
740 xsetenv(xmprintf("TAR_SIZE=%lld", TT.hdr.ssize), 0);
741 xsetenv("TAR_FILENAME", TT.hdr.name);
742 xsetenv("TAR_UNAME", TT.hdr.uname);
743 xsetenv("TAR_GNAME", TT.hdr.gname);
744 xsetenv(xmprintf("TAR_MTIME=%llo", (long long)TT.hdr.mtime), 0);
745 xsetenv(xmprintf("TAR_UID=%o", TT.hdr.uid), 0);
746 xsetenv(xmprintf("TAR_GID=%o", TT.hdr.gid), 0);
757 free(TT.hdr.name);
758 free(TT.hdr.link_target);
759 free(TT.hdr.uname);
760 free(TT.hdr.gname);
761 TT.hdr.name = TT.hdr.link_target = 0;
835 char *hdr = 0;
839 len = xread(TT.fd, hdr = toybuf+sizeof(toybuf)-512, 512);
840 if (len!=512 || !is_tar_header(hdr)) {
842 if (SWAP_BE16(*(short *)hdr)==0x1f8b) toys.optflags |= FLAG_z;
843 else if (!memcmp(hdr, "BZh", 3)) toys.optflags |= FLAG_j;
844 else if (peek_be(hdr, 7) == 0xfd377a585a0000) toys.optflags |= FLAG_J;
848 if (!lseek(TT.fd, -len, SEEK_CUR)) hdr = 0;
853 int pipefd[2] = {hdr ? -1 : TT.fd, -1}, i, pid;
862 if (!hdr) {
885 xwrite(0, hdr, len);
897 unpack_tar(hdr);