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 |