fix bug
This commit is contained in:
parent
6a10fb1a0b
commit
b292e96cec
2 changed files with 76 additions and 71 deletions
6
fs/fs.c
6
fs/fs.c
|
@ -86,13 +86,15 @@ int open_fs(fildes_t* file, const char* name)
|
|||
i++; j++;
|
||||
}
|
||||
fname[i] = '\0';
|
||||
dir_node = file_node; /* file must be a dictionary */
|
||||
dir_node = file_node; /* file must be a directory */
|
||||
file_node = finddir_fs(dir_node, fname);
|
||||
if (name[j] == '/')
|
||||
j++;
|
||||
}
|
||||
|
||||
//kprintf("dir_node = %p, file_node = %p, name = %s", dir_node, file_node, fname);
|
||||
//kprintf("dir_node = %p, file_node = %p, name = %s \n", dir_node, file_node, fname);
|
||||
if(fname[0] == '\0')
|
||||
kprintf("Ist null");
|
||||
/* file exists */
|
||||
if(file_node) {
|
||||
spinlock_lock(&file_node->lock);
|
||||
|
|
15
fs/initrd.c
15
fs/initrd.c
|
@ -59,8 +59,6 @@ static ssize_t initrd_read(fildes_t* file, uint8_t* buffer, size_t size)
|
|||
{
|
||||
vfs_node_t* node = file->node;
|
||||
|
||||
if (node->type != FS_DIRECTORY) {
|
||||
/*********** The original read function ****************/
|
||||
uint32_t i, pos = 0, found = 0;
|
||||
off_t offset = 0;
|
||||
char* data = NULL;
|
||||
|
@ -105,8 +103,12 @@ static ssize_t initrd_read(fildes_t* file, uint8_t* buffer, size_t size)
|
|||
|
||||
file->offset += size;
|
||||
return size;
|
||||
} else {
|
||||
/*********** The emulated readdir funtion *************/
|
||||
}
|
||||
|
||||
static ssize_t initrd_emu_readdir(fildes_t* file, uint8_t* buffer, size_t size)
|
||||
{
|
||||
vfs_node_t* node = file->node;
|
||||
|
||||
uint32_t i, j, k, count;
|
||||
uint32_t index = file->offset;
|
||||
dirent_t* dirent;
|
||||
|
@ -138,7 +140,6 @@ static ssize_t initrd_read(fildes_t* file, uint8_t* buffer, size_t size)
|
|||
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t initrd_write(fildes_t* file, uint8_t* buffer, size_t size)
|
||||
{
|
||||
|
@ -248,6 +249,7 @@ static int initrd_open(fildes_t* file, const char* name)
|
|||
}
|
||||
|
||||
if (file->node->type == FS_DIRECTORY) {
|
||||
|
||||
/* opendir was called: */
|
||||
if (name[0] == '\0')
|
||||
return 0;
|
||||
|
@ -379,7 +381,7 @@ static vfs_node_t* initrd_mkdir(vfs_node_t* node, const char* name)
|
|||
|
||||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||
new_node->type = FS_DIRECTORY;
|
||||
new_node->read = &initrd_read;
|
||||
new_node->read = &initrd_emu_readdir;
|
||||
new_node->readdir = &initrd_readdir;
|
||||
new_node->finddir = &initrd_finddir;
|
||||
new_node->mkdir = &initrd_mkdir;
|
||||
|
@ -451,6 +453,7 @@ int initrd_init(void)
|
|||
fs_root = &initrd_root;
|
||||
memset(&initrd_root, 0x00, sizeof(vfs_node_t));
|
||||
initrd_root.type = FS_DIRECTORY;
|
||||
initrd_root.read = &initrd_emu_readdir;
|
||||
initrd_root.readdir = &initrd_readdir;
|
||||
initrd_root.finddir = &initrd_finddir;
|
||||
initrd_root.mkdir = &initrd_mkdir;
|
||||
|
|
Loading…
Add table
Reference in a new issue