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 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 char name_len [ISODCL (33, 33)];
117 char name [0];
118 };
119
120 extern int isonum_711(char *);
121 extern int isonum_712(char *);
122 extern int isonum_721(char *);
123 extern int isonum_722(char *);
124 extern int isonum_723(char *);
125 extern int isonum_731(char *);
126 extern int isonum_732(char *);
127 extern int isonum_733(char *);
128 extern int iso_date(char *, int);
129
130 extern int parse_rock_ridge_inode(struct iso_directory_record *, struct inode *);
131 extern int get_rock_ridge_filename(struct iso_directory_record *, char ** name, int * len, struct inode *);
132
133 extern char * get_rock_ridge_symlink(struct inode *);
134 extern int find_rock_ridge_relocation(struct iso_directory_record *, struct inode *);
135
136 #define ISOFS_BLOCK_BITS 11
137 #define ISOFS_BLOCK_SIZE 2048
138
139
140 #define ISOFS_BUFFER_BITS 10
141 #define ISOFS_BUFFER_SIZE 1024
142
143 #define ISOFS_BLOCK_NUMBER(X) (X<<1)
144
145
146 #define ISOFS_SUPER_MAGIC 0x9660
147 #define ISOFS_FILE_UNKNOWN 0
148 #define ISOFS_FILE_TEXT 1
149 #define ISOFS_FILE_BINARY 2
150 #define ISOFS_FILE_TEXT_M 3
151
152
153
154
155
156 extern int isofs_open(struct inode * inode, struct file * filp);
157 extern void isofs_release(struct inode * inode, struct file * filp);
158 extern int isofs_lookup(struct inode * dir,const char * name, int len,
159 struct inode ** result);
160 extern unsigned long isofs_count_free_inodes(struct super_block *sb);
161 extern int isofs_new_block(int dev);
162 extern int isofs_free_block(int dev, int block);
163 extern int isofs_bmap(struct inode *,int);
164
165 extern void isofs_put_super(struct super_block *);
166 extern struct super_block *isofs_read_super(struct super_block *,void *);
167 extern void isofs_read_inode(struct inode *);
168 extern void isofs_put_inode(struct inode *);
169 extern void isofs_statfs(struct super_block *, struct statfs *);
170
171 extern int isofs_lseek(struct inode *, struct file *, off_t, int);
172 extern int isofs_read(struct inode *, struct file *, char *, int);
173 extern int isofs_lookup_grandparent(struct inode *, int);
174
175 extern struct inode_operations isofs_file_inode_operations;
176 extern struct inode_operations isofs_dir_inode_operations;
177 extern struct inode_operations isofs_symlink_inode_operations;
178 extern struct inode_operations isofs_chrdev_inode_operations;
179 extern struct inode_operations isofs_blkdev_inode_operations;
180 extern struct inode_operations isofs_fifo_inode_operations;
181
182 extern struct file_operations isofs_file_operations;
183 extern struct file_operations isofs_dir_operations;
184
185 struct lookup_cache{
186 char lock;
187 unsigned long dir;
188 dev_t dev;
189 unsigned short dlen;
190 char filename[256];
191 unsigned long ino;
192 };
193
194 extern struct lookup_cache cache;
195
196
197 #ifdef LEAK_CHECK
198 #define free_s leak_check_free_s
199 #define malloc leak_check_malloc
200 #define bread leak_check_bread
201 #define brelse leak_check_brelse
202 extern void * leak_check_malloc(unsigned int size);
203 extern void leak_check_free_s(void * obj, int size);
204 extern struct buffer_head * leak_check_bread(int dev, int block, int size);
205 extern void leak_check_brelse(struct buffer_head * bh);
206 #endif
207
208 #endif
209
210
211