Subversion Repositories Kolibri OS

Rev

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]