Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6932 → Rev 6933

/kernel/trunk/fs/ext.inc
29,6 → 29,7
dd 0
dd ext_Delete
dd ext_CreateFolder
dd ext_Rename
ext_user_functions_end:
endg
 
1514,21 → 1515,11
mov eax, [esp]
mov [edi+DIRENTRY.fileType], al
@@:
push ebx
add edi, 8
rep movsb
mov eax, edx
mov ebx, [ebp+EXTFS.tempBlockBuffer]
call extfsWriteBlock
mov eax, [esp]
lea ebx, [ebp+EXTFS.inodeBuffer]
call readInode
jc .error_block_write
pop eax
inc [ebx+INODE.linksCount]
call writeInode
jc @f
xor eax, eax
@@:
pop edx ecx ecx ebx edi esi
ret
1538,9 → 1529,7
.error_get_inode_block:
pop ebx ebx
.error_inode_read:
pop ebx ebx
.error_block_write:
pop ebx
pop ebx ebx ebx
jmp @b
 
unlinkInode:
2340,6 → 2329,7
pop edi esi edx
; edx = allocated inode number, edi -> filename, esi = parent inode number
mov [ebx+INODE.accessMode], DIRECTORY or 511
mov byte [ebx+INODE.linksCount], 2
mov eax, edx
call writeInode
jc .error
2362,12 → 2352,21
pop esi edx
jc .error
; link parent to child
push esi
mov eax, esi
mov ebx, edx
mov esi, edi
mov dl, DIR_DIRECTORY
call linkInode
pop edx
jc .error
push ebx
lea ebx, [ebp+EXTFS.inodeBuffer]
inc [ebx+INODE.linksCount]
mov eax, edx
call writeInode
pop ebx
jc .error
mov eax, ebx
dec eax
xor edx, edx
2414,6 → 2413,7
pop edi esi edx
; edx = allocated inode number, edi -> filename, esi = parent inode number
mov [ebx+INODE.accessMode], FLAG_FILE or 110110110b
mov byte [ebx+INODE.linksCount], 1
mov eax, edx
call writeInode
jc .error2
2424,6 → 2424,10
mov dl, DIR_FLAG_FILE
call linkInode
jc .error2
mov eax, ebx
lea ebx, [ebp+EXTFS.inodeBuffer]
call readInode
jc .error2
pop esi ebx
mov eax, [ebx+12]
xor edx, edx
2642,3 → 2646,63
call ext_unlock
pop eax
ret
 
;----------------------------------------------------------------
ext_Rename:
call extfsWritingInit
push esi
mov esi, edi
call findInode
jnc .error
test edi, edi
jz .error
xchg [esp], esi
push edi
call findInode
pop edi
jc .error
xor edx, edx
inc edx
test [ebp+EXTFS.inodeBuffer.accessMode], DIRECTORY
jz @f
inc edx
@@:
mov eax, ecx
push ecx edx
call unlinkInode
pop edx ecx
jc .error
cmp edx, 1
jz @f
lea ebx, [ebp+EXTFS.inodeBuffer]
dec [ebx+INODE.linksCount]
mov eax, ecx
call writeInode
jc .error
@@:
mov ebx, esi
mov esi, edi
pop eax
push eax edx
call linkInode
pop edx
jc .error
pop eax
cmp edx, 1
jz @f
lea ebx, [ebp+EXTFS.inodeBuffer]
inc [ebx+INODE.linksCount]
call writeInode
@@:
call writeSuperblock
mov esi, [ebp+PARTITION.Disk]
call disk_sync
call ext_unlock
xor eax, eax
ret
 
.error:
push eax
call ext_unlock
pop eax ebx
ret