| /* | 
 |  * These structs are used by the system-use-sharing protocol, in which the | 
 |  * Rock Ridge extensions are embedded.  It is quite possible that other | 
 |  * extensions are present on the disk, and this is fine as long as they | 
 |  * all use SUSP | 
 |  */ | 
 |  | 
 | struct SU_SP_s { | 
 | 	unsigned char magic[2]; | 
 | 	unsigned char skip; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | struct SU_CE_s { | 
 | 	char extent[8]; | 
 | 	char offset[8]; | 
 | 	char size[8]; | 
 | }; | 
 |  | 
 | struct SU_ER_s { | 
 | 	unsigned char len_id; | 
 | 	unsigned char len_des; | 
 | 	unsigned char len_src; | 
 | 	unsigned char ext_ver; | 
 | 	char data[0]; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | struct RR_RR_s { | 
 | 	char flags[1]; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | struct RR_PX_s { | 
 | 	char mode[8]; | 
 | 	char n_links[8]; | 
 | 	char uid[8]; | 
 | 	char gid[8]; | 
 | }; | 
 |  | 
 | struct RR_PN_s { | 
 | 	char dev_high[8]; | 
 | 	char dev_low[8]; | 
 | }; | 
 |  | 
 | struct SL_component { | 
 | 	unsigned char flags; | 
 | 	unsigned char len; | 
 | 	char text[0]; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | struct RR_SL_s { | 
 | 	unsigned char flags; | 
 | 	struct SL_component link; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | struct RR_NM_s { | 
 | 	unsigned char flags; | 
 | 	char name[0]; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | struct RR_CL_s { | 
 | 	char location[8]; | 
 | }; | 
 |  | 
 | struct RR_PL_s { | 
 | 	char location[8]; | 
 | }; | 
 |  | 
 | struct stamp { | 
 | 	char time[7]; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | struct RR_TF_s { | 
 | 	char flags; | 
 | 	struct stamp times[0];	/* Variable number of these beasts */ | 
 | } __attribute__ ((packed)); | 
 |  | 
 | /* Linux-specific extension for transparent decompression */ | 
 | struct RR_ZF_s { | 
 | 	char algorithm[2]; | 
 | 	char parms[2]; | 
 | 	char real_size[8]; | 
 | }; | 
 |  | 
 | /* | 
 |  * These are the bits and their meanings for flags in the TF structure. | 
 |  */ | 
 | #define TF_CREATE 1 | 
 | #define TF_MODIFY 2 | 
 | #define TF_ACCESS 4 | 
 | #define TF_ATTRIBUTES 8 | 
 | #define TF_BACKUP 16 | 
 | #define TF_EXPIRATION 32 | 
 | #define TF_EFFECTIVE 64 | 
 | #define TF_LONG_FORM 128 | 
 |  | 
 | struct rock_ridge { | 
 | 	char signature[2]; | 
 | 	unsigned char len; | 
 | 	unsigned char version; | 
 | 	union { | 
 | 		struct SU_SP_s SP; | 
 | 		struct SU_CE_s CE; | 
 | 		struct SU_ER_s ER; | 
 | 		struct RR_RR_s RR; | 
 | 		struct RR_PX_s PX; | 
 | 		struct RR_PN_s PN; | 
 | 		struct RR_SL_s SL; | 
 | 		struct RR_NM_s NM; | 
 | 		struct RR_CL_s CL; | 
 | 		struct RR_PL_s PL; | 
 | 		struct RR_TF_s TF; | 
 | 		struct RR_ZF_s ZF; | 
 | 	} u; | 
 | }; | 
 |  | 
 | #define RR_PX 1			/* POSIX attributes */ | 
 | #define RR_PN 2			/* POSIX devices */ | 
 | #define RR_SL 4			/* Symbolic link */ | 
 | #define RR_NM 8			/* Alternate Name */ | 
 | #define RR_CL 16		/* Child link */ | 
 | #define RR_PL 32		/* Parent link */ | 
 | #define RR_RE 64		/* Relocation directory */ | 
 | #define RR_TF 128		/* Timestamps */ |