#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;// inode 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; }