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