1
2 #ifndef _ISOFS_FS_H
3 #define _ISOFS_FS_H
4
5 #include <linux/types.h>
6
7
8
9
10
11 #define ISODCL(from, to) (to - from + 1)
12
13 struct iso_volume_descriptor {
14 char type[ISODCL(1,1)];
15 char id[ISODCL(2,6)];
16 char version[ISODCL(7,7)];
17 char data[ISODCL(8,2048)];
18 };
19
20
21 #define ISO_VD_PRIMARY 1
22 #define ISO_VD_END 255
23
24 #define ISO_STANDARD_ID "CD001"
25
26 struct iso_primary_descriptor {
27 char type [ISODCL ( 1, 1)];
28 char id [ISODCL ( 2, 6)];
29 char version [ISODCL ( 7, 7)];
30 char unused1 [ISODCL ( 8, 8)];
31 char system_id [ISODCL ( 9, 40)];
32 char volume_id [ISODCL ( 41, 72)];
33 char unused2 [ISODCL ( 73, 80)];
34 char volume_space_size [ISODCL ( 81, 88)];
35 char unused3 [ISODCL ( 89, 120)];
36 char volume_set_size [ISODCL (121, 124)];
37 char volume_sequence_number [ISODCL (125, 128)];
38 char logical_block_size [ISODCL (129, 132)];
39 char path_table_size [ISODCL (133, 140)];
40 char type_l_path_table [ISODCL (141, 144)];
41 char opt_type_l_path_table [ISODCL (145, 148)];
42 char type_m_path_table [ISODCL (149, 152)];
43 char opt_type_m_path_table [ISODCL (153, 156)];
44 char root_directory_record [ISODCL (157, 190)];
45 char volume_set_id [ISODCL (191, 318)];
46 char publisher_id [ISODCL (319, 446)];
47 char preparer_id [ISODCL (447, 574)];
48 char application_id [ISODCL (575, 702)];
49 char copyright_file_id [ISODCL (703, 739)];
50 char abstract_file_id [ISODCL (740, 776)];
51 char bibliographic_file_id [ISODCL (777, 813)];
52 char creation_date [ISODCL (814, 830)];
53 char modification_date [ISODCL (831, 847)];
54 char expiration_date [ISODCL (848, 864)];
55 char effective_date [ISODCL (865, 881)];
56 char file_structure_version [ISODCL (882, 882)];
57 char unused4 [ISODCL (883, 883)];
58 char application_data [ISODCL (884, 1395)];
59 char unused5 [ISODCL (1396, 2048)];
60 };
61
62
63 #define HS_STANDARD_ID "CDROM"
64
65 struct hs_volume_descriptor {
66 char foo [ISODCL ( 1, 8)];
67 char type [ISODCL ( 9, 9)];
68 char id [ISODCL ( 10, 14)];
69 char version [ISODCL ( 15, 15)];
70 char data[ISODCL(16,2048)];
71 };
72
73
74 struct hs_primary_descriptor {
75 char foo [ISODCL ( 1, 8)];
76 char type [ISODCL ( 9, 9)];
77 char id [ISODCL ( 10, 14)];
78 char version [ISODCL ( 15, 15)];
79 char unused1 [ISODCL ( 16, 16)];
80 char system_id [ISODCL ( 17, 48)];
81 char volume_id [ISODCL ( 49, 80)];
82 char unused2 [ISODCL ( 81, 88)];
83 char volume_space_size [ISODCL ( 89, 96)];
84 char unused3 [ISODCL ( 97, 128)];
85 char volume_set_size [ISODCL (129, 132)];
86 char volume_sequence_number [ISODCL (133, 136)];
87 char logical_block_size [ISODCL (137, 140)];
88 char path_table_size [ISODCL (141, 148)];
89 char type_l_path_table [ISODCL (149, 152)];
90 char unused4 [ISODCL (153, 180)];
91 char root_directory_record [ISODCL (181, 214)];
92 };
93
94
95
96 struct iso_path_table{
97 unsigned char name_len[2];
98 char extent[4];
99 char parent[2];
100 char name[0];
101 };
102
103
104
105
106 struct iso_directory_record {
107 char length [ISODCL (1, 1)];
108 char ext_attr_length [ISODCL (2, 2)];
109 char extent [ISODCL (3, 10)];
110 char size [ISODCL (11, 18)];
111 char date [ISODCL (19, 25)];
112 char flags [ISODCL (26, 26)];
113 char file_unit_size [ISODCL (27, 27)];
114 char interleave [ISODCL (28, 28)];
115 char volume_sequence_number [ISODCL (29, 32)];
116 unsigned char name_len [ISODCL (33, 33)];
117 char name [0];
118 };
119
120 #define ISOFS_BLOCK_BITS 11
121 #define ISOFS_BLOCK_SIZE 2048
122
123 #define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize)
124 #define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits)
125 #define ISOFS_ZONE_BITS(INODE) ((INODE)->i_sb->u.isofs_sb.s_log_zone_size)
126
127 #if 0
128 #ifdef ISOFS_FIXED_BLOCKSIZE
129
130 #define ISOFS_BUFFER_BITS 10
131 #define ISOFS_BUFFER_SIZE 1024
132
133 #define ISOFS_BLOCK_NUMBER(X) (X<<1)
134 #else
135 #define ISOFS_BUFFER_BITS 11
136 #define ISOFS_BUFFER_SIZE 2048
137
138 #define ISOFS_BLOCK_NUMBER(X) (X)
139 #endif
140 #endif
141
142 #define ISOFS_SUPER_MAGIC 0x9660
143 #define ISOFS_FILE_UNKNOWN 0
144 #define ISOFS_FILE_TEXT 1
145 #define ISOFS_FILE_BINARY 2
146 #define ISOFS_FILE_TEXT_M 3
147
148 #ifdef __KERNEL__
149 extern int isonum_711(char *);
150 extern int isonum_712(char *);
151 extern int isonum_721(char *);
152 extern int isonum_722(char *);
153 extern int isonum_723(char *);
154 extern int isonum_731(char *);
155 extern int isonum_732(char *);
156 extern int isonum_733(char *);
157 extern int iso_date(char *, int);
158
159 extern int parse_rock_ridge_inode(struct iso_directory_record *, struct inode *);
160 extern int get_rock_ridge_filename(struct iso_directory_record *, char ** name, int * len, struct inode *);
161
162 extern char * get_rock_ridge_symlink(struct inode *);
163 extern int find_rock_ridge_relocation(struct iso_directory_record *, struct inode *);
164
165
166
167
168 extern int isofs_open(struct inode * inode, struct file * filp);
169 extern void isofs_release(struct inode * inode, struct file * filp);
170 extern int isofs_lookup(struct inode * dir,const char * name, int len,
171 struct inode ** result);
172 extern unsigned long isofs_count_free_inodes(struct super_block *sb);
173 extern int isofs_new_block(int dev);
174 extern int isofs_free_block(int dev, int block);
175 extern int isofs_bmap(struct inode *,int);
176
177 extern void isofs_put_super(struct super_block *);
178 extern struct super_block *isofs_read_super(struct super_block *,void *,int);
179 extern int init_iso9660_fs(void);
180 extern void isofs_read_inode(struct inode *);
181 extern void isofs_put_inode(struct inode *);
182 extern void isofs_statfs(struct super_block *, struct statfs *, int);
183
184 extern int isofs_lseek(struct inode *, struct file *, off_t, int);
185 extern int isofs_read(struct inode *, struct file *, char *, int);
186 extern int isofs_lookup_grandparent(struct inode *, int);
187
188 extern struct inode_operations isofs_file_inode_operations;
189 extern struct inode_operations isofs_dir_inode_operations;
190 extern struct inode_operations isofs_symlink_inode_operations;
191 extern struct inode_operations isofs_chrdev_inode_operations;
192 extern struct inode_operations isofs_blkdev_inode_operations;
193 extern struct inode_operations isofs_fifo_inode_operations;
194
195
196 #ifdef LEAK_CHECK
197 #define free_s leak_check_free_s
198 #define malloc leak_check_malloc
199 #define bread leak_check_bread
200 #define brelse leak_check_brelse
201 extern void * leak_check_malloc(unsigned int size);
202 extern void leak_check_free_s(void * obj, int size);
203 extern struct buffer_head * leak_check_bread(int dev, int block, int size);
204 extern void leak_check_brelse(struct buffer_head * bh);
205 #endif
206
207 #endif
208
209 #endif
210
211
212