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