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 13 struct SU_CE_s { 14 char extent[8]; 15 char offset[8]; 16 char size[8]; 17 }; 18 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 27 struct RR_RR_s { 28 char flags[1]; 29 } __attribute__ ((packed)); 30 31 struct RR_PX_s { 32 char mode[8]; 33 char n_links[8]; 34 char uid[8]; 35 char gid[8]; 36 }; 37 38 struct RR_PN_s { 39 char dev_high[8]; 40 char dev_low[8]; 41 }; 42 43 struct SL_component { 44 unsigned char flags; 45 unsigned char len; 46 char text[0]; 47 } __attribute__ ((packed)); 48 49 struct RR_SL_s { 50 unsigned char flags; 51 struct SL_component link; 52 } __attribute__ ((packed)); 53 54 struct RR_NM_s { 55 unsigned char flags; 56 char name[0]; 57 } __attribute__ ((packed)); 58 59 struct RR_CL_s { 60 char location[8]; 61 }; 62 63 struct RR_PL_s { 64 char location[8]; 65 }; 66 67 struct stamp { 68 char time[7]; 69 } __attribute__ ((packed)); 70 71 struct RR_TF_s { 72 char flags; 73 struct stamp times[0]; /* Variable number of these beasts */ 74 } __attribute__ ((packed)); 75 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 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 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 */ 123