diff options
| author | Miguel <m.i@gmx.at> | 2018-09-15 00:30:36 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-15 00:30:36 +0200 |
| commit | fe7d0332267ef1e62153b685d2b5574ce624a4bc (patch) | |
| tree | 0c5bb5af4275b55b141ff598d9daedd99eb12603 /fs/fd.c | |
| parent | c4b20a0ebbde1348e1e085e2ea3be35345d92b7c (diff) | |
reading ext2 files and using our abstractions
Diffstat (limited to 'fs/fd.c')
| -rw-r--r-- | fs/fd.c | 86 |
1 files changed, 86 insertions, 0 deletions
@@ -0,0 +1,86 @@ +#include "kernel.h" +#include "fd.h" +#include "fifo.h" +#include "kmalloc.h" +#include "ext2.h" +#include "log.h" + +bool fd_write(fd* f,uint8_t c) +{ + return f->write(f->data,c); +} + +uint8_t fd_read(fd* f) +{ + return f->read(f->data); +} + +bool fd_has(fd* f) +{ + return f->has(f->data); +} + +bool fd_close(fd* f) +{ + return f->close(f->data); +} + +fd fd_from_fifo(fifo* fif) +{ + fd f; + f.type=FD_TYPE_FIFO_BUFFERED; + f.data=fif; + f.read=fifo_get; + f.write=fifo_put; +// f.close=fd_close; + f.has=fifo_has; + return f; +} + +//---- +void* ext2_init(char *path) +{ + uint32_t *data=kballoc(1); + uint32_t inode= ext2_filename_to_inode(VMEM_EXT2_RAMIMAGE,path); + data[0]=inode;// pos + data[1]=0; //pos + + return data; +} + +void ext2_write(void* x) +{ + kpanic("not impl"); +} + +uint8_t ext2_read(uint32_t* data) +{ + char c; + ext2_read_inode(VMEM_EXT2_RAMIMAGE,data[0],&c,&data[1],1); + return c; +} + +bool ext2_has(uint32_t* data) +{ + uint32_t save=data[1]; + uint32_t c=ext2_read_inode(VMEM_EXT2_RAMIMAGE,data[0],&c,&data[1],1); + data[1]=save; + return (c>0); + +} +void ext2_close(void* x) +{ + kbfree(x); +} + +fd fd_from_path(char* path) +{ + fd f; + f.type=FD_TYPE_EXT2_FILE; + f.data=ext2_init(path); + f.read=ext2_read; + f.write=ext2_write; + f.close=ext2_close; + f.has=ext2_has; + return f; +} |
