tar.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* tar archive format definitions and functions */
  2. #define islink(lf) (isreallink(lf) || issymlink(lf))
  3. #define isreallink(lf) ((lf) == Lflink)
  4. #define issymlink(lf) ((lf) == Lfsymlink1 || (lf) == Lfsymlink2)
  5. #define HOWMANY(a, size) (((a) + (size) - 1) / (size))
  6. #define ROUNDUP(a, size) (HOWMANY(a, size) * (size))
  7. #define TAPEBLKS(bytes) HOWMANY(bytes, Tblock)
  8. enum {
  9. Tblock = 512u,
  10. Namesz = 100,
  11. /* link flags */
  12. Lfplain1 = '\0',
  13. Lfplain2 = '0',
  14. Lflink,
  15. Lfsymlink1,
  16. Lfchr,
  17. Lfblk,
  18. Lfdir,
  19. Lffifo,
  20. Lfcontig,
  21. Lfsymlink2 = 's',
  22. };
  23. typedef struct {
  24. char name[Namesz];
  25. char mode[8];
  26. char uid[8];
  27. char gid[8];
  28. char size[12];
  29. char mtime[12];
  30. char chksum[8];
  31. char linkflag;
  32. char linkname[Namesz];
  33. } Header;
  34. typedef union {
  35. uchar dummy[Tblock];
  36. Header;
  37. } Hblock;
  38. /* tarsub.c */
  39. char *thisnm, *lastnm;
  40. unsigned checksum(Hblock *hp);
  41. int closeout(int outf, char *, int prflag);
  42. int getdir(Hblock *, int in, vlong *);
  43. ulong otoi(char *s);
  44. void newarch(void);
  45. uvlong passtar(Hblock *hp, int in, int outf, vlong bytes);
  46. void putempty(int out);
  47. void readtar(int in, char *buffer, long size);
  48. uvlong writetar(int outf, char *buffer, ulong size);