AquilaOS documentation
How it works, and its code
Toggle main menu visibility
Loading...
Searching...
No Matches
readdir.c
Go to the documentation of this file.
1
4
5
#include <
core/system.h
>
6
#include <
fs/vfs.h
>
7
19
ssize_t
vfs_readdir
(
struct
vnode
*dir,
off_t
off,
struct
dirent *dirent)
20
{
21
vfs_log(
LOG_DEBUG
,
"vfs_readdir(dir=%p, off=%d, dirent=%p)\n"
, dir, off, dirent);
22
23
/* invalid request */
24
if
(!dir || !dir->
fs
)
25
return
-EINVAL;
26
27
if
(!S_ISDIR(dir->
mode
))
28
return
-ENOTDIR;
29
30
/* the filesystem doesn't support it */
31
if
(!dir->
fs
->
vops
.
readdir
)
32
return
-ENOSYS;
33
34
return
dir->
fs
->
vops
.
readdir
(dir, off, dirent);
35
}
36
46
int
vfs_finddir
(
struct
vnode
*dir,
const
char
*name,
struct
dirent *dirent)
47
{
48
vfs_log(
LOG_DEBUG
,
"vfs_finddir(dir=%p, name=%s, dirent=%p)\n"
, dir, name, dirent);
49
50
if
(!dir || !dir->
fs
)
51
return
-EINVAL;
52
53
if
(!S_ISDIR(dir->
mode
))
54
return
-ENOTDIR;
55
56
if
(!dir->
fs
->
vops
.
finddir
)
57
return
-ENOSYS;
58
59
return
dir->
fs
->
vops
.
finddir
(dir, name, dirent);
60
}
61
69
int
vfs_dir_empty
(
struct
vnode
*dir)
70
{
71
struct
dirent dirent;
72
off_t
off = 0;
73
ssize_t
ret;
74
75
while
((ret =
vfs_readdir
(dir, off, &dirent)) > 0) {
76
if
(strcmp(dirent.d_name,
"."
) && strcmp(dirent.d_name,
".."
))
77
return
0;
78
79
off += ret;
80
}
81
82
return
ret == 0;
83
}
system.h
LOG_DEBUG
#define LOG_DEBUG
Definition
printk.h:19
vfs_finddir
int vfs_finddir(struct vnode *dir, const char *name, struct dirent *dirent)
Finds the entry of a directory that has a name.
Definition
readdir.c:46
vfs_dir_empty
int vfs_dir_empty(struct vnode *dir)
Says whether a directory is empty, so that it can be removed.
Definition
readdir.c:69
vfs_readdir
ssize_t vfs_readdir(struct vnode *dir, off_t off, struct dirent *dirent)
Reads a directory's entry at an offset.
Definition
readdir.c:19
fs::vops
struct vops vops
Definition
vfs.h:104
vnode
A file in memory (a vnode): what its inode says, and the kernel's own state.
Definition
vfs.h:113
vnode::fs
struct fs * fs
Definition
vfs.h:127
vnode::mode
mode_t mode
Definition
vfs.h:118
vops::finddir
int(*) finddir(struct vnode *dir, const char *name, struct dirent *dirent)
Definition
vfs.h:79
vops::readdir
ssize_t(*) readdir(struct vnode *dir, off_t offset, struct dirent *dirent)
Definition
vfs.h:78
ssize_t
long int ssize_t
Definition
types.h:12
off_t
long int off_t
Definition
types.h:10
vfs.h
kernel
fs
readdir.c
Generated by
1.18.0