1/* These structs are used by the system-use-sharing protocol, in which the
2   Rock Ridge extensions are embedded.  It is quite possible that other
3   extensions are present on the disk, and this is fine as long as they
4   all use SUSP */
5
6struct SU_SP{
7  unsigned char magic[2];
8  unsigned char skip;
9} __attribute__((packed));
10
11struct SU_CE{
12  char extent[8];
13  char offset[8];
14  char size[8];
15};
16
17struct SU_ER{
18  unsigned char len_id;
19  unsigned char len_des;
20  unsigned char len_src;
21  unsigned char ext_ver;
22  char data[0];
23} __attribute__((packed));
24
25struct RR_RR{
26  char flags[1];
27} __attribute__((packed));
28
29struct RR_PX{
30  char mode[8];
31  char n_links[8];
32  char uid[8];
33  char gid[8];
34};
35
36struct RR_PN{
37  char dev_high[8];
38  char dev_low[8];
39};
40
41
42struct SL_component{
43  unsigned char flags;
44  unsigned char len;
45  char text[0];
46} __attribute__((packed));
47
48struct RR_SL{
49  unsigned char flags;
50  struct SL_component link;
51} __attribute__((packed));
52
53struct RR_NM{
54  unsigned char flags;
55  char name[0];
56} __attribute__((packed));
57
58struct RR_CL{
59  char location[8];
60};
61
62struct RR_PL{
63  char location[8];
64};
65
66struct stamp{
67  char time[7];
68} __attribute__((packed));
69
70struct RR_TF{
71  char flags;
72  struct stamp times[0];  /* Variable number of these beasts */
73} __attribute__((packed));
74
75/* Linux-specific extension for transparent decompression */
76struct RR_ZF{
77  char algorithm[2];
78  char parms[2];
79  char real_size[8];
80};
81
82/* These are the bits and their meanings for flags in the TF structure. */
83#define TF_CREATE 1
84#define TF_MODIFY 2
85#define TF_ACCESS 4
86#define TF_ATTRIBUTES 8
87#define TF_BACKUP 16
88#define TF_EXPIRATION 32
89#define TF_EFFECTIVE 64
90#define TF_LONG_FORM 128
91
92struct rock_ridge{
93  char signature[2];
94  unsigned char len;
95  unsigned char version;
96  union{
97    struct SU_SP SP;
98    struct SU_CE CE;
99    struct SU_ER ER;
100    struct RR_RR RR;
101    struct RR_PX PX;
102    struct RR_PN PN;
103    struct RR_SL SL;
104    struct RR_NM NM;
105    struct RR_CL CL;
106    struct RR_PL PL;
107    struct RR_TF TF;
108    struct RR_ZF ZF;
109  } u;
110};
111
112#define RR_PX 1   /* POSIX attributes */
113#define RR_PN 2   /* POSIX devices */
114#define RR_SL 4   /* Symbolic link */
115#define RR_NM 8   /* Alternate Name */
116#define RR_CL 16  /* Child link */
117#define RR_PL 32  /* Parent link */
118#define RR_RE 64  /* Relocation directory */
119#define RR_TF 128 /* Timestamps */
120