add opendir, add closedir
This commit is contained in:
parent
92c1bbae62
commit
c63fa01de6
3 changed files with 10 additions and 5 deletions
4
fs/fs.c
4
fs/fs.c
|
@ -92,7 +92,7 @@ int open_fs(fildes_t* file, const char* name)
|
|||
j++;
|
||||
}
|
||||
|
||||
kprintf("-------------: dir_node = %p, file_node = %p, name = %s", dir_node, file_node, fname);
|
||||
//kprintf("dir_node = %p, file_node = %p, name = %s", dir_node, file_node, fname);
|
||||
/* file exists */
|
||||
if(file_node) {
|
||||
spinlock_lock(&file_node->lock);
|
||||
|
@ -101,7 +101,7 @@ int open_fs(fildes_t* file, const char* name)
|
|||
if (file_node->open != 0)
|
||||
ret = file->node->open(file, NULL);
|
||||
spinlock_unlock(&file_node->lock);
|
||||
} else if (dir_node) { /* file doesn't exist */
|
||||
} else if (dir_node) { /* file doesn't exist or opendir was called */
|
||||
spinlock_lock(&dir_node->lock);
|
||||
file->node = dir_node;
|
||||
// Has the dir_node got an open callback?
|
||||
|
|
|
@ -212,6 +212,11 @@ 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;
|
||||
|
||||
/* open file was called: */
|
||||
if (!(file->flags & O_CREAT))
|
||||
return -ENOENT;
|
||||
|
||||
|
|
|
@ -53,11 +53,12 @@ _DEFUN (opendir, (name),
|
|||
int fd;
|
||||
|
||||
fd = open(name, 0);
|
||||
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
dirp = (DIR *)malloc(sizeof(DIR));
|
||||
if (dirp == NULL) {
|
||||
close (fd);
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -65,12 +66,11 @@ _DEFUN (opendir, (name),
|
|||
dirp->dd_len = 512;
|
||||
|
||||
if (dirp->dd_buf == NULL) {
|
||||
close (fd);
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
dirp->dd_fd = fd;
|
||||
dirp->dd_loc = 0;
|
||||
|
||||
/* Set up seek point for rewinddir. */
|
||||
dirp->dd_seek = 0;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue