Skip to content

Commit 6706bbe

Browse files
committed
vfs: pipe
1 parent c3bb462 commit 6706bbe

File tree

17 files changed

+584
-192
lines changed

17 files changed

+584
-192
lines changed

kernel/interfaces/lib/ringbuffer.cppm

Lines changed: 174 additions & 106 deletions
Large diffs are not rendered by default.

kernel/interfaces/lib/semaphore.cppm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ export namespace lib
2727
semaphore &operator=(const semaphore &) = delete;
2828
semaphore &operator=(semaphore &&) = delete;
2929

30-
void wait();
30+
bool wait();
3131
bool wait_for(std::size_t ms);
3232
void signal(bool drop = false);
33+
void signal_all();
3334
};
3435
} // export namespace lib

kernel/interfaces/system/syscall/vfs.cppm

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import std;
77

88
export namespace syscall::vfs
99
{
10+
int openat(int dirfd, const char __user *pathname, int flags, mode_t mode);
1011
int open(const char __user *pathname, int flags, mode_t mode);
1112
int creat(const char __user *pathname, mode_t mode);
12-
int openat(int dirfd, const char __user *pathname, int flags, mode_t mode);
1313

1414
int close(int fd);
1515

@@ -43,4 +43,7 @@ export namespace syscall::vfs
4343
int dup3(int oldfd, int newfd, int flags);
4444

4545
char *getcwd(char __user *buf, std::size_t size);
46+
47+
int pipe2(int __user *pipefd, int flags);
48+
int pipe(int __user *pipefd);
4649
} // export namespace syscall::vfs

kernel/interfaces/system/system.cppm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ export import system.chrono;
88
export import system.bin;
99
export import system.cpu;
1010
export import system.cpu.local;
11-
export import system.dev;
1211
export import system.interrupts;
1312
export import system.memory;
1413
export import system.net;
1514
export import system.pci;
1615
export import system.scheduler;
1716
export import system.syscall;
18-
export import system.vfs;
17+
export import system.vfs;
18+
export import system.vfs.dev;
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
// Copyright (C) 2024-2025 ilobilo
22

3-
export module system.dev;
3+
export module system.vfs.dev;
44

55
import system.vfs;
66
import lib;
77
import std;
88

9-
export namespace dev
9+
export namespace vfs::dev
1010
{
1111
inline constexpr std::uint32_t major(dev_t dev)
1212
{
@@ -33,4 +33,4 @@ export namespace dev
3333

3434
bool register_cdev(std::shared_ptr<vfs::ops> ops, dev_t dev);
3535
std::shared_ptr<vfs::ops> get_cdev_ops(dev_t dev);
36-
} // export namespace dev
36+
} // export namespace vfs::dev
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Copyright (C) 2024-2025 ilobilo
2+
3+
export module system.vfs.pipe;
4+
5+
import system.vfs;
6+
import lib;
7+
import std;
8+
9+
export namespace vfs::pipe
10+
{
11+
std::shared_ptr<vfs::ops> get_ops();
12+
} // export namespace vfs::pipe
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,13 @@ export namespace vfs
152152
return (errno = ENOTTY, -1);
153153
}
154154

155-
virtual std::shared_ptr<vmm::object> map(std::shared_ptr<file> self, bool priv) = 0;
155+
virtual std::shared_ptr<vmm::object> map(std::shared_ptr<file> self, bool priv)
156+
{
157+
lib::unused(self, priv);
158+
return nullptr;
159+
}
156160

157-
virtual bool sync() = 0;
161+
virtual bool sync() { return true; }
158162

159163
virtual ~ops() = default;
160164
};
@@ -212,7 +216,7 @@ export namespace vfs
212216
std::shared_ptr<ops> op;
213217
stat stat;
214218

215-
inode(std::shared_ptr<ops> op) : op { op } { }
219+
inode(std::shared_ptr<ops> op) : op { op }, stat { } { }
216220

217221
virtual ~inode() = default;
218222
};

kernel/source/arch/x86_64/system/syscall.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ namespace x86_64::syscall
4545
[19] = { "readv", vfs::readv },
4646
[20] = { "writev", vfs::writev },
4747
[21] = { "access", vfs::access },
48+
[22] = { "pipe", vfs::pipe },
4849
[23] = { "select", proc::select },
4950
[32] = { "dup", vfs::dup },
5051
[33] = { "dup2", vfs::dup2 },
@@ -79,6 +80,7 @@ namespace x86_64::syscall
7980
[273] = { "set_robust_list", proc::set_robust_list },
8081
[274] = { "get_robust_list", proc::get_robust_list },
8182
[292] = { "dup3", vfs::dup3 },
83+
[293] = { "pipe2", vfs::pipe2 },
8284
[295] = { "preadv", vfs::preadv },
8385
[296] = { "pwritev", vfs::pwritev },
8486
[302] = { "prlimit", proc::prlimit },

kernel/source/drivers/fs/dev/dev.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
module drivers.fs.dev;
44

55
import drivers.initramfs;
6-
import system.dev;
76
import system.vfs;
7+
import system.vfs.dev;
88
import magic_enum;
99
import lib;
1010
import std;
@@ -62,7 +62,7 @@ namespace fs::dev
6262
);
6363
};
6464

65-
using namespace ::dev;
65+
using namespace vfs::dev;
6666
create("/dev/null", stat::s_ifchr | 0666, makedev(1, 3));
6767
create("/dev/zero", stat::s_ifchr | 0666, makedev(1, 5));
6868
create("/dev/full", stat::s_ifchr | 0666, makedev(1, 7));

kernel/source/drivers/fs/dev/mem.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ module drivers.fs.dev.mem;
44

55
import drivers.fs.devtmpfs;
66
import system.memory.virt;
7-
import system.dev;
87
import system.vfs;
8+
import system.vfs.dev;
99
import boot;
1010
import lib;
1111
import std;
@@ -173,7 +173,7 @@ namespace fs::dev::mem
173173
lib::initgraph::require { devtmpfs::mounted_stage() },
174174
lib::initgraph::entail { registered_stage() },
175175
[] {
176-
using namespace ::dev;
176+
using namespace vfs::dev;
177177
register_cdev(null_ops::singleton(), makedev(1, 3));
178178
register_cdev(zero_ops::singleton(), makedev(1, 5));
179179
register_cdev(full_ops::singleton(), makedev(1, 7));

0 commit comments

Comments
 (0)