Subversion Repositories Kolibri OS

Rev

Rev 3317 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3317 Rev 3403
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: 3317 $
11
$Revision: 3403 $
12
 
12
 
13
EXT2_BAD_INO         = 1
13
EXT2_BAD_INO         = 1
14
EXT2_ROOT_INO        = 2
14
EXT2_ROOT_INO        = 2
Line 563... Line 563...
563
        shr     ecx, 2
563
        shr     ecx, 2
564
        mov     ebp, edi
564
        mov     ebp, edi
565
        rep movsd
565
        rep movsd
566
        pop     ecx
566
        pop     ecx
567
    @@:
567
    @@:
568
        cmp     [ebp + EXT2_INODE_STRUC.i_blocks], 0 ;папка пуста
568
        cmp     [ebp + EXT2_INODE_STRUC.i_size], 0 ;папка пуста
569
        je      .error_empty_dir
569
        je      .error_empty_dir
Line 570... Line 570...
570
        
570
        
571
        push    edx      ;адрес результата              [edi + 28]
571
        push    edx      ;адрес результата              [edi + 28]
572
        push    0        ;конец очередного блока папки   [edi + 24]
572
        push    0        ;конец очередного блока папки   [edi + 24]
Line 614... Line 614...
614
        cmp     ebx, 12                                 ; минимальная длина записи
614
        cmp     ebx, 12                                 ; минимальная длина записи
615
        jb      .error_bad_len
615
        jb      .error_bad_len
616
        test    ebx, 0x3                                ; длина записи должна делиться на 4
616
        test    ebx, 0x3                                ; длина записи должна делиться на 4
617
        jnz     .error_bad_len
617
        jnz     .error_bad_len
Line -... Line 618...
-
 
618
 
618
 
619
        sub     [ebp + EXT2_INODE_STRUC.i_size], ebx    ;вычитаем напрямую из структуры inode
619
        add     esi, ebx                                ; к следующей записи
620
        add     esi, ebx                                ; к следующей записи
620
        cmp     esi, [edi + 24]                        ; сравниваем с концом блока
621
        cmp     esi, [edi + 24]                        ; сравниваем с концом блока
Line 621... Line 622...
621
        jb      .find_wanted_start
622
        jb      .find_wanted_start
622
 
623
 
623
        push    .find_wanted_start
624
        push    .find_wanted_start
624
   .end_block:                                              ;вылетели из цикла
-
 
625
        mov     ebx, [ext2_data.count_block_in_block]
625
   .end_block:                                              ;вылетели из цикла
Line 626... Line 626...
626
        sub     [ebp + EXT2_INODE_STRUC.i_blocks], ebx  ;вычитаем напрямую из структуры inode
626
        cmp     [ebp + EXT2_INODE_STRUC.i_size], 0
627
        jle     .end_dir
627
        jle     .end_dir
628
 
628
 
Line 725... Line 725...
725
        cmp     ebx, 12                                 ; минимальная длина записи
725
        cmp     ebx, 12                                 ; минимальная длина записи
726
        jb      .error_bad_len
726
        jb      .error_bad_len
727
        test    ebx, 0x3                                ; длина записи должна делиться на 4
727
        test    ebx, 0x3                                ; длина записи должна делиться на 4
728
        jnz     .error_bad_len
728
        jnz     .error_bad_len
Line -... Line 729...
-
 
729
 
729
 
730
        sub     [ebp + EXT2_INODE_STRUC.i_size], ebx    ;вычитаем напрямую из структуры inode
730
        add     esi, ebx
731
        add     esi, ebx
731
        cmp     esi, [edi + 24]                         ;дошли ли до конца блока?
732
        cmp     esi, [edi + 24]                         ;дошли ли до конца блока?
Line 732... Line 733...
732
        jb      .wanted_start
733
        jb      .wanted_start
Line 1093... Line 1094...
1093
        
1094
        
1094
    .next_path_part:
1095
    .next_path_part:
1095
        push    [ebp + EXT2_INODE_STRUC.i_blocks]
1096
        push    [ebp + EXT2_INODE_STRUC.i_blocks]
1096
        xor     ecx, ecx
1097
        xor     ecx, ecx
-
 
1098
    .folder_block_cycle:
1097
    .folder_block_cycle:
1099
        push    ecx
1098
        call    ext2_get_inode_block
1100
        call    ext2_get_inode_block
1099
        test    eax, eax
1101
        test    eax, eax
Line 1100... Line 1102...
1100
        jnz     .error_get_inode_block
1102
        jnz     .error_get_inode_block
Line 1105... Line 1107...
1105
        test    eax, eax
1107
        test    eax, eax
1106
        jnz     .error_get_block
1108
        jnz     .error_get_block
Line 1107... Line 1109...
1107
        
1109
        
1108
        push    esi
1110
        push    esi
1109
        call    ext2_test_block_by_name
1111
        call    ext2_test_block_by_name
Line 1110... Line 1112...
1110
        pop     edi
1112
        pop     edi ecx
1111
 
1113
 
Line 1112... Line 1114...
1112
        cmp     edi, esi                                ;нашли имя?
1114
        cmp     edi, esi                                ;нашли имя?
Line 1151... Line 1153...
1151
        xor     eax, eax
1153
        xor     eax, eax
1152
        ret
1154
        ret
Line 1153... Line 1155...
1153
 
1155
 
1154
    .error_get_inode_block:
1156
    .error_get_inode_block:
-
 
1157
    .error_get_block:
1155
    .error_get_block:
1158
        pop     ecx
1156
    .error_get_inode:
1159
    .error_get_inode:
1157
        pop     ebx
1160
        pop     ebx
1158
    .error_empty_root:
1161
    .error_empty_root:
1159
        mov     eax, ERROR_FS_FAIL
1162
        mov     eax, ERROR_FS_FAIL