AquilaOS documentation
How it works, and its code
Loading...
Searching...
No Matches
devpts.c
Go to the documentation of this file.
1
6
7#include <core/system.h>
8#include <core/module.h>
9#include <core/time.h>
10
11#include <fs/vfs.h>
12#include <fs/tmpfs.h>
13#include <fs/devpts.h>
14
15/* devpts's root directory, usually mounted on /dev/pts */
17
24{
25 int err = 0;
26
27 /* devpts is a tmpfs */
30
31 devpts_root = kmalloc(sizeof(struct vnode), &M_VNODE, M_ZERO);
32 if (!devpts_root) return -ENOMEM;
33
35 devpts_root->mode = S_IFDIR | 0775;
36 devpts_root->nlink = 2;
38
39 struct timespec ts;
40 gettime(&ts);
41
42 devpts_root->ctime = ts;
43 devpts_root->atime = ts;
44 devpts_root->mtime = ts;
45
46 err = vfs_install(&devpts);
47
48 if (err) {
51 return err;
52 }
53
54 return 0;
55}
56
65int devpts_mount(struct vnode *dir, int flags, void *data)
66{
67 if (!devpts_root)
68 return -EINVAL;
69
70 return vfs_bind(dir, devpts_root);
71}
72
73struct fs devpts = {
74 .name = "devpts",
75 .nodev = 1,
76 .init = devpts_init,
77 .mount = devpts_mount,
78};
79
struct vnode * devpts_root
Definition devpts.c:16
int devpts_mount(struct vnode *dir, int flags, void *data)
Mounts devpts on a directory: its one root directory is bound there.
Definition devpts.c:65
int devpts_init()
Sets devpts up at boot: tmpfs's operations, and its root directory.
Definition devpts.c:23
struct fs devpts
Definition devpts.c:73
void * kmalloc(size_t size, struct malloc_type *type, int flags)
Allocates memory for one of the kernel's structures.
Definition kvmem.c:123
#define M_ZERO
Definition kvmem.h:26
void kfree(void *)
Frees an object that kmalloc() gave.
Definition kvmem.c:146
#define MODULE_INIT(name, i, f)
Definition module.h:10
#define NULL
Definition stddef.h:27
A filesystem type.
Definition vfs.h:98
struct fops fops
Definition vfs.h:105
struct vops vops
Definition vfs.h:104
A file in memory (a vnode): what its inode says, and the kernel's own state.
Definition vfs.h:113
ino_t ino
Definition vfs.h:114
_time_t atime
Definition vfs.h:123
_time_t ctime
Definition vfs.h:125
nlink_t nlink
Definition vfs.h:121
struct fs * fs
Definition vfs.h:127
_time_t mtime
Definition vfs.h:124
mode_t mode
Definition vfs.h:118
int gettime(struct timespec *ts)
Reads the wall clock (CLOCK_REALTIME).
Definition time.c:29
struct fs tmpfs
Definition tmpfs.c:214
uintptr_t vino_t
Definition types.h:14
int vfs_bind(struct vnode *dir, struct vnode *root)
Mounts a filesystem on a directory: a lookup that reaches dir goes on in root instead.
Definition vfs.c:53
int vfs_install(struct fs *fs)
Installs a filesystem, so that it can be mounted by name.
Definition vfs.c:85