Rev 1400 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1400 | Rev 1410 | ||
---|---|---|---|
Line 6... | Line 6... | ||
6 | ;; 23.01.2010 turbanoff - support 70.0 70.1 ;; |
6 | ;; 23.01.2010 turbanoff - support 70.0 70.1 ;; |
7 | ;; ;; |
7 | ;; ;; |
8 | ;; ;; |
8 | ;; ;; |
9 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
9 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 10... | Line 10... | ||
10 | 10 | ||
Line 11... | Line 11... | ||
11 | $Revision: 1400 $ |
11 | $Revision: 1410 $ |
12 | 12 | ||
13 | EXT2_BAD_INO = 1 |
13 | EXT2_BAD_INO = 1 |
14 | EXT2_ROOT_INO = 2 |
14 | EXT2_ROOT_INO = 2 |
Line 39... | Line 39... | ||
39 | FS_FT_HIDDEN = 2 |
39 | FS_FT_HIDDEN = 2 |
40 | FS_FT_DIR = 0x10 ;это папка |
40 | FS_FT_DIR = 0x10 ;это папка |
41 | FS_FT_ASCII = 0 ;имя в ascii |
41 | FS_FT_ASCII = 0 ;имя в ascii |
42 | FS_FT_UNICODE = 1 ;имя в unicode |
42 | FS_FT_UNICODE = 1 ;имя в unicode |
Line -... | Line 43... | ||
- | 43 | ||
- | 44 | EXT2_FEATURE_INCOMPAT_FILETYPE = 0x0002 |
|
43 | 45 | ||
44 | uglobal |
46 | uglobal |
45 | EXT2_files_in_folder dd ? ;всего файлов в папке |
47 | EXT2_files_in_folder dd ? ;всего файлов в папке |
46 | EXT2_read_in_folder dd ? ;сколько файлов "считали" |
48 | EXT2_read_in_folder dd ? ;сколько файлов "считали" |
47 | EXT2_end_block dd ? ;конец очередного блока папки |
49 | EXT2_end_block dd ? ;конец очередного блока папки |
Line 78... | Line 80... | ||
78 | .name db ? ; 0..255 |
80 | .name db ? ; 0..255 |
79 | ends |
81 | ends |
Line 80... | Line 82... | ||
80 | 82 | ||
- | 83 | ||
- | 84 | ext2_test_superblock: |
|
- | 85 | cmp [fs_type], 0x83 |
|
81 | 86 | jne .no |
|
82 | ext2_test_superblock: |
87 | |
83 | mov eax, [PARTITION_START] |
88 | mov eax, [PARTITION_START] |
Line 84... | Line -... | ||
84 | add eax, 2 ;superblock start at 1024b |
- | |
85 | call hd_read |
- | |
86 | 89 | add eax, 2 ;superblock start at 1024b |
|
87 | cmp [fs_type], 0x83 |
90 | call hd_read |
88 | jne .no |
91 | |
89 | cmp dword [ebx+24], 3 ;s_block_size 0,1,2,3 |
92 | cmp dword [ebx+24], 3 ;s_block_size 0,1,2,3 |
90 | ja .no |
93 | ja .no |
91 | cmp word [ebx+56], 0xEF53 ;s_magic |
94 | cmp word [ebx+56], 0xEF53 ;s_magic |
- | 95 | jne .no |
|
- | 96 | cmp word [ebx+58], 1 ;s_state (EXT_VALID_FS=1) |
|
- | 97 | jne .no |
|
- | 98 | mov eax, [ebx+96] |
|
- | 99 | test eax, EXT2_FEATURE_INCOMPAT_FILETYPE |
|
Line 92... | Line 100... | ||
92 | jne .no |
100 | jz .no |
93 | cmp word [ebx+58], 1 ;s_state (EXT_VALID_FS=1) |
101 | test eax, not EXT2_FEATURE_INCOMPAT_FILETYPE |
94 | jne .no |
102 | jnz .no |
95 | 103 | ||
Line 153... | Line 161... | ||
153 | mov [ext2_data.root_inode], eax |
161 | mov [ext2_data.root_inode], eax |
Line 154... | Line 162... | ||
154 | 162 | ||
155 | mov ebx, eax |
163 | mov ebx, eax |
156 | mov eax, EXT2_ROOT_INO |
164 | mov eax, EXT2_ROOT_INO |
- | 165 | call ext2_get_inode ; read root inode |
|
Line 157... | Line -... | ||
157 | call ext2_get_inode ; read root inode |
- | |
158 | - | ||
159 | popad |
- | |
160 | call free_hd_channel |
- | |
161 | and [hd1_status], 0 |
166 | jmp return_from_part_set |
162 | ret |
167 | |
163 | ;================================================================== |
168 | ;================================================================== |
164 | ;in: eax = i_block |
169 | ;in: eax = i_block |
165 | ; ebx = pointer to return memory |
170 | ; ebx = pointer to return memory |
Line 268... | Line 273... | ||
268 | mov ecx, [ext2_data.log_block_size] |
273 | mov ecx, [ext2_data.log_block_size] |
269 | shl eax, cl |
274 | shl eax, cl |
270 | add eax, [PARTITION_START] ; а старт раздела - в терминах hdd (512) |
275 | add eax, [PARTITION_START] ; а старт раздела - в терминах hdd (512) |
Line 271... | Line 276... | ||
271 | 276 | ||
272 | ;eax - указывает на таблицу inode-ов на hdd |
277 | ;eax - указывает на таблицу inode-ов на hdd |
Line 273... | Line 278... | ||
273 | mov ecx, eax ;сохраним его пока в ecx |
278 | mov esi, eax ;сохраним его пока в esi |
274 | 279 | ||
- | 280 | ; прибавим локальный адрес inode-а |
|
275 | ; прибавим локальный адрес inode-а |
281 | pop eax ; index |
276 | pop eax ; index |
282 | mov ecx, [ext2_data.inode_size] |
277 | mul [ext2_data.inode_size] ; (index * inode_size) |
283 | mul ecx ; (index * inode_size) |
Line 278... | Line 284... | ||
278 | mov ebp, 512 |
284 | mov ebp, 512 |
279 | div ebp ;поделим на размер блока |
285 | div ebp ;поделим на размер блока |
280 | 286 | ||
Line 281... | Line 287... | ||
281 | add eax, ecx ;нашли адрес блока для чтения |
287 | add eax, esi ;нашли адрес блока для чтения |
282 | mov ebx, [ext2_data.ext2_temp_block] |
288 | mov ebx, [ext2_data.ext2_temp_block] |
283 | call hd_read |
289 | call hd_read |
284 | 290 | ||
285 | mov esi, edx ;добавим "остаток" |
291 | mov esi, edx ;добавим "остаток" |
286 | add esi, ebx ;к адресу |
292 | add esi, ebx ;к адресу |
Line 287... | Line 293... | ||
287 | mov ecx, [ext2_data.inode_size] |
293 | ; mov ecx, [ext2_data.inode_size] |