2005-06-22 04:16:48 +04:00
/*
* 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
*/
2005-06-22 04:16:51 +04:00
struct SU_SP_s {
2005-06-22 04:16:48 +04:00
unsigned char magic [ 2 ] ;
unsigned char skip ;
} __attribute__ ( ( packed ) ) ;
2005-06-22 04:16:51 +04:00
struct SU_CE_s {
2005-06-22 04:16:48 +04:00
char extent [ 8 ] ;
char offset [ 8 ] ;
char size [ 8 ] ;
2005-04-17 02:20:36 +04:00
} ;
2005-06-22 04:16:51 +04:00
struct SU_ER_s {
2005-06-22 04:16:48 +04:00
unsigned char len_id ;
unsigned char len_des ;
unsigned char len_src ;
unsigned char ext_ver ;
char data [ 0 ] ;
} __attribute__ ( ( packed ) ) ;
2005-06-22 04:16:51 +04:00
struct RR_RR_s {
2005-06-22 04:16:48 +04:00
char flags [ 1 ] ;
} __attribute__ ( ( packed ) ) ;
2005-06-22 04:16:51 +04:00
struct RR_PX_s {
2005-06-22 04:16:48 +04:00
char mode [ 8 ] ;
char n_links [ 8 ] ;
char uid [ 8 ] ;
char gid [ 8 ] ;
2005-04-17 02:20:36 +04:00
} ;
2005-06-22 04:16:51 +04:00
struct RR_PN_s {
2005-06-22 04:16:48 +04:00
char dev_high [ 8 ] ;
char dev_low [ 8 ] ;
2005-04-17 02:20:36 +04:00
} ;
2005-06-22 04:16:48 +04:00
struct SL_component {
unsigned char flags ;
unsigned char len ;
char text [ 0 ] ;
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
2005-06-22 04:16:51 +04:00
struct RR_SL_s {
2005-06-22 04:16:48 +04:00
unsigned char flags ;
struct SL_component link ;
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
2005-06-22 04:16:51 +04:00
struct RR_NM_s {
2005-06-22 04:16:48 +04:00
unsigned char flags ;
char name [ 0 ] ;
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
2005-06-22 04:16:51 +04:00
struct RR_CL_s {
2005-06-22 04:16:48 +04:00
char location [ 8 ] ;
2005-04-17 02:20:36 +04:00
} ;
2005-06-22 04:16:51 +04:00
struct RR_PL_s {
2005-06-22 04:16:48 +04:00
char location [ 8 ] ;
2005-04-17 02:20:36 +04:00
} ;
2005-06-22 04:16:48 +04:00
struct stamp {
char time [ 7 ] ;
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
2005-06-22 04:16:51 +04:00
struct RR_TF_s {
2005-06-22 04:16:48 +04:00
char flags ;
struct stamp times [ 0 ] ; /* Variable number of these beasts */
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
/* Linux-specific extension for transparent decompression */
2005-06-22 04:16:51 +04:00
struct RR_ZF_s {
2005-06-22 04:16:48 +04:00
char algorithm [ 2 ] ;
char parms [ 2 ] ;
char real_size [ 8 ] ;
2005-04-17 02:20:36 +04:00
} ;
2005-06-22 04:16:48 +04:00
/*
* These are the bits and their meanings for flags in the TF structure .
*/
2005-04-17 02:20:36 +04:00
# 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
2005-06-22 04:16:48 +04:00
struct rock_ridge {
char signature [ 2 ] ;
unsigned char len ;
unsigned char version ;
union {
2005-06-22 04:16:51 +04:00
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 ;
2005-06-22 04:16:48 +04:00
} u ;
2005-04-17 02:20:36 +04:00
} ;
2005-06-22 04:16:48 +04:00
# 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 */