• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <fcntl.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <sys/dirent.h>
5 #include "fs.h"
6 #include "core.h"
7 
8 /*
9  * Open a directory
10  */
opendir(const char * path)11 __export DIR *opendir(const char *path)
12 {
13     int rv;
14     struct file *file;
15 
16     rv = searchdir(path, O_RDONLY|O_DIRECTORY);
17     if (rv < 0)
18 	return NULL;
19 
20     file = handle_to_file(rv);
21 
22     if (file->inode->mode != DT_DIR) {
23 	_close_file(file);
24 	return NULL;
25     }
26 
27     return (DIR *)file;
28 }
29 
30 /*
31  * Read one directory entry at one time.
32  */
readdir(DIR * dir)33 __export struct dirent *readdir(DIR *dir)
34 {
35     static struct dirent buf;
36     struct file *dd_dir = (struct file *)dir;
37     int rv = -1;
38 
39     if (dd_dir) {
40         if (dd_dir->fs->fs_ops->readdir) {
41 	    rv = dd_dir->fs->fs_ops->readdir(dd_dir, &buf);
42         }
43     }
44 
45     return rv < 0 ? NULL : &buf;
46 }
47 
48 /*
49  * Close a directory
50  */
closedir(DIR * dir)51 __export int closedir(DIR *dir)
52 {
53     struct file *dd_dir = (struct file *)dir;
54     _close_file(dd_dir);
55     return 0;
56 }
57 
58 
59