Use dyndisk KolibriOS code, add test prototypes.
This commit is contained in:
parent
f3946d5a7d
commit
9c7ebc5136
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,3 +3,5 @@
|
||||
*.o
|
||||
kofu
|
||||
kofuse
|
||||
*.img
|
||||
*.xz
|
||||
|
2
img/sum
Normal file
2
img/sum
Normal file
@ -0,0 +1,2 @@
|
||||
SHA3-256 (xfs4_crc0_ftype0.img) = 32ee5a4aba6dd518f8ebebffea617a6c587c26315e0930ecd20acba191733283
|
||||
SHA3-256 (xfs4_crc0_ftype1.img) = ba8a3b4de31fcbd640e9a69166422a5ed08f71cdba28ac5cd3bcdd71ee5a6276
|
58
kocdecl.asm
58
kocdecl.asm
@ -51,6 +51,8 @@ public kos_fuse_init
|
||||
kos_fuse_init:
|
||||
push ebx esi edi ebp
|
||||
|
||||
mov [pg_data.pages_free], (128*1024*1024)/0x1000
|
||||
|
||||
mov eax, [esp + 0x14]
|
||||
mov [fd], eax
|
||||
|
||||
@ -78,26 +80,24 @@ kos_fuse_init:
|
||||
;char *kos_fuse_readdir(const char *path, off_t offset)
|
||||
public kos_fuse_readdir
|
||||
kos_fuse_readdir:
|
||||
;DEBUGF 1, '#kos_fuse_readdir\n'
|
||||
push ebx esi edi ebp
|
||||
|
||||
mov edx, sf70_params
|
||||
mov dword[edx + 0x00], 1
|
||||
mov eax, [esp + 0x18] ; offset
|
||||
mov [edx + 0x04], eax
|
||||
mov dword[edx + 0x08], 1
|
||||
mov dword[edx + 0x08], 1 ; cp866
|
||||
mov dword[edx + 0x0c], 100
|
||||
mov dword[edx + 0x10], sf70_buffer
|
||||
mov eax, [esp + 0x14] ; path
|
||||
inc eax ; skip '/'
|
||||
mov [edx + 0x14], eax
|
||||
mov byte[edx + 0x14], 0
|
||||
mov [edx + 0x15], eax
|
||||
|
||||
mov ebp, [fs_struct]
|
||||
mov ebx, sf70_params
|
||||
mov esi, eax
|
||||
push 0
|
||||
call xfs_ReadFolder
|
||||
pop eax
|
||||
|
||||
pushad ; file_system_lfn writes here
|
||||
call file_system_lfn
|
||||
popad
|
||||
pop ebp edi esi ebx
|
||||
mov eax, sf70_buffer
|
||||
ret
|
||||
@ -106,6 +106,7 @@ kos_fuse_readdir:
|
||||
;void *kos_fuse_getattr(const char *path)
|
||||
public kos_fuse_getattr
|
||||
kos_fuse_getattr:
|
||||
;DEBUGF 1, '#kos_fuse_getattr\n'
|
||||
push ebx esi edi ebp
|
||||
|
||||
mov edx, sf70_params
|
||||
@ -115,16 +116,13 @@ kos_fuse_getattr:
|
||||
mov dword[edx + 0x0c], 0
|
||||
mov dword[edx + 0x10], sf70_buffer
|
||||
mov eax, [esp + 0x14] ; path
|
||||
inc eax ; skip '/'
|
||||
mov [edx + 0x14], eax
|
||||
mov byte[edx + 0x14], 0
|
||||
mov [edx + 0x15], eax
|
||||
|
||||
mov ebp, [fs_struct]
|
||||
mov ebx, sf70_params
|
||||
mov esi, eax
|
||||
push 0
|
||||
call xfs_GetFileInfo
|
||||
pop eax
|
||||
|
||||
pushad ; file_system_lfn writes here
|
||||
call file_system_lfn
|
||||
popad
|
||||
pop ebp edi esi ebx
|
||||
mov eax, sf70_buffer
|
||||
ret
|
||||
@ -169,7 +167,7 @@ proc disk_read stdcall, userdata, buffer, startsector:qword, numsectors
|
||||
mov ebx, [fd]
|
||||
mov edx, SEEK_SET
|
||||
int 0x80
|
||||
DEBUGF 1, "lseek: %x\n", eax
|
||||
;DEBUGF 1, "lseek: %x\n", eax
|
||||
popad
|
||||
|
||||
pushad
|
||||
@ -180,7 +178,7 @@ DEBUGF 1, "lseek: %x\n", eax
|
||||
mov edx, [edx]
|
||||
imul edx, 512
|
||||
int 0x80
|
||||
DEBUGF 1, "read: %d\n", eax
|
||||
;DEBUGF 1, "read: %d\n", eax
|
||||
popad
|
||||
|
||||
movi eax, DISK_STATUS_OK
|
||||
@ -248,7 +246,8 @@ proc alloc_kernel_space _size
|
||||
ret
|
||||
endp
|
||||
|
||||
proc alloc_pages _size
|
||||
proc alloc_pages _cnt
|
||||
mov eax, [_cnt]
|
||||
shl eax, 12
|
||||
call malloc
|
||||
ret
|
||||
@ -260,8 +259,9 @@ endp
|
||||
free:
|
||||
ret
|
||||
|
||||
kernel_free:
|
||||
proc kernel_free blah
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
mutex_init:
|
||||
@ -357,12 +357,11 @@ ends
|
||||
|
||||
file_disk FILE_DISK
|
||||
|
||||
;partition_offset dd 2048*512
|
||||
alloc_pos dd alloc_base
|
||||
sf70_params rd 6
|
||||
msg_no_partition db 'no partition detected',0x0a
|
||||
msg_no_partition.size = $ - msg_no_partition
|
||||
disk_name db 'hd',0
|
||||
disk_name db 'hd0',0
|
||||
current_slot dd ?
|
||||
pg_data PG_DATA
|
||||
ide_channel1_mutex MUTEX
|
||||
@ -377,7 +376,12 @@ IncludeIGlobals
|
||||
|
||||
|
||||
section '.bss' writeable align 16
|
||||
;mbr_buffer rb 4096*3
|
||||
fd rd 1
|
||||
disk dd ?
|
||||
alloc_base rb 32*1024*1024
|
||||
fs_struct rd 1
|
||||
sf70_buffer rb 16*1024*1024
|
||||
IncludeUGlobals
|
||||
DiskNumber db ?
|
||||
ChannelNumber db ?
|
||||
DevErrorCode dd ?
|
||||
@ -386,9 +390,3 @@ CDDataBuf_pointer dd ?
|
||||
DRIVE_DATA: rb 0x4000
|
||||
cdpos dd ?
|
||||
cd_appl_data rd 1
|
||||
fd rd 1
|
||||
disk dd ?
|
||||
alloc_base rb 4*1024*1024
|
||||
fs_struct rd 1
|
||||
sf70_buffer rb 1024*1024
|
||||
IncludeUGlobals
|
||||
|
2
makefile
2
makefile
@ -12,7 +12,7 @@ kofuse: kofuse.o kocdecl.o
|
||||
$(CC) $(LDFLAGS) $^ -o $@ `pkg-config fuse3 --libs`
|
||||
|
||||
kocdecl.o: kocdecl.asm kocdecl.h $(KERNEL_TRUNK)/fs/ext.inc $(KERNEL_TRUNK)/fs/xfs.inc $(KERNEL_TRUNK)/fs/xfs.asm
|
||||
INCLUDE="$(KERNEL_TRUNK);$(KERNEL_TRUNK)/fs;$(KERNEL_TRUNK)/blkdev" $(FASM) $< $@ -m 123456
|
||||
INCLUDE="$(KERNEL_TRUNK);$(KERNEL_TRUNK)/fs;$(KERNEL_TRUNK)/blkdev" $(FASM) $< $@ -m 1234567
|
||||
|
||||
kofu.o: kofu.c kocdecl.h
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
|
2
test/t_all
Normal file
2
test/t_all
Normal file
@ -0,0 +1,2 @@
|
||||
ls /hd0/1/123
|
||||
stat /hd0/1/123/two
|
1
test/t_stat
Normal file
1
test/t_stat
Normal file
@ -0,0 +1 @@
|
||||
stat /hd0/1/123/two
|
Loading…
Reference in New Issue
Block a user