59 lines
950 B
C
59 lines
950 B
C
#include <fcntl.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <sys/dirent.h>
|
|
#include "fs.h"
|
|
#include "core.h"
|
|
|
|
/*
|
|
* Open a directory
|
|
*/
|
|
__export DIR *opendir(const char *path)
|
|
{
|
|
int rv;
|
|
struct file *file;
|
|
|
|
rv = searchdir(path, O_RDONLY|O_DIRECTORY);
|
|
if (rv < 0)
|
|
return NULL;
|
|
|
|
file = handle_to_file(rv);
|
|
|
|
if (file->inode->mode != DT_DIR) {
|
|
_close_file(file);
|
|
return NULL;
|
|
}
|
|
|
|
return (DIR *)file;
|
|
}
|
|
|
|
/*
|
|
* Read one directory entry at one time.
|
|
*/
|
|
__export struct dirent *readdir(DIR *dir)
|
|
{
|
|
static struct dirent buf;
|
|
struct file *dd_dir = (struct file *)dir;
|
|
int rv = -1;
|
|
|
|
if (dd_dir) {
|
|
if (dd_dir->fs->fs_ops->readdir) {
|
|
rv = dd_dir->fs->fs_ops->readdir(dd_dir, &buf);
|
|
}
|
|
}
|
|
|
|
return rv < 0 ? NULL : &buf;
|
|
}
|
|
|
|
/*
|
|
* Close a directory
|
|
*/
|
|
__export int closedir(DIR *dir)
|
|
{
|
|
struct file *dd_dir = (struct file *)dir;
|
|
_close_file(dd_dir);
|
|
return 0;
|
|
}
|
|
|
|
|