forked from KolibriOS/kolibrios
Fixed a bug in libio (concerned file.find functions in particular)
Also, added a file to ease debugging in the future git-svn-id: svn://kolibrios.org@2570 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
595e7179f6
commit
729f5e776a
@ -37,13 +37,14 @@
|
|||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
|
|
||||||
public @EXPORT as 'EXPORTS'
|
public @EXPORT as 'EXPORTS'
|
||||||
|
|
||||||
include '../../../../proc32.inc'
|
include '../../../../proc32.inc'
|
||||||
include '../../../../macros.inc'
|
include '../../../../macros.inc'
|
||||||
purge section;mov,add,sub
|
purge section,mov,add,sub
|
||||||
|
|
||||||
include 'libio.inc'
|
include 'libio.inc'
|
||||||
include 'libio_p.inc'
|
include 'libio_p.inc'
|
||||||
@ -63,33 +64,33 @@ proc file.find_first _dir, _mask, _attr ;///////////////////////////////////////
|
|||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;< eax = 0 (error) / matched file data pointer (acts as find descriptor) <FileInfo*> ;;
|
;< eax = 0 (error) / matched file data pointer (acts as find descriptor) <FileInfo*> ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
push ebx edx
|
push ebx edx
|
||||||
|
|
||||||
invoke mem.alloc, sizeof.FindFileBlock
|
invoke mem.alloc, sizeof.FindFileBlock
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jz .exit.error
|
jz .exit.error
|
||||||
mov edx, eax
|
mov edx, eax
|
||||||
mov ebx, [_attr]
|
mov ebx, [_attr]
|
||||||
mov [edx + FindFileBlock.Options.Attributes], ebx
|
mov [edx + FindFileBlock.Options.Attributes], ebx
|
||||||
mov ebx, [_mask]
|
mov ebx, [_mask]
|
||||||
mov [edx + FindFileBlock.Options.Mask], ebx
|
mov [edx + FindFileBlock.Options.Mask], ebx
|
||||||
|
|
||||||
lea ebx, [edx + FindFileBlock.InfoBlock]
|
lea ebx, [edx + FindFileBlock.InfoBlock]
|
||||||
mov [ebx + FileInfoBlock.Function], F70_READ_D
|
mov [ebx + FileInfoBlock.Function], F70_READ_D
|
||||||
mov [ebx + FileInfoBlock.Count], 1
|
mov [ebx + FileInfoBlock.Count], 1
|
||||||
lea eax, [edx + FindFileBlock.Header]
|
lea eax, [edx + FindFileBlock.Header]
|
||||||
mov [ebx + FileInfoBlock.Buffer], eax
|
mov [ebx + FileInfoBlock.Buffer], eax
|
||||||
mov eax, [_dir]
|
mov eax, [_dir]
|
||||||
mov [ebx + FileInfoBlock.FileName], eax
|
mov [ebx + FileInfoBlock.FileName], eax
|
||||||
|
|
||||||
stdcall libio._.find_matching_file, edx
|
stdcall libio._.find_matching_file, edx
|
||||||
pop edx ebx
|
pop edx ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.exit.error:
|
.exit.error:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
pop edx ebx
|
pop edx ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -101,11 +102,11 @@ proc file.find_next _findd ;////////////////////////////////////////////////////
|
|||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;< eax = 0 (error) / matched file data pointer (acts as find descriptor) <FileInfo*> ;;
|
;< eax = 0 (error) / matched file data pointer (acts as find descriptor) <FileInfo*> ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
mov eax, [_findd]
|
mov eax, [_findd]
|
||||||
add eax, -sizeof.FileInfoHeader
|
add eax, -sizeof.FileInfoHeader
|
||||||
inc [eax + FindFileBlock.InfoBlock.Position]
|
inc [eax + FindFileBlock.InfoBlock.Position]
|
||||||
stdcall libio._.find_matching_file, eax
|
stdcall libio._.find_matching_file, eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -117,10 +118,10 @@ proc file.find_close _findd ;///////////////////////////////////////////////////
|
|||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;< eax = result of memory freeing routine ;;
|
;< eax = result of memory freeing routine ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
mov eax, [_findd]
|
mov eax, [_findd]
|
||||||
add eax, -sizeof.FileInfoHeader
|
add eax, -sizeof.FileInfoHeader
|
||||||
invoke mem.free, eax
|
invoke mem.free, eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -138,22 +139,22 @@ locals
|
|||||||
loc_info FileInfoBlock
|
loc_info FileInfoBlock
|
||||||
endl
|
endl
|
||||||
|
|
||||||
lea ebx, [loc_info]
|
lea ebx, [loc_info]
|
||||||
invoke mem.alloc, 40
|
invoke mem.alloc, 40
|
||||||
push eax
|
push eax
|
||||||
mov [ebx + FileInfoBlock.Function], F70_GETATTR_FD
|
mov [ebx + FileInfoBlock.Function], F70_GETATTR_FD
|
||||||
mov [ebx + FileInfoBlock.Buffer], eax
|
mov [ebx + FileInfoBlock.Buffer], eax
|
||||||
mov byte[ebx + FileInfoBlock.FileName - 1], 0
|
mov byte[ebx + FileInfoBlock.FileName - 1], 0
|
||||||
mov eax, [_name]
|
mov eax, [_name]
|
||||||
mov [ebx + FileInfoBlock.FileName], eax
|
mov [ebx + FileInfoBlock.FileName], eax
|
||||||
mcall 70
|
mcall 70
|
||||||
pop ebx
|
pop ebx
|
||||||
push eax
|
push eax
|
||||||
mov eax, ebx
|
mov eax, ebx
|
||||||
mov ebx, [ebx + FileInfo.FileSizeLow]
|
mov ebx, [ebx + FileInfo.FileSizeLow]
|
||||||
invoke mem.free, eax
|
invoke mem.free, eax
|
||||||
pop eax
|
pop eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -179,62 +180,62 @@ locals
|
|||||||
loc_buf rb 40
|
loc_buf rb 40
|
||||||
endl
|
endl
|
||||||
|
|
||||||
push ebx esi edi
|
push ebx esi edi
|
||||||
|
|
||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
invoke mem.alloc, sizeof.InternalFileInfo
|
invoke mem.alloc, sizeof.InternalFileInfo
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jz .exit_error
|
jz .exit_error
|
||||||
mov ebx, eax
|
mov ebx, eax
|
||||||
push [_mode]
|
push [_mode]
|
||||||
pop [ebx + InternalFileInfo.Mode]
|
pop [ebx + InternalFileInfo.Mode]
|
||||||
mov [ebx + InternalFileInfo.Position], 0
|
mov [ebx + InternalFileInfo.Position], 0
|
||||||
lea edi, [ebx + InternalFileInfo.FileName]
|
lea edi, [ebx + InternalFileInfo.FileName]
|
||||||
mov esi, [_name]
|
mov esi, [_name]
|
||||||
mov ecx, 260 / 4
|
mov ecx, 260 / 4
|
||||||
cld
|
cld
|
||||||
rep movsd
|
rep movsd
|
||||||
|
|
||||||
.get_info:
|
.get_info:
|
||||||
push ebx
|
push ebx
|
||||||
mov [loc_info.Function], F70_GETATTR_FD
|
mov [loc_info.Function], F70_GETATTR_FD
|
||||||
lea eax, [loc_buf]
|
lea eax, [loc_buf]
|
||||||
mov [loc_info.Buffer], eax
|
mov [loc_info.Buffer], eax
|
||||||
mov byte[loc_info.FileName - 1], 0
|
mov byte[loc_info.FileName - 1], 0
|
||||||
mov eax, [_name]
|
mov eax, [_name]
|
||||||
mov [loc_info.FileName], eax
|
mov [loc_info.FileName], eax
|
||||||
lea ebx, [loc_info]
|
lea ebx, [loc_info]
|
||||||
mcall 70
|
mcall 70
|
||||||
pop ebx
|
pop ebx
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
cmp eax, 6
|
cmp eax, 6
|
||||||
jne .exit_error.ex
|
jne .exit_error.ex
|
||||||
@@:
|
@@:
|
||||||
mov eax, ebx
|
mov eax, ebx
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.exit_error.ex:
|
.exit_error.ex:
|
||||||
test [_mode], O_CREATE
|
test [_mode], O_CREATE
|
||||||
jz .exit_error
|
jz .exit_error
|
||||||
push ebx
|
push ebx
|
||||||
mov [loc_info.Function], F70_CREATE_F
|
mov [loc_info.Function], F70_CREATE_F
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [loc_info.Position], eax
|
mov [loc_info.Position], eax
|
||||||
mov [loc_info.Flags], eax
|
mov [loc_info.Flags], eax
|
||||||
mov [loc_info.Count], eax
|
mov [loc_info.Count], eax
|
||||||
lea ebx, [loc_info]
|
lea ebx, [loc_info]
|
||||||
mcall 70
|
mcall 70
|
||||||
pop ebx
|
pop ebx
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jz .get_info
|
jz .get_info
|
||||||
|
|
||||||
.exit_error:
|
.exit_error:
|
||||||
invoke mem.free, ebx
|
invoke mem.free, ebx
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -254,37 +255,37 @@ locals
|
|||||||
loc_info FileInfoBlock
|
loc_info FileInfoBlock
|
||||||
endl
|
endl
|
||||||
|
|
||||||
push ebx esi edi
|
push ebx esi edi
|
||||||
|
|
||||||
mov ebx, [_filed]
|
mov ebx, [_filed]
|
||||||
test [ebx + InternalFileInfo.Mode], O_READ
|
test [ebx + InternalFileInfo.Mode], O_READ
|
||||||
jz .exit_error
|
jz .exit_error
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [loc_info.Function], F70_READ_F
|
mov [loc_info.Function], F70_READ_F
|
||||||
mov [loc_info.Flags], eax
|
mov [loc_info.Flags], eax
|
||||||
mov byte[loc_info.FileName - 1], al
|
mov byte[loc_info.FileName - 1], al
|
||||||
push [ebx+InternalFileInfo.Position] [_buflen] [_buf]
|
push [ebx+InternalFileInfo.Position] [_buflen] [_buf]
|
||||||
pop [loc_info.Buffer] [loc_info.Count] [loc_info.Position]
|
pop [loc_info.Buffer] [loc_info.Count] [loc_info.Position]
|
||||||
lea eax, [ebx + InternalFileInfo.FileName]
|
lea eax, [ebx + InternalFileInfo.FileName]
|
||||||
mov [loc_info.FileName], eax
|
mov [loc_info.FileName], eax
|
||||||
lea ebx, [loc_info]
|
lea ebx, [loc_info]
|
||||||
mcall 70
|
mcall 70
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
cmp eax, 6
|
cmp eax, 6
|
||||||
jne .exit_error
|
jne .exit_error
|
||||||
@@:
|
@@:
|
||||||
mov eax, ebx
|
mov eax, ebx
|
||||||
mov ebx, [_filed]
|
mov ebx, [_filed]
|
||||||
add [ebx + InternalFileInfo.Position], eax
|
add [ebx + InternalFileInfo.Position], eax
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.exit_error:
|
.exit_error:
|
||||||
or eax, -1
|
or eax, -1
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -304,41 +305,41 @@ locals
|
|||||||
loc_info FileInfoBlock
|
loc_info FileInfoBlock
|
||||||
endl
|
endl
|
||||||
|
|
||||||
push ebx esi edi
|
push ebx esi edi
|
||||||
|
|
||||||
mov ebx, [_filed]
|
mov ebx, [_filed]
|
||||||
test [ebx + InternalFileInfo.Mode], O_WRITE
|
test [ebx + InternalFileInfo.Mode], O_WRITE
|
||||||
jz .exit_error
|
jz .exit_error
|
||||||
|
|
||||||
stdcall file.eof?, [_filed]
|
stdcall file.eof?, [_filed]
|
||||||
or eax, eax
|
or eax, eax
|
||||||
js .exit_error
|
js .exit_error
|
||||||
jz @f
|
jz @f
|
||||||
stdcall file.truncate, [_filed]
|
stdcall file.truncate, [_filed]
|
||||||
@@:
|
@@:
|
||||||
mov [loc_info.Function], F70_WRITE_F
|
mov [loc_info.Function], F70_WRITE_F
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [loc_info.Flags], eax
|
mov [loc_info.Flags], eax
|
||||||
mov byte[loc_info.FileName - 1], al
|
mov byte[loc_info.FileName - 1], al
|
||||||
push [ebx + InternalFileInfo.Position] [_buflen] [_buf]
|
push [ebx + InternalFileInfo.Position] [_buflen] [_buf]
|
||||||
pop [loc_info.Buffer] [loc_info.Count] [loc_info.Position]
|
pop [loc_info.Buffer] [loc_info.Count] [loc_info.Position]
|
||||||
lea eax, [ebx + InternalFileInfo.FileName]
|
lea eax, [ebx + InternalFileInfo.FileName]
|
||||||
mov [loc_info.FileName], eax
|
mov [loc_info.FileName], eax
|
||||||
lea ebx, [loc_info]
|
lea ebx, [loc_info]
|
||||||
mcall 70
|
mcall 70
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jnz .exit_error
|
jnz .exit_error
|
||||||
@@:
|
@@:
|
||||||
mov eax, ebx
|
mov eax, ebx
|
||||||
mov ebx, [_filed]
|
mov ebx, [_filed]
|
||||||
add [ebx + InternalFileInfo.Position],eax
|
add [ebx + InternalFileInfo.Position],eax
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.exit_error:
|
.exit_error:
|
||||||
or eax, -1
|
or eax, -1
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -357,50 +358,50 @@ proc file.seek _filed, _where, _origin ;////////////////////////////////////////
|
|||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;# call `file.err` to obtain extended error information ;;
|
;# call `file.err` to obtain extended error information ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
push ebx ecx edx
|
push ebx ecx edx
|
||||||
|
|
||||||
mov ecx, [_filed]
|
mov ecx, [_filed]
|
||||||
lea eax, [ecx + InternalFileInfo.FileName]
|
lea eax, [ecx + InternalFileInfo.FileName]
|
||||||
stdcall file.size, eax
|
stdcall file.size, eax
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jnz .exit_error
|
jnz .exit_error
|
||||||
mov edx, [_where]
|
mov edx, [_where]
|
||||||
cmp [_origin], SEEK_SET
|
cmp [_origin], SEEK_SET
|
||||||
jne .n_set
|
jne .n_set
|
||||||
mov [ecx + InternalFileInfo.Position], edx
|
mov [ecx + InternalFileInfo.Position], edx
|
||||||
jmp .exit_ok
|
jmp .exit_ok
|
||||||
|
|
||||||
.n_set:
|
.n_set:
|
||||||
cmp [_origin], SEEK_CUR
|
cmp [_origin], SEEK_CUR
|
||||||
jne .n_cur
|
jne .n_cur
|
||||||
add [ecx + InternalFileInfo.Position], edx
|
add [ecx + InternalFileInfo.Position], edx
|
||||||
jmp .exit_ok
|
jmp .exit_ok
|
||||||
|
|
||||||
.n_cur:
|
.n_cur:
|
||||||
cmp [_origin], SEEK_END
|
cmp [_origin], SEEK_END
|
||||||
jne .exit_error
|
jne .exit_error
|
||||||
neg edx
|
neg edx
|
||||||
add edx, ebx
|
add edx, ebx
|
||||||
mov [ecx + InternalFileInfo.Position], edx
|
mov [ecx + InternalFileInfo.Position], edx
|
||||||
|
|
||||||
.exit_ok:
|
.exit_ok:
|
||||||
|
|
||||||
cmp [ecx + InternalFileInfo.Position], 0
|
cmp [ecx + InternalFileInfo.Position], 0
|
||||||
jge @f
|
jge @f
|
||||||
mov [ecx + InternalFileInfo.Position], 0
|
mov [ecx + InternalFileInfo.Position], 0
|
||||||
@@:
|
@@:
|
||||||
; cmp ebx, [ecx+InternalFileInfo.Position]
|
; cmp ebx, [ecx+InternalFileInfo.Position]
|
||||||
; jae @f
|
; jae @f
|
||||||
; mov [ecx + InternalFileInfo.Position], ebx
|
; mov [ecx + InternalFileInfo.Position], ebx
|
||||||
; @@:
|
; @@:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
pop edx ecx ebx
|
pop edx ecx ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.exit_error:
|
.exit_error:
|
||||||
or eax, -1
|
or eax, -1
|
||||||
pop edx ecx ebx
|
pop edx ecx ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -414,25 +415,25 @@ proc file.eof? _filed ;/////////////////////////////////////////////////////////
|
|||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;# call `file.err` to obtain extended error information ;;
|
;# call `file.err` to obtain extended error information ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
push ebx ecx
|
push ebx ecx
|
||||||
|
|
||||||
mov ecx, [_filed]
|
mov ecx, [_filed]
|
||||||
lea eax, [ecx + InternalFileInfo.FileName]
|
lea eax, [ecx + InternalFileInfo.FileName]
|
||||||
stdcall file.size, eax
|
stdcall file.size, eax
|
||||||
or eax, eax
|
or eax, eax
|
||||||
jnz .exit_error
|
jnz .exit_error
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
cmp [ecx + InternalFileInfo.Position], ebx
|
cmp [ecx + InternalFileInfo.Position], ebx
|
||||||
jb @f
|
jb @f
|
||||||
inc eax
|
inc eax
|
||||||
@@: pop ecx ebx
|
@@: pop ecx ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.exit_error:
|
.exit_error:
|
||||||
or eax, -1
|
or eax, -1
|
||||||
pop ecx ebx
|
pop ecx ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -450,36 +451,36 @@ locals
|
|||||||
loc_info FileInfoBlock
|
loc_info FileInfoBlock
|
||||||
endl
|
endl
|
||||||
|
|
||||||
push ebx esi edi
|
push ebx esi edi
|
||||||
|
|
||||||
mov ebx, [_filed]
|
mov ebx, [_filed]
|
||||||
test [ebx + InternalFileInfo.Mode], O_WRITE
|
test [ebx + InternalFileInfo.Mode], O_WRITE
|
||||||
jz .exit_error
|
jz .exit_error
|
||||||
|
|
||||||
mov [loc_info.Function], F70_SETSIZE_F
|
mov [loc_info.Function], F70_SETSIZE_F
|
||||||
mov eax, [ebx + InternalFileInfo.Position]
|
mov eax, [ebx + InternalFileInfo.Position]
|
||||||
mov [loc_info.Position], eax
|
mov [loc_info.Position], eax
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [loc_info.Flags], eax
|
mov [loc_info.Flags], eax
|
||||||
mov [loc_info.Count], eax
|
mov [loc_info.Count], eax
|
||||||
mov [loc_info.Buffer], eax
|
mov [loc_info.Buffer], eax
|
||||||
mov byte[loc_info.FileName - 1], al
|
mov byte[loc_info.FileName - 1], al
|
||||||
lea eax, [ebx + InternalFileInfo.FileName]
|
lea eax, [ebx + InternalFileInfo.FileName]
|
||||||
mov [loc_info.FileName], eax
|
mov [loc_info.FileName], eax
|
||||||
lea ebx, [loc_info]
|
lea ebx, [loc_info]
|
||||||
mcall 70
|
mcall 70
|
||||||
cmp eax, 2
|
cmp eax, 2
|
||||||
je .exit_error
|
je .exit_error
|
||||||
cmp eax, 8
|
cmp eax, 8
|
||||||
je .exit_error
|
je .exit_error
|
||||||
@@: xor eax, eax
|
@@: xor eax, eax
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.exit_error:
|
.exit_error:
|
||||||
or eax, -1
|
or eax, -1
|
||||||
pop edi esi ebx
|
pop edi esi ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
file.seteof equ file.truncate
|
file.seteof equ file.truncate
|
||||||
@ -495,9 +496,9 @@ proc file.tell _filed ;/////////////////////////////////////////////////////////
|
|||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;# call `file.err` to obtain extended error information ;;
|
;# call `file.err` to obtain extended error information ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
mov eax, [_filed]
|
mov eax, [_filed]
|
||||||
mov eax, [eax + InternalFileInfo.Position]
|
mov eax, [eax + InternalFileInfo.Position]
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
@ -511,12 +512,12 @@ proc file.close _filed ;////////////////////////////////////////////////////////
|
|||||||
;;------------------------------------------------------------------------------------------------;;
|
;;------------------------------------------------------------------------------------------------;;
|
||||||
;# call `file.err` to obtain extended error information ;;
|
;# call `file.err` to obtain extended error information ;;
|
||||||
;;================================================================================================;;
|
;;================================================================================================;;
|
||||||
mov eax, [_filed]
|
mov eax, [_filed]
|
||||||
mov [eax + InternalFileInfo.Mode], 0
|
mov [eax + InternalFileInfo.Mode], 0
|
||||||
mov [eax + InternalFileInfo.FileName], 0
|
mov [eax + InternalFileInfo.FileName], 0
|
||||||
invoke mem.free, eax
|
invoke mem.free, eax
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
@ -532,19 +533,20 @@ endp
|
|||||||
align 16
|
align 16
|
||||||
@EXPORT:
|
@EXPORT:
|
||||||
|
|
||||||
export \
|
export \
|
||||||
libio._.init , 'lib_init' , \
|
libio._.init , 'lib_init' , \
|
||||||
0x00040004 , 'version' , \
|
0x00040004 , 'version' , \
|
||||||
file.find_first , 'file_find_first' , \
|
file.find_first , 'file_find_first' , \
|
||||||
file.find_next , 'file_find_next' , \
|
file.find_next , 'file_find_next' , \
|
||||||
file.find_close , 'file_find_close' , \
|
file.find_close , 'file_find_close' , \
|
||||||
file.size , 'file_size' , \
|
file.size , 'file_size' , \
|
||||||
file.open , 'file_open' , \
|
file.open , 'file_open' , \
|
||||||
file.read , 'file_read' , \
|
file.read , 'file_read' , \
|
||||||
file.write , 'file_write' , \
|
file.write , 'file_write' , \
|
||||||
file.seek , 'file_seek' , \
|
file.seek , 'file_seek' , \
|
||||||
file.tell , 'file_tell' , \
|
file.tell , 'file_tell' , \
|
||||||
file.eof? , 'file_iseof' , \
|
file.eof? , 'file_iseof' , \
|
||||||
file.seteof , 'file_seteof' , \
|
file.seteof , 'file_seteof' , \
|
||||||
file.truncate , 'file_truncate' , \
|
file.truncate , 'file_truncate' , \
|
||||||
file.close , 'file_close'
|
file.close , 'file_close'
|
||||||
|
|
||||||
|
@ -19,11 +19,11 @@
|
|||||||
|
|
||||||
|
|
||||||
O_BINARY = 00000000b
|
O_BINARY = 00000000b
|
||||||
O_READ = 00000001b
|
O_READ = 00000001b
|
||||||
O_WRITE = 00000010b
|
O_WRITE = 00000010b
|
||||||
O_CREATE = 00000100b
|
O_CREATE = 00000100b
|
||||||
O_SHARE = 00001000b
|
O_SHARE = 00001000b
|
||||||
O_TEXT = 00010000b
|
O_TEXT = 00010000b
|
||||||
|
|
||||||
SEEK_SET = 0
|
SEEK_SET = 0
|
||||||
SEEK_CUR = 1
|
SEEK_CUR = 1
|
||||||
@ -54,7 +54,7 @@ struct FileInfoBlock
|
|||||||
Flags dd ?
|
Flags dd ?
|
||||||
Count dd ?
|
Count dd ?
|
||||||
Buffer dd ?
|
Buffer dd ?
|
||||||
db ?
|
db ?
|
||||||
FileName dd ?
|
FileName dd ?
|
||||||
ends
|
ends
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ struct FileInfoHeader
|
|||||||
Version dd ?
|
Version dd ?
|
||||||
FilesRead dd ?
|
FilesRead dd ?
|
||||||
FilesCount dd ?
|
FilesCount dd ?
|
||||||
rd 5
|
rd 5
|
||||||
ends
|
ends
|
||||||
|
|
||||||
struct FileInfoA
|
struct FileInfoA
|
||||||
@ -78,7 +78,7 @@ struct FileInfoA
|
|||||||
FileSizeHigh dd ?
|
FileSizeHigh dd ?
|
||||||
ends
|
ends
|
||||||
ends
|
ends
|
||||||
FileName rb 252
|
FileName rb 264
|
||||||
ends
|
ends
|
||||||
|
|
||||||
struct FileInfoW
|
struct FileInfoW
|
||||||
@ -98,8 +98,8 @@ struct FileInfoW
|
|||||||
ends
|
ends
|
||||||
|
|
||||||
virtual at 0
|
virtual at 0
|
||||||
FileInfo FileInfoA
|
FileInfo FileInfoA
|
||||||
FileInfo fix FileInfoA
|
FileInfo fix FileInfoA
|
||||||
sizeof.FileInfo fix sizeof.FileInfoA
|
sizeof.FileInfo fix sizeof.FileInfoA
|
||||||
end virtual
|
end virtual
|
||||||
|
|
||||||
@ -109,4 +109,4 @@ FA_SYSTEM = 00000100b
|
|||||||
FA_LABEL = 00001000b
|
FA_LABEL = 00001000b
|
||||||
FA_FOLDER = 00010000b
|
FA_FOLDER = 00010000b
|
||||||
FA_ARCHIVED = 00100000b
|
FA_ARCHIVED = 00100000b
|
||||||
FA_ANY = 00111111b
|
FA_ANY = 00111111b
|
||||||
|
49
programs/develop/libraries/libs-dev/libio/libio_debug.asm
Normal file
49
programs/develop/libraries/libs-dev/libio/libio_debug.asm
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
|
||||||
|
macro debug_FileInfoHeader ptr {
|
||||||
|
DEBUGF 1, "FileInfoHeader (0x%x)\n", ptr
|
||||||
|
DEBUGF 1, "Version: %u\n", [ptr + FileInfoHeader.Version]:4
|
||||||
|
DEBUGF 1, "FilesRead: %u\n", [ptr + FileInfoHeader.FilesRead]:4
|
||||||
|
DEBUGF 1, "FilesCount: %u\n\n", [ptr + FileInfoHeader.FilesCount]:4
|
||||||
|
}
|
||||||
|
|
||||||
|
macro debug_FileInfoA ptr {
|
||||||
|
DEBUGF 1, "FileInfoA (0x%x)\n", ptr
|
||||||
|
DEBUGF 1, "Attributes: 0x%x\n", [ptr + FileInfoA.Attributes]:8
|
||||||
|
DEBUGF 1, "Flags: 0x%x\n", [ptr + FileInfoA.Flags]:8
|
||||||
|
DEBUGF 1, "FileSizeLow: 0x%x\n", [ptr + FileInfoA.FileSize]:8
|
||||||
|
DEBUGF 1, "FileSizeHigh: 0x%x\n", [ptr + FileInfoA.FileSize+4]:8
|
||||||
|
push eax
|
||||||
|
lea eax, [ptr + FileInfoA.FileName]
|
||||||
|
DEBUGF 1, "FileName: %s\n\n", eax
|
||||||
|
pop eax
|
||||||
|
}
|
||||||
|
|
||||||
|
macro debug_FileInfoBlock ptr {
|
||||||
|
DEBUGF 1, "FileInfoBlock (0x%x)\n", ptr
|
||||||
|
DEBUGF 1, "Function: %u\n", [ptr + FileInfoBlock.Function]:4
|
||||||
|
DEBUGF 1, "Position: %u\n", [ptr + FileInfoBlock.Position]:4
|
||||||
|
DEBUGF 1, "Flags: 0x%x\n", [ptr + FileInfoBlock.Flags]:8
|
||||||
|
DEBUGF 1, "Count: %u\n", [ptr + FileInfoBlock.Count]:4
|
||||||
|
DEBUGF 1, "Buffer: 0x%x\n", [ptr + FileInfoBlock.Buffer]:8
|
||||||
|
DEBUGF 1, "FileName: %s\n\n", [ptr + FileInfoBlock.FileName]:8
|
||||||
|
}
|
||||||
|
|
||||||
|
macro debug_FindOptions ptr {
|
||||||
|
DEBUGF 1, "FindOptions (0x%x)\n", ptr
|
||||||
|
DEBUGF 1, "Attributes: 0x%x\n", [ptr + FindOptions.Attributes]:8
|
||||||
|
DEBUGF 1, "Mask: %s\n\n", [ptr + FindOptions.Mask]
|
||||||
|
}
|
||||||
|
|
||||||
|
macro debug_FindFileBlock ptr {
|
||||||
|
push eax
|
||||||
|
mov eax, ptr
|
||||||
|
DEBUGF 1, "FindFileBlock (0x%x)\n\n", eax
|
||||||
|
debug_FileInfoHeader eax
|
||||||
|
add eax, sizeof.FileInfoHeader
|
||||||
|
debug_FileInfoA eax
|
||||||
|
add eax, sizeof.FileInfoA
|
||||||
|
debug_FileInfoBlock eax
|
||||||
|
add eax, sizeof.FileInfoBlock
|
||||||
|
debug_FindOptions eax
|
||||||
|
pop eax
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user