add opendir, add closedir

This commit is contained in:
Marian Ohligs 2011-11-08 16:45:16 +01:00
parent 92c1bbae62
commit c63fa01de6
3 changed files with 10 additions and 5 deletions

View file

@ -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?

View file

@ -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;

View file

@ -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;