123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /* tar archive format definitions and functions */
- #define islink(lf) (isreallink(lf) || issymlink(lf))
- #define isreallink(lf) ((lf) == Lflink)
- #define issymlink(lf) ((lf) == Lfsymlink1 || (lf) == Lfsymlink2)
- #define HOWMANY(a, size) (((a) + (size) - 1) / (size))
- #define ROUNDUP(a, size) (HOWMANY(a, size) * (size))
- #define TAPEBLKS(bytes) HOWMANY(bytes, Tblock)
- enum {
- Tblock = 512u,
- Namesz = 100,
- /* link flags */
- Lfplain1 = '\0',
- Lfplain2 = '0',
- Lflink,
- Lfsymlink1,
- Lfchr,
- Lfblk,
- Lfdir,
- Lffifo,
- Lfcontig,
- Lfsymlink2 = 's',
- };
- typedef struct {
- char name[Namesz];
- char mode[8];
- char uid[8];
- char gid[8];
- char size[12];
- char mtime[12];
- char chksum[8];
- char linkflag;
- char linkname[Namesz];
- } Header;
- typedef union {
- uchar dummy[Tblock];
- Header;
- } Hblock;
- /* tarsub.c */
- char *thisnm, *lastnm;
- unsigned checksum(Hblock *hp);
- int closeout(int outf, char *, int prflag);
- int getdir(Hblock *, int in, vlong *);
- ulong otoi(char *s);
- void newarch(void);
- uvlong passtar(Hblock *hp, int in, int outf, vlong bytes);
- void putempty(int out);
- void readtar(int in, char *buffer, long size);
- uvlong writetar(int outf, char *buffer, ulong size);
|