Lines Matching refs:TT
147 xwrite(TT.fd, &tmp, 512); in write_longname()
148 xwrite(TT.fd, name, sz); in write_longname()
149 if (sz%512) xwrite(TT.fd, toybuf, 512-(sz%512)); in write_longname()
166 if (lskip(TT.fd, len)) perror_exit("EOF"); in skippy()
177 xreadall(TT.fd, *b, len); in alloread()
192 if (TT.adev == st->st_dev && TT.aino == st->st_ino) { in add_to_tar()
202 if (filter(TT.excl, lnk)) { in add_to_tar()
225 if (TT.warn && hname != name) { in add_to_tar()
228 TT.warn = 0; in add_to_tar()
231 if (TT.owner) st->st_uid = TT.ouid; in add_to_tar()
232 if (TT.group) st->st_gid = TT.ggid; in add_to_tar()
233 if (TT.mode) st->st_mode = string_to_mode(TT.mode, st->st_mode); in add_to_tar()
234 if (TT.mtime) st->st_mtime = TT.mtt; in add_to_tar()
250 for (i = 0; i<TT.hlc; i++) { in add_to_tar()
251 if (st->st_ino == TT.hlx[i].ino && st->st_dev == TT.hlx[i].dev) in add_to_tar()
254 if (i != TT.hlc) { in add_to_tar()
255 lnk = TT.hlx[i].arg; in add_to_tar()
259 if (!(TT.hlc&255)) in add_to_tar()
260 TT.hlx = xrealloc(TT.hlx, sizeof(*TT.hlx)*(TT.hlc+256)); in add_to_tar()
261 TT.hlx[TT.hlc].arg = xstrdup(hname); in add_to_tar()
262 TT.hlx[TT.hlc].ino = st->st_ino; in add_to_tar()
263 TT.hlx[TT.hlc].dev = st->st_dev; in add_to_tar()
264 TT.hlc++; in add_to_tar()
296 if ((TT.owner || (pw = bufgetpwuid(st->st_uid))) && in add_to_tar()
298 strncpy(hdr.uname, TT.owner ? TT.owner : pw->pw_name, sizeof(hdr.uname)); in add_to_tar()
299 if ((TT.group || (gr = bufgetgrgid(st->st_gid))) && in add_to_tar()
301 strncpy(hdr.gname, TT.group ? TT.group : gr->gr_name, sizeof(hdr.gname)); in add_to_tar()
304 TT.sparselen = 0; in add_to_tar()
317 if (!(TT.sparselen&511)) in add_to_tar()
318 TT.sparse = xrealloc(TT.sparse, (TT.sparselen+514)*sizeof(long long)); in add_to_tar()
320 TT.sparse[TT.sparselen++] = ld; in add_to_tar()
321 len += TT.sparse[TT.sparselen++] = lo-ld; in add_to_tar()
327 if (TT.sparselen>2) { in add_to_tar()
328 TT.sparse[TT.sparselen++] = st->st_size; in add_to_tar()
329 TT.sparse[TT.sparselen++] = 0; in add_to_tar()
332 for (i = 0; i<TT.sparselen && i<8; i++) in add_to_tar()
333 itoo(lnk+386+12*i, 12, TT.sparse[i]); in add_to_tar()
337 if (TT.sparselen>8) lnk[482] = 1; in add_to_tar()
340 } else TT.sparselen = 0; in add_to_tar()
348 if (FLAG(v)) dprintf((TT.fd==1) ? 2 : 1, "%s\n", hname); in add_to_tar()
351 xwrite(TT.fd, &hdr, 512); in add_to_tar()
352 if (TT.sparselen>8) { in add_to_tar()
359 if (!j || i==TT.sparselen) { in add_to_tar()
361 if (i!=TT.sparselen) buf[504] = 1; in add_to_tar()
362 xwrite(TT.fd, buf, 512); in add_to_tar()
364 if (i==TT.sparselen) break; in add_to_tar()
367 itoo(buf+12*j, 12, TT.sparse[i]); in add_to_tar()
370 TT.sparselen >>= 1; in add_to_tar()
372 if (hdr.type == '0') xsendfile_pad(fd, TT.fd, st->st_size); in add_to_tar()
373 else for (i = 0; i<TT.sparselen; i++) { in add_to_tar()
374 if (TT.sparse[i*2] != lseek(fd, TT.sparse[i*2], SEEK_SET)) in add_to_tar()
375 perror_msg("%s: seek %lld", name, TT.sparse[i*2]); in add_to_tar()
376 xsendfile_pad(fd, TT.fd, TT.sparse[i*2+1]); in add_to_tar()
378 if (st->st_size%512) writeall(TT.fd, toybuf, (512-(st->st_size%512))); in add_to_tar()
407 if (TT.cwd[1] && (!strstart(&ss, TT.cwd) || (*ss && *ss!='/'))) { in dirflush()
408 error_msg("'%s' %s not under '%s'", name, s, TT.cwd); in dirflush()
416 free(TT.cwd); in dirflush()
417 TT.cwd = strdup(s); in dirflush()
426 while (TT.dirs) { in dirflush()
431 wsettime(TT.dirs->str+sizeof(long long), *(long long *)TT.dirs->str); in dirflush()
432 free(llist_pop(&TT.dirs)); in dirflush()
447 if (TT.sparselen) { in sendfile_sparse()
449 if (-1 == lseek(fd, len = TT.sparse[i*2], SEEK_SET)) { in sendfile_sparse()
459 if (!(len = TT.sparse[i*2+1]) && ftruncate(fd, sent+len)) in sendfile_sparse()
462 if (len+used>TT.hdr.size) error_exit("sparse overflow"); in sendfile_sparse()
463 } else len = TT.hdr.size; in sendfile_sparse()
465 len -= sendfile_len(TT.fd, fd, len, &sent); in sendfile_sparse()
470 skippy(TT.hdr.size-used); in sendfile_sparse()
474 } while (++i<TT.sparselen); in sendfile_sparse()
481 char *name = TT.hdr.name; in extract_to_disk()
482 int ala = TT.hdr.mode; in extract_to_disk()
485 if (S_ISREG(ala) && !TT.hdr.link_target) skippy(TT.hdr.size); in extract_to_disk()
502 if (TT.hdr.link_target) { in extract_to_disk()
503 if (link(TT.hdr.link_target, name)) in extract_to_disk()
504 return perror_msg("can't link '%s' -> '%s'", name, TT.hdr.link_target); in extract_to_disk()
511 else skippy(TT.hdr.size); in extract_to_disk()
515 return perror_msg("%s: can't create", TT.hdr.name); in extract_to_disk()
517 if (symlink(TT.hdr.link_target, TT.hdr.name)) in extract_to_disk()
518 return perror_msg("can't link '%s' -> '%s'", name, TT.hdr.link_target); in extract_to_disk()
519 } else if (mknod(name, ala, TT.hdr.device)) in extract_to_disk()
524 int u = TT.hdr.uid, g = TT.hdr.gid; in extract_to_disk()
526 if (TT.owner) TT.hdr.uid = TT.ouid; in extract_to_disk()
527 else if (!FLAG(numeric_owner) && *TT.hdr.uname) { in extract_to_disk()
528 struct passwd *pw = getpwnam(TT.hdr.uname); in extract_to_disk()
529 if (pw && (TT.owner || !FLAG(numeric_owner))) TT.hdr.uid = pw->pw_uid; in extract_to_disk()
532 if (TT.group) TT.hdr.gid = TT.ggid; in extract_to_disk()
533 else if (!FLAG(numeric_owner) && *TT.hdr.uname) { in extract_to_disk()
534 struct group *gr = getgrnam(TT.hdr.gname); in extract_to_disk()
535 if (gr) TT.hdr.gid = gr->gr_gid; in extract_to_disk()
541 if (!S_ISLNK(ala)) chmod(TT.hdr.name, FLAG(p) ? ala : ala&0777); in extract_to_disk()
552 *(long long *)sl->str = TT.hdr.mtime; in extract_to_disk()
554 sl->next = TT.dirs; in extract_to_disk()
555 TT.dirs = sl; in extract_to_disk()
556 } else wsettime(TT.hdr.name, TT.hdr.mtime); in extract_to_disk()
574 if (TT.hdr.size%512) skippy(512-TT.hdr.size%512); in unpack_tar()
575 i = readall(TT.fd, &tar, 512); in unpack_tar()
583 TT.hdr.size = 0; in unpack_tar()
591 TT.hdr.size = OTOI(tar.size); in unpack_tar()
598 if (tar.type == 'K') alloread(&TT.hdr.link_target, TT.hdr.size); in unpack_tar()
599 else if (tar.type == 'L') alloread(&TT.hdr.name, TT.hdr.size); in unpack_tar()
605 alloread(&buf, TT.hdr.size); in unpack_tar()
606 for (p = buf; (p-buf)<TT.hdr.size; p += len) { in unpack_tar()
608 if (i<1 || len<4 || len>TT.hdr.size) { in unpack_tar()
614 TT.hdr.name = xstrdup(p+n); in unpack_tar()
621 } else skippy(TT.hdr.size); in unpack_tar()
633 TT.sparselen = 0; in unpack_tar()
638 if (!(TT.sparselen&511)) in unpack_tar()
639 TT.sparse = xrealloc(TT.sparse, (TT.sparselen+512)*sizeof(long long)); in unpack_tar()
644 xreadall(TT.fd, s = sparse, 512); in unpack_tar()
649 TT.sparse[TT.sparselen++] = otoi(s, 12); in unpack_tar()
654 TT.sparselen /= 2; in unpack_tar()
655 if (TT.sparselen) in unpack_tar()
656 TT.hdr.ssize = TT.sparse[2*TT.sparselen-1]+TT.sparse[2*TT.sparselen-2]; in unpack_tar()
658 TT.sparselen = 0; in unpack_tar()
659 TT.hdr.ssize = TT.hdr.size; in unpack_tar()
663 TT.hdr.mode = OTOI(tar.mode)&0xfff; in unpack_tar()
664 if (tar.type == 'S' || !tar.type) TT.hdr.mode |= 0x8000; in unpack_tar()
665 else TT.hdr.mode |= (char []){8,8,10,2,6,4,1,8}[tar.type-'0']<<12; in unpack_tar()
666 TT.hdr.uid = OTOI(tar.uid); in unpack_tar()
667 TT.hdr.gid = OTOI(tar.gid); in unpack_tar()
668 TT.hdr.mtime = OTOI(tar.mtime); in unpack_tar()
671 TT.hdr.device = dev_makedev(maj, min); in unpack_tar()
672 TT.hdr.uname = xstrndup(TT.owner ? TT.owner : tar.uname, sizeof(tar.uname)); in unpack_tar()
673 TT.hdr.gname = xstrndup(TT.group ? TT.group : tar.gname, sizeof(tar.gname)); in unpack_tar()
675 if (TT.owner) TT.hdr.uid = TT.ouid; in unpack_tar()
677 struct passwd *pw = getpwnam(TT.hdr.uname); in unpack_tar()
678 if (pw && (TT.owner || !FLAG(numeric_owner))) TT.hdr.uid = pw->pw_uid; in unpack_tar()
681 if (TT.group) TT.hdr.gid = TT.ggid; in unpack_tar()
683 struct group *gr = getgrnam(TT.hdr.gname); in unpack_tar()
684 if (gr) TT.hdr.gid = gr->gr_gid; in unpack_tar()
687 if (!TT.hdr.link_target && *tar.link) in unpack_tar()
688 TT.hdr.link_target = xstrndup(tar.link, sizeof(tar.link)); in unpack_tar()
689 if (!TT.hdr.name) { in unpack_tar()
692 TT.hdr.name = xmprintf("%.*s%s%.*s", i, tar.prefix, in unpack_tar()
698 if (S_ISREG(TT.hdr.mode) && (s = strend(TT.hdr.name, "/"))) { in unpack_tar()
700 TT.hdr.mode = (TT.hdr.mode & ~S_IFMT) | S_IFDIR; in unpack_tar()
704 if ((TT.hdr.link_target && *TT.hdr.link_target) in unpack_tar()
705 || (tar.type && !S_ISREG(TT.hdr.mode))) in unpack_tar()
706 TT.hdr.size = 0; in unpack_tar()
711 if ((delete = filter(TT.incl, TT.hdr.name)) && TT.incl != TT.seen) { in unpack_tar()
712 if (!TT.seen) TT.seen = delete; in unpack_tar()
715 if (TT.incl == delete) TT.incl = TT.incl->next; in unpack_tar()
716 else for (walk = TT.incl; walk != TT.seen; walk = walk->next) { in unpack_tar()
719 dlist_add_nomalloc(&TT.incl, delete); in unpack_tar()
725 if (filter(TT.excl, TT.hdr.name) || (TT.incl && !delete)) in unpack_tar()
726 skippy(TT.hdr.size); in unpack_tar()
729 struct tm *lc = localtime(TT.mtime ? &TT.mtt : &TT.hdr.mtime); in unpack_tar()
732 mode_to_string(TT.hdr.mode, perm); in unpack_tar()
734 sprintf(perm, "%u", TT.hdr.uid); in unpack_tar()
735 sprintf(gname, "%u", TT.hdr.gid); in unpack_tar()
736 printf(" %s/%s ", *TT.hdr.uname ? TT.hdr.uname : perm, in unpack_tar()
737 *TT.hdr.gname ? TT.hdr.gname : gname); in unpack_tar()
739 else printf("%9lld", TT.hdr.ssize); in unpack_tar()
744 printf("%s", TT.hdr.name); in unpack_tar()
745 if (TT.hdr.link_target) printf(" -> %s", TT.hdr.link_target); in unpack_tar()
747 skippy(TT.hdr.size); in unpack_tar()
749 if (FLAG(v)) printf("%s\n", TT.hdr.name); in unpack_tar()
752 if (S_ISREG(TT.hdr.mode)) { in unpack_tar()
756 xsetenv(xmprintf("TAR_MODE=%o", TT.hdr.mode), 0); in unpack_tar()
757 xsetenv(xmprintf("TAR_SIZE=%lld", TT.hdr.ssize), 0); in unpack_tar()
758 xsetenv("TAR_FILENAME", TT.hdr.name); in unpack_tar()
759 xsetenv("TAR_UNAME", TT.hdr.uname); in unpack_tar()
760 xsetenv("TAR_GNAME", TT.hdr.gname); in unpack_tar()
761 xsetenv(xmprintf("TAR_MTIME=%llo", (long long)TT.hdr.mtime), 0); in unpack_tar()
762 xsetenv(xmprintf("TAR_UID=%o", TT.hdr.uid), 0); in unpack_tar()
763 xsetenv(xmprintf("TAR_GID=%o", TT.hdr.gid), 0); in unpack_tar()
765 pid = xpopen((char *[]){"sh", "-c", TT.to_command, NULL}, &fd, 0); in unpack_tar()
774 free(TT.hdr.name); in unpack_tar()
775 free(TT.hdr.link_target); in unpack_tar()
776 free(TT.hdr.uname); in unpack_tar()
777 free(TT.hdr.gname); in unpack_tar()
778 TT.hdr.name = TT.hdr.link_target = 0; in unpack_tar()
797 if (pline) trim2list(TT.X ? &TT.excl : &TT.incl, *pline); in do_XT()
803 *archiver = FLAG(I) ? TT.I : (FLAG(z) ? "gzip" : (FLAG(J) ? "xz":"bzip2")); in tar_main()
811 if (TT.owner) TT.ouid = xgetuid(TT.owner); in tar_main()
812 if (TT.group) TT.ggid = xgetgid(TT.group); in tar_main()
813 if (TT.mtime) xparsedate(TT.mtime, &TT.mtt, (void *)&s, 1); in tar_main()
816 for (; TT.exclude; TT.exclude = TT.exclude->next) in tar_main()
817 trim2list(&TT.excl, TT.exclude->arg); in tar_main()
818 for (;TT.X; TT.X = TT.X->next) do_lines(xopenro(TT.X->arg), '\n', do_XT); in tar_main()
819 for (args = toys.optargs; *args; args++) trim2list(&TT.incl, *args); in tar_main()
820 for (;TT.T; TT.T = TT.T->next) do_lines(xopenro(TT.T->arg), '\n', do_XT); in tar_main()
824 if (!TT.incl) error_exit("empty archive"); in tar_main()
825 TT.fd = 1; in tar_main()
830 if (TT.f && strcmp(TT.f, "-")) in tar_main()
831 TT.fd = xcreate(TT.f, TT.fd*(O_WRONLY|O_CREAT|O_TRUNC), 0666); in tar_main()
833 if (TT.C) xchdir(TT.C); in tar_main()
837 TT.cwd = xabspath(s = xgetcwd(), 1); in tar_main()
844 if (!fstat(TT.fd, &st)) { in tar_main()
845 TT.aino = st.st_ino; in tar_main()
846 TT.adev = st.st_dev; in tar_main()
856 len = xread(TT.fd, hdr = toybuf+sizeof(toybuf)-512, 512); in tar_main()
865 if (!lseek(TT.fd, -len, SEEK_CUR)) hdr = 0; in tar_main()
870 int pipefd[2] = {hdr ? -1 : TT.fd, -1}, i, pid; in tar_main()
881 close(TT.fd); in tar_main()
882 TT.fd = pipefd[1]; in tar_main()
904 if ((i = read(TT.fd, toybuf, sizeof(toybuf)))<1) { in tar_main()
920 if (TT.seen != TT.incl) { in tar_main()
921 if (!TT.seen) TT.seen = TT.incl; in tar_main()
922 while (TT.incl != TT.seen) { in tar_main()
923 error_msg("'%s' not in archive", TT.incl->data); in tar_main()
924 TT.incl = TT.incl->next; in tar_main()
930 struct double_list *dl = TT.incl; in tar_main()
933 if (TT.f && !FLAG(j) && !FLAG(z) && !FLAG(I) && !FLAG(J)) { in tar_main()
935 if (strend(TT.f, ".tgz") || strend(TT.f, ".tar.gz")) in tar_main()
937 if (strend(TT.f, ".txz") || strend(TT.f, ".tar.xz")) in tar_main()
940 if (strend(TT.f, tbz[len])) toys.optflags |= FLAG_j; in tar_main()
944 int pipefd[2] = {-1, TT.fd}; in tar_main()
947 close(TT.fd); in tar_main()
948 TT.fd = pipefd[0]; in tar_main()
951 TT.warn = 1; in tar_main()
953 } while (TT.incl != (dl = dl->next)); in tar_main()
955 writeall(TT.fd, toybuf, 1024); in tar_main()
959 llist_traverse(TT.excl, llist_free_double); in tar_main()
960 llist_traverse(TT.incl, llist_free_double); in tar_main()
961 while(TT.hlc) free(TT.hlx[--TT.hlc].arg); in tar_main()
962 free(TT.hlx); in tar_main()
963 free(TT.cwd); in tar_main()
964 close(TT.fd); in tar_main()