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 
6 struct SU_SP{
7   unsigned char magic[2];
8   unsigned char skip;
9 } __attribute__((packed));
10 
11 struct SU_CE{
12   char extent[8];
13   char offset[8];
14   char size[8];
15 };
16 
17 struct 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 
25 struct RR_RR{
26   char flags[1];
27 } __attribute__((packed));
28 
29 struct RR_PX{
30   char mode[8];
31   char n_links[8];
32   char uid[8];
33   char gid[8];
34 };
35 
36 struct RR_PN{
37   char dev_high[8];
38   char dev_low[8];
39 };
40 
41 
42 struct SL_component{
43   unsigned char flags;
44   unsigned char len;
45   char text[0];
46 } __attribute__((packed));
47 
48 struct RR_SL{
49   unsigned char flags;
50   struct SL_component link;
51 } __attribute__((packed));
52 
53 struct RR_NM{
54   unsigned char flags;
55   char name[0];
56 } __attribute__((packed));
57 
58 struct RR_CL{
59   char location[8];
60 };
61 
62 struct RR_PL{
63   char location[8];
64 };
65 
66 struct stamp{
67   char time[7];
68 } __attribute__((packed));
69 
70 struct 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 */
76 struct 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 
92 struct 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