Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 */ |