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