Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

typedef struct PaqHeader PaqHeader;
typedef struct PaqBlock PaqBlock;
typedef struct PaqTrailer PaqTrailer;
typedef struct PaqDir PaqDir;

enum {
        HeaderMagic = 0x529ab12b,
        HeaderSize = 44,
        BigHeaderMagic = 0x25a9,
        BlockMagic = 0x198a1cbf,
        BlockSize = 12,
        BigBlockMagic = 0x91a8,
        TrailerMagic = 0x6b46e688,
        TrailerSize = 28,
        Version = 1,
        MaxBlockSize = 512*1024,
        MinBlockSize = 512,
        MinDirSize = 28,
};

/* block types */
enum {
        DirBlock,
        DataBlock,
        PointerBlock,
};

/* encodings */
enum {
        NoEnc,
        DeflateEnc,
};

struct PaqHeader
{
        ulong   magic;
        ushort  version;
        ulong   blocksize;
        ulong   time;
        char    label[32];
};

struct PaqBlock
{
        ulong   magic;
        ulong   size;           /* data size - always <= blocksize */
        uchar   type;
        uchar   encoding;
        ulong   adler32;        /* applied to unencoded data */
};

struct PaqTrailer
{
        ulong   magic;
        ulong   root;
        uchar   sha1[20];
};

struct PaqDir
{
        ulong   qid;
        ulong   mode;
        ulong   mtime;
        ulong   length;
        ulong   offset;         /* to pointer block */
        char    *name;
        char    *uid;
        char    *gid;
};