mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-24 15:46:49 +03:00
ext fs optimizing
git-svn-id: svn://kolibrios.org@6756 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
cca1343075
commit
69d1122a04
@ -305,87 +305,117 @@ extfsReadBlock:
|
||||
|
||||
extfsReadDescriptor:
|
||||
; in: eax = block group number
|
||||
; out:
|
||||
; [ebp+EXTFS.tempBlockBuffer] -> relevant block
|
||||
; eax -> block group descriptor, 0 = error
|
||||
push edx ebx
|
||||
; out: ebx -> block group descriptor
|
||||
push ecx edx
|
||||
mov edx, [ebp+EXTFS.superblock.firstGroupBlock]
|
||||
inc edx
|
||||
mov ecx, [ebp+EXTFS.sectorsPerBlockLog]
|
||||
shl edx, cl
|
||||
shl eax, 5
|
||||
xor edx, edx
|
||||
div [ebp+EXTFS.bytesPerBlock]
|
||||
add eax, [ebp+EXTFS.superblock.firstGroupBlock]
|
||||
inc eax
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsReadBlock
|
||||
jc .fail
|
||||
mov eax, ebx
|
||||
mov ecx, eax
|
||||
and ecx, 511
|
||||
shr eax, 9
|
||||
add eax, edx
|
||||
@@:
|
||||
pop ebx edx
|
||||
ret
|
||||
|
||||
.fail:
|
||||
xor eax, eax
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
push ecx
|
||||
call fs_read32_sys
|
||||
pop ecx
|
||||
add ebx, ecx
|
||||
test eax, eax
|
||||
jz @f
|
||||
movi eax, ERROR_DEVICE
|
||||
stc
|
||||
jmp @b
|
||||
@@:
|
||||
pop edx ecx
|
||||
ret
|
||||
|
||||
extfsWriteDescriptor:
|
||||
; in:
|
||||
; eax = block group number
|
||||
; [ebp+EXTFS.tempBlockBuffer] -> relevant block
|
||||
push edx ebx
|
||||
shl eax, 5
|
||||
xor edx, edx
|
||||
div [ebp+EXTFS.bytesPerBlock]
|
||||
add eax, [ebp+EXTFS.superblock.firstGroupBlock]
|
||||
inc eax
|
||||
; in: eax = block group number
|
||||
push ebx ecx edx
|
||||
mov edx, [ebp+EXTFS.superblock.firstGroupBlock]
|
||||
inc edx
|
||||
mov ecx, [ebp+EXTFS.sectorsPerBlockLog]
|
||||
shl edx, cl
|
||||
shr eax, 9-5
|
||||
add eax, edx
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsWriteBlock
|
||||
pop ebx edx
|
||||
call fs_write32_sys
|
||||
pop edx ecx ebx
|
||||
ret
|
||||
|
||||
extfsResourceFree:
|
||||
; in:
|
||||
; ecx=0 -> block, ecx=1 -> inode
|
||||
; eax = block/inode number
|
||||
push ebx edx
|
||||
extfsExtentFree:
|
||||
; in: eax = first block number, ecx = extent size
|
||||
push ebx edx edi
|
||||
sub eax, [ebp+EXTFS.superblock.firstGroupBlock]
|
||||
xor edx, edx
|
||||
div [ebp+EXTFS.superblock.blocksPerGroup]
|
||||
mov ebx, [ebp+EXTFS.superblock.blocksPerGroup]
|
||||
div ebx
|
||||
sub ebx, edx
|
||||
sub ebx, ecx
|
||||
jc .ret
|
||||
push edx eax
|
||||
call extfsReadDescriptor
|
||||
jc .fail2
|
||||
inc [eax+BGDESCR.blocksFree+ecx*2]
|
||||
mov edx, [eax+BGDESCR.blockBitmap+ecx*4]
|
||||
add [ebx+BGDESCR.blocksFree], cx
|
||||
mov edx, [ebx+BGDESCR.blockBitmap]
|
||||
pop eax
|
||||
call extfsWriteDescriptor
|
||||
jc .fail
|
||||
mov eax, edx
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsReadBlock
|
||||
jc .fail
|
||||
pop eax
|
||||
push edx
|
||||
mov edx, eax
|
||||
and edx, 31
|
||||
shr eax, 5
|
||||
shl eax, 2
|
||||
add eax, [ebp+EXTFS.tempBlockBuffer]
|
||||
btr [eax], edx
|
||||
pop eax
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsWriteBlock
|
||||
jc @f
|
||||
inc [ebp+EXTFS.superblock.blocksFree+ecx*4]
|
||||
push ecx ebx edx
|
||||
add [ebp+EXTFS.superblock.blocksFree], ecx
|
||||
mov edi, eax
|
||||
shr edi, 5
|
||||
shl edi, 2
|
||||
add edi, ebx
|
||||
and eax, 31
|
||||
mov edx, ecx
|
||||
mov ecx, 32
|
||||
sub ecx, eax
|
||||
sub edx, ecx
|
||||
jnc @f
|
||||
add ecx, edx
|
||||
xor edx, edx
|
||||
@@:
|
||||
or ebx, -1
|
||||
shl ebx, cl
|
||||
not ebx
|
||||
mov ecx, eax
|
||||
shl ebx, cl
|
||||
not ebx
|
||||
and [edi], ebx
|
||||
mov ecx, edx
|
||||
jecxz @f
|
||||
shr ecx, 5
|
||||
add edi, 4
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
and edx, 31
|
||||
mov ecx, edx
|
||||
jecxz @f
|
||||
not eax
|
||||
shl eax, cl
|
||||
and [edi], eax
|
||||
@@:
|
||||
pop eax ebx
|
||||
call extfsWriteBlock
|
||||
pop ecx
|
||||
mov eax, ecx
|
||||
mul [ebp+EXTFS.sectorsPerBlock]
|
||||
sub [ebp+EXTFS.inodeBuffer.sectorsUsed], eax
|
||||
.ret:
|
||||
pop edi edx ebx
|
||||
xor eax, eax
|
||||
pop edx ebx
|
||||
ret
|
||||
|
||||
.fail2:
|
||||
pop eax
|
||||
.fail:
|
||||
pop eax
|
||||
jmp @b
|
||||
jmp .ret
|
||||
|
||||
extfsInodeAlloc:
|
||||
; in: eax = parent inode number
|
||||
@ -399,12 +429,11 @@ extfsInodeAlloc:
|
||||
.test_block_group:
|
||||
call extfsReadDescriptor
|
||||
jc .fail
|
||||
dec [eax+BGDESCR.inodesFree]
|
||||
dec [ebx+BGDESCR.inodesFree]
|
||||
js .next
|
||||
mov edx, [eax+BGDESCR.inodeBitmap]
|
||||
mov edx, [ebx+BGDESCR.inodeBitmap]
|
||||
mov eax, [esp]
|
||||
call extfsWriteDescriptor
|
||||
jc .fail
|
||||
mov eax, edx
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
mov edi, ebx
|
||||
@ -426,23 +455,15 @@ extfsInodeAlloc:
|
||||
mov ecx, eax
|
||||
mov eax, edx
|
||||
call extfsWriteBlock
|
||||
jc .fail
|
||||
pop eax
|
||||
mul [ebp+EXTFS.superblock.inodesPerGroup]
|
||||
add eax, ecx
|
||||
dec [ebp+EXTFS.superblock.inodesFree]
|
||||
mov ebx, eax
|
||||
pop eax
|
||||
lea ebx, [eax+ecx+1]
|
||||
xor eax, eax
|
||||
@@:
|
||||
pop edi esi edx ecx
|
||||
.ret:
|
||||
pop edi edi esi edx ecx
|
||||
ret
|
||||
|
||||
.fail:
|
||||
pop eax eax
|
||||
movi eax, ERROR_DEVICE
|
||||
jmp @b
|
||||
|
||||
.next:
|
||||
jmp esi
|
||||
|
||||
@ -461,17 +482,16 @@ extfsInodeAlloc:
|
||||
mov esi, .backward
|
||||
.backward:
|
||||
sub dword[esp], 1
|
||||
jc .fail
|
||||
mov eax, [esp]
|
||||
jmp .test_block_group
|
||||
jnc .test_block_group
|
||||
movi eax, ERROR_DISK_FULL
|
||||
.fail:
|
||||
pop edi
|
||||
jmp .ret
|
||||
|
||||
extfsExtentAlloc:
|
||||
; in:
|
||||
; eax = parent inode number
|
||||
; ecx = blocks max
|
||||
; out:
|
||||
; ebx = first block number
|
||||
; ecx = blocks allocated
|
||||
; in: eax = parent inode number, ecx = blocks max
|
||||
; out: ebx = first block number, ecx = blocks allocated
|
||||
push edx esi edi ecx
|
||||
dec eax
|
||||
xor edx, edx
|
||||
@ -480,9 +500,9 @@ extfsExtentAlloc:
|
||||
.test_block_group:
|
||||
call extfsReadDescriptor
|
||||
jc .fail
|
||||
dec [eax+BGDESCR.blocksFree]
|
||||
dec [ebx+BGDESCR.blocksFree]
|
||||
js .next
|
||||
mov eax, [eax+BGDESCR.blockBitmap]
|
||||
mov eax, [ebx+BGDESCR.blockBitmap]
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
mov edx, eax
|
||||
mov edi, ebx
|
||||
@ -502,8 +522,10 @@ extfsExtentAlloc:
|
||||
not eax
|
||||
shr eax, cl
|
||||
shl eax, cl
|
||||
mov ebx, 32
|
||||
bsf ebx, eax
|
||||
jnz @f
|
||||
mov ebx, 32
|
||||
@@:
|
||||
sub ebx, ecx
|
||||
mov eax, [esp+16]
|
||||
cmp ebx, eax
|
||||
@ -574,33 +596,29 @@ extfsExtentAlloc:
|
||||
pop eax
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsWriteBlock
|
||||
jc .fail
|
||||
mov eax, [esp]
|
||||
call extfsReadDescriptor
|
||||
jc .fail
|
||||
mov ecx, [esp+8]
|
||||
sub [eax+BGDESCR.blocksFree], cx
|
||||
sub [ebx+BGDESCR.blocksFree], cx
|
||||
jc .fail
|
||||
sub [ebp+EXTFS.superblock.blocksFree], ecx
|
||||
mov eax, [esp]
|
||||
call extfsWriteDescriptor
|
||||
jc .fail
|
||||
pop eax ebx
|
||||
mul [ebp+EXTFS.superblock.blocksPerGroup]
|
||||
mov ebx, eax
|
||||
add ebx, esi
|
||||
xor eax, eax
|
||||
add ebx, [ebp+EXTFS.superblock.firstGroupBlock]
|
||||
pop ecx
|
||||
mov eax, ecx
|
||||
mul [ebp+EXTFS.sectorsPerBlock]
|
||||
add [ebp+EXTFS.inodeBuffer.sectorsUsed], eax
|
||||
xor eax, eax
|
||||
.ret:
|
||||
pop edi esi edx
|
||||
ret
|
||||
|
||||
.fail:
|
||||
pop eax eax
|
||||
movi eax, ERROR_DEVICE
|
||||
xor ecx, ecx
|
||||
jmp .ret
|
||||
|
||||
.next: ; search forward, then backward
|
||||
pop eax
|
||||
cmp eax, [esp]
|
||||
@ -620,9 +638,11 @@ extfsExtentAlloc:
|
||||
dec eax
|
||||
push eax
|
||||
jns .test_block_group
|
||||
pop eax eax
|
||||
movi eax, ERROR_DISK_FULL
|
||||
.fail:
|
||||
add esp, 12
|
||||
xor ecx, ecx
|
||||
stc
|
||||
jmp .ret
|
||||
|
||||
extfsGetExtent:
|
||||
@ -753,6 +773,8 @@ extfsGetExtent:
|
||||
.calculateExtent:
|
||||
lea esi, [ebx+edx*4]
|
||||
lodsd
|
||||
test eax, eax
|
||||
jz .noBlock
|
||||
mov ebx, eax
|
||||
sub ecx, edx
|
||||
xor edx, edx
|
||||
@ -773,30 +795,21 @@ extfsGetExtent:
|
||||
|
||||
getInodeLocation:
|
||||
; in: eax = inode number
|
||||
; out: ebx = inode sector, edx = offset in sector
|
||||
; out: eax = inode sector, edx = offset in sector
|
||||
dec eax
|
||||
xor edx, edx
|
||||
div [ebp+EXTFS.superblock.inodesPerGroup]
|
||||
mov ecx, edx
|
||||
shl eax, 5
|
||||
xor edx, edx
|
||||
div [ebp+EXTFS.bytesPerBlock]
|
||||
add eax, [ebp+EXTFS.superblock.firstGroupBlock]
|
||||
inc eax
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsReadBlock
|
||||
call extfsReadDescriptor
|
||||
jc @f
|
||||
add ebx, edx
|
||||
mov ebx, [ebx+BGDESCR.inodeTable]
|
||||
mov eax, ecx
|
||||
mov ecx, [ebp+EXTFS.sectorsPerBlockLog]
|
||||
shl ebx, cl
|
||||
mov eax, edx
|
||||
mul [ebp+EXTFS.superblock.inodeSize]
|
||||
mov edx, eax
|
||||
shr eax, 9
|
||||
and edx, 511
|
||||
add ebx, eax
|
||||
xor eax, eax
|
||||
add eax, ebx
|
||||
@@:
|
||||
ret
|
||||
|
||||
@ -810,7 +823,6 @@ writeInode:
|
||||
pop eax
|
||||
call getInodeLocation
|
||||
jc .ret
|
||||
mov eax, ebx
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
mov ecx, eax
|
||||
call fs_read32_sys
|
||||
@ -838,7 +850,6 @@ readInode:
|
||||
mov edi, ebx
|
||||
call getInodeLocation
|
||||
jc @f
|
||||
mov eax, ebx
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call fs_read32_sys
|
||||
test eax, eax
|
||||
@ -1002,9 +1013,6 @@ doublyIndirectBlockAlloc:
|
||||
call extfsExtentAlloc
|
||||
jc .end
|
||||
sub [esp+12], ecx
|
||||
mov eax, ecx
|
||||
imul eax, [ebp+EXTFS.sectorsPerBlock]
|
||||
add [ebp+EXTFS.inodeBuffer.sectorsUsed], eax
|
||||
jmp @b
|
||||
|
||||
extfsExtendFile:
|
||||
@ -1040,9 +1048,6 @@ extfsExtendFile:
|
||||
call extfsExtentAlloc
|
||||
jc .errDone
|
||||
sub [esp], ecx
|
||||
mov eax, ecx
|
||||
imul eax, [ebp+EXTFS.sectorsPerBlock]
|
||||
add [esi+INODE.sectorsUsed], eax
|
||||
cmp edx, 12
|
||||
jc .directBlocks
|
||||
sub edx, 12
|
||||
@ -1168,9 +1173,6 @@ extfsExtendFile:
|
||||
call extfsExtentAlloc
|
||||
jc .errSave
|
||||
sub [esp], ecx
|
||||
mov eax, ecx
|
||||
imul eax, [ebp+EXTFS.sectorsPerBlock]
|
||||
add [ebp+EXTFS.inodeBuffer.sectorsUsed], eax
|
||||
jmp @b
|
||||
|
||||
@@:
|
||||
@ -1206,26 +1208,40 @@ freeIndirectBlock:
|
||||
lea edi, [ebx+edx*4]
|
||||
neg edx
|
||||
add edx, [ebp+EXTFS.dwordsPerBlock]
|
||||
.freeExtent:
|
||||
mov ebx, [edi]
|
||||
test ebx, ebx
|
||||
jz .end
|
||||
xor eax, eax
|
||||
xor ecx, ecx
|
||||
@@:
|
||||
mov eax, [edi]
|
||||
test eax, eax
|
||||
jz .end
|
||||
call extfsResourceFree
|
||||
stosd
|
||||
inc ecx
|
||||
dec edx
|
||||
jnz @b
|
||||
jz @f
|
||||
mov eax, [edi]
|
||||
sub eax, ebx
|
||||
sub eax, ecx
|
||||
jz @b
|
||||
@@:
|
||||
mov eax, ebx
|
||||
call extfsExtentFree
|
||||
test edx, edx
|
||||
jnz .freeExtent
|
||||
dec dword[esp+8]
|
||||
.end:
|
||||
pop edx edi
|
||||
mov eax, [edi]
|
||||
test edx, edx
|
||||
jnz @f
|
||||
call extfsResourceFree
|
||||
xor ecx, ecx
|
||||
inc ecx
|
||||
call extfsExtentFree
|
||||
stosd
|
||||
jmp .done
|
||||
|
||||
@@:
|
||||
mov ebx, [ebp+EXTFS.mainBlockBuffer]
|
||||
call extfsWriteBlock
|
||||
add edi, 4
|
||||
.done:
|
||||
@ -1270,7 +1286,8 @@ freeDoublyIndirectBlock:
|
||||
test edx, edx
|
||||
jnz @f
|
||||
xor ecx, ecx
|
||||
call extfsResourceFree
|
||||
inc ecx
|
||||
call extfsExtentFree
|
||||
stosd
|
||||
jmp .done
|
||||
|
||||
@ -1291,9 +1308,7 @@ freeDoublyIndirectBlock:
|
||||
ret
|
||||
|
||||
extfsTruncateFile:
|
||||
; in:
|
||||
; [ebp+EXTFS.inodeBuffer] = inode
|
||||
; ecx = new size
|
||||
; in: ecx = new size, [ebp+EXTFS.inodeBuffer] = inode
|
||||
push ebx ecx edx esi edi
|
||||
lea esi, [ebp+EXTFS.inodeBuffer]
|
||||
cmp ecx, [esi+INODE.fileSize]
|
||||
@ -1322,11 +1337,12 @@ extfsTruncateFile:
|
||||
neg edx
|
||||
add edx, 12
|
||||
xor ecx, ecx
|
||||
inc ecx
|
||||
@@:
|
||||
mov eax, [edi]
|
||||
test eax, eax
|
||||
jz .ret
|
||||
call extfsResourceFree
|
||||
call extfsExtentFree
|
||||
stosd
|
||||
dec edx
|
||||
jnz @b
|
||||
@ -1368,7 +1384,8 @@ extfsTruncateFile:
|
||||
test edx, edx
|
||||
jnz @f
|
||||
xor ecx, ecx
|
||||
call extfsResourceFree
|
||||
inc ecx
|
||||
call extfsExtentFree
|
||||
mov [esi+INODE.tripleAddress], eax
|
||||
jmp .done
|
||||
|
||||
@ -1462,7 +1479,6 @@ linkInode:
|
||||
pop eax
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsWriteBlock
|
||||
jc .error_get_inode_block
|
||||
pop ecx
|
||||
inc ecx
|
||||
cmp ecx, [esp]
|
||||
@ -1502,7 +1518,6 @@ linkInode:
|
||||
mov eax, edx
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsWriteBlock
|
||||
jc .error_block_write
|
||||
mov eax, [esp]
|
||||
lea ebx, [ebp+EXTFS.inodeBuffer]
|
||||
call readInode
|
||||
@ -1527,11 +1542,8 @@ linkInode:
|
||||
jmp @b
|
||||
|
||||
unlinkInode:
|
||||
; in:
|
||||
; eax = inode from which to unlink
|
||||
; ebx = inode to unlink
|
||||
; out:
|
||||
; eax = current number of links to inode, -1 = error
|
||||
; in: eax = inode from which to unlink, ebx = inode to unlink
|
||||
; out: eax = current number of links to inode, -1 = error
|
||||
push edx ebx
|
||||
lea ebx, [ebp+EXTFS.inodeBuffer]
|
||||
call readInode
|
||||
@ -1593,7 +1605,6 @@ unlinkInode:
|
||||
mov eax, edi
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsWriteBlock
|
||||
jc .fail
|
||||
mov eax, [esp]
|
||||
lea ebx, [ebp+EXTFS.inodeBuffer]
|
||||
call readInode
|
||||
@ -1624,7 +1635,7 @@ findInode:
|
||||
pop esi
|
||||
pushd 0 ROOT_INODE
|
||||
mov edi, esi
|
||||
cmp [edx+INODE.sectorsUsed], 0
|
||||
cmp [edx+INODE.fileSize], 0
|
||||
jz .not_found
|
||||
cmp byte [esi], 0
|
||||
jnz .next_path_part
|
||||
@ -1641,7 +1652,7 @@ findInode:
|
||||
ret
|
||||
|
||||
.next_path_part:
|
||||
push [edx+INODE.sectorsUsed]
|
||||
push [edx+INODE.fileSize]
|
||||
xor ecx, ecx
|
||||
.folder_block_cycle:
|
||||
push ecx
|
||||
@ -1682,7 +1693,7 @@ findInode:
|
||||
; ebx -> matched directory entry, esi -> name without parent, or not changed
|
||||
cmp edi, esi
|
||||
jnz @f
|
||||
sub eax, [ebp+EXTFS.sectorsPerBlock]
|
||||
sub eax, [ebp+EXTFS.bytesPerBlock]
|
||||
jle .not_found
|
||||
push eax
|
||||
inc ecx
|
||||
@ -2193,6 +2204,13 @@ ext_Delete:
|
||||
inc ecx
|
||||
jmp .checkDirectory
|
||||
|
||||
.not_empty:
|
||||
pop eax eax
|
||||
.error_stack8:
|
||||
pop eax eax
|
||||
push ERROR_ACCESS_DENIED
|
||||
jmp .ret
|
||||
|
||||
.empty:
|
||||
cmp eax, ERROR_END_OF_FILE
|
||||
jnz .not_empty_eax
|
||||
@ -2231,24 +2249,36 @@ ext_Delete:
|
||||
mov ebx, edi
|
||||
call writeInode
|
||||
jc .error_stack4_eax
|
||||
cmp edx, DIRECTORY
|
||||
jne @f
|
||||
mov eax, [esp]
|
||||
pop eax
|
||||
dec eax
|
||||
mov ecx, edx
|
||||
xor edx, edx
|
||||
div [ebp+EXTFS.superblock.inodesPerGroup]
|
||||
push eax
|
||||
push edx eax
|
||||
call extfsReadDescriptor
|
||||
jc .error_stack8
|
||||
dec [eax+BGDESCR.directoriesCount]
|
||||
jc .error_stack8_eax
|
||||
cmp ecx, DIRECTORY
|
||||
jnz @f
|
||||
dec [ebx+BGDESCR.directoriesCount]
|
||||
@@:
|
||||
inc [ebx+BGDESCR.inodesFree]
|
||||
mov ecx, [ebx+BGDESCR.inodeBitmap]
|
||||
pop eax
|
||||
call extfsWriteDescriptor
|
||||
@@: ; free inode
|
||||
mov eax, ecx
|
||||
mov ebx, [ebp+EXTFS.tempBlockBuffer]
|
||||
call extfsReadBlock
|
||||
jc .error_stack4_eax
|
||||
pop eax
|
||||
dec eax
|
||||
xor ecx, ecx
|
||||
inc ecx
|
||||
call extfsResourceFree
|
||||
mov edx, eax
|
||||
and edx, 31
|
||||
shr eax, 5
|
||||
shl eax, 2
|
||||
add eax, ebx
|
||||
btr [eax], edx
|
||||
mov eax, ecx
|
||||
call extfsWriteBlock
|
||||
inc [ebp+EXTFS.superblock.inodesFree]
|
||||
push eax
|
||||
.disk_sync:
|
||||
call writeSuperblock
|
||||
@ -2260,15 +2290,10 @@ ext_Delete:
|
||||
pop eax
|
||||
ret
|
||||
|
||||
.not_empty:
|
||||
pop eax eax
|
||||
.error_stack8:
|
||||
pop eax eax
|
||||
push ERROR_ACCESS_DENIED
|
||||
jmp .disk_sync
|
||||
|
||||
.not_empty_eax:
|
||||
add esp, 12
|
||||
pop ebx ebx
|
||||
.error_stack8_eax:
|
||||
pop ebx
|
||||
.error_stack4_eax:
|
||||
pop ebx
|
||||
push eax
|
||||
@ -2284,7 +2309,6 @@ ext_CreateFolder:
|
||||
mov eax, esi
|
||||
call extfsInodeAlloc
|
||||
jc .error
|
||||
inc ebx
|
||||
push ebx esi edi
|
||||
xor al, al
|
||||
lea edi, [ebp+EXTFS.inodeBuffer]
|
||||
@ -2333,8 +2357,8 @@ ext_CreateFolder:
|
||||
div [ebp+EXTFS.superblock.inodesPerGroup]
|
||||
mov edx, eax
|
||||
call extfsReadDescriptor
|
||||
jc @f
|
||||
inc [eax+BGDESCR.directoriesCount]
|
||||
jc .error
|
||||
inc [ebx+BGDESCR.directoriesCount]
|
||||
mov eax, edx
|
||||
call extfsWriteDescriptor
|
||||
.success:
|
||||
@ -2347,10 +2371,6 @@ ext_CreateFolder:
|
||||
pop eax
|
||||
ret
|
||||
|
||||
@@:
|
||||
movi eax, ERROR_DEVICE
|
||||
jmp .error
|
||||
|
||||
self_link db ".", 0
|
||||
parent_link db "..", 0
|
||||
|
||||
@ -2365,7 +2385,6 @@ ext_CreateFile:
|
||||
mov eax, esi
|
||||
call extfsInodeAlloc
|
||||
jc .error
|
||||
inc ebx
|
||||
push ebx ebx esi edi
|
||||
xor al, al
|
||||
lea edi, [ebp+EXTFS.inodeBuffer]
|
||||
|
Loading…
Reference in New Issue
Block a user