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