11#include <l4/l4re_vfs/vfs.h>
12#include <l4/crtn/initpriorities.h>
14namespace L4Re {
namespace Vfs {
31 void *
operator new (
size_t size)
noexcept
32 {
return vfs_ops->malloc(size); }
34 void *
operator new (size_t,
void *m)
noexcept
37 void operator delete (
void *m)
49 ssize_t
readv(
const struct iovec*,
int)
noexcept override
49 ssize_t
readv(
const struct iovec*,
int)
noexcept override {
…}
53 ssize_t
writev(
const struct iovec*,
int)
noexcept override
53 ssize_t
writev(
const struct iovec*,
int)
noexcept override {
…}
57 ssize_t
pwritev(
const struct iovec*,
int, off64_t)
noexcept override
57 ssize_t
pwritev(
const struct iovec*,
int, off64_t)
noexcept override {
…}
61 ssize_t
preadv(
const struct iovec*,
int, off64_t)
noexcept override
61 ssize_t
preadv(
const struct iovec*,
int, off64_t)
noexcept override {
…}
65 off64_t
lseek64(off64_t,
int)
noexcept override
65 off64_t
lseek64(off64_t,
int)
noexcept override {
…}
73 int fsync() const noexcept
override
73 int fsync() const noexcept
override {
…}
81 int ioctl(
unsigned long, va_list)
noexcept override
81 int ioctl(
unsigned long, va_list)
noexcept override {
…}
84 int fstat64(
struct stat64 *)
const noexcept override
84 int fstat64(
struct stat64 *)
const noexcept override {
…}
104 int set_lock(
struct flock64 *,
bool)
noexcept override
104 int set_lock(
struct flock64 *,
bool)
noexcept override {
…}
112 int fchmodat(
const char *, mode_t,
int)
noexcept override
112 int fchmodat(
const char *, mode_t,
int)
noexcept override {
…}
116 int utime(
const struct utimbuf *)
noexcept override
116 int utime(
const struct utimbuf *)
noexcept override {
…}
120 int utimes(
const struct timeval [2])
noexcept override
120 int utimes(
const struct timeval [2])
noexcept override {
…}
124 int utimensat(
const char *,
const struct timespec [2],
int)
noexcept override
124 int utimensat(
const char *,
const struct timespec [2],
int)
noexcept override {
…}
128 int mkdir(
const char *, mode_t)
noexcept override
128 int mkdir(
const char *, mode_t)
noexcept override {
…}
132 int unlink(
const char *)
noexcept override
132 int unlink(
const char *)
noexcept override {
…}
136 int rename(
const char *,
const char *)
noexcept override
136 int rename(
const char *,
const char *)
noexcept override {
…}
140 int link(
const char *,
const char *)
noexcept override
140 int link(
const char *,
const char *)
noexcept override {
…}
144 int symlink(
const char *,
const char *)
noexcept override
144 int symlink(
const char *,
const char *)
noexcept override {
…}
148 int rmdir(
const char *)
noexcept override
148 int rmdir(
const char *)
noexcept override {
…}
155 ssize_t getdents(
char *,
size_t)
noexcept override
161 int bind(sockaddr
const *, socklen_t)
noexcept override
162 {
return -ENOTSOCK; }
164 int connect(sockaddr
const *, socklen_t)
noexcept override
165 {
return -ENOTSOCK; }
167 ssize_t send(
void const *,
size_t,
int)
noexcept override
168 {
return -ENOTSOCK; }
170 ssize_t recv(
void *,
size_t,
int)
noexcept override
171 {
return -ENOTSOCK; }
173 ssize_t sendto(
void const *,
size_t,
int, sockaddr
const *, socklen_t)
noexcept
175 {
return -ENOTSOCK; }
177 ssize_t recvfrom(
void *,
size_t,
int, sockaddr *, socklen_t *)
noexcept override
178 {
return -ENOTSOCK; }
180 ssize_t sendmsg(msghdr
const *,
int)
noexcept override
181 {
return -ENOTSOCK; }
183 ssize_t recvmsg(msghdr *,
int)
noexcept override
184 {
return -ENOTSOCK; }
186 int getsockopt(
int,
int,
void *, socklen_t *)
noexcept override
187 {
return -ENOTSOCK; }
189 int setsockopt(
int,
int,
void const *, socklen_t)
noexcept override
190 {
return -ENOTSOCK; }
192 int listen(
int)
noexcept override
193 {
return -ENOTSOCK; }
195 int accept(sockaddr *, socklen_t *)
noexcept override
196 {
return -ENOTSOCK; }
198 int shutdown(
int)
noexcept override
199 {
return -ENOTSOCK; }
201 int getsockname(sockaddr *, socklen_t *)
noexcept override
202 {
return -ENOTSOCK; }
204 int getpeername(sockaddr *, socklen_t *)
noexcept override
205 {
return -ENOTSOCK; }
222 int get_entry(const
char *,
int, mode_t,
cxx::Ref_ptr<
File> *) noexcept
override
230Be_file::~Be_file() noexcept {}
232class Be_file_pos :
public Be_file
235 Be_file_pos() noexcept : Be_file(), _pos(0) {}
237 virtual off64_t size() const noexcept = 0;
239 ssize_t readv(const struct iovec *v,
int iovcnt) noexcept
override
241 ssize_t r = preadv(v, iovcnt, _pos);
247 ssize_t writev(
const struct iovec *v,
int iovcnt)
noexcept override
249 ssize_t r = pwritev(v, iovcnt, _pos);
255 ssize_t preadv(
const struct iovec *v,
int iovcnt, off64_t offset)
noexcept override = 0;
256 ssize_t pwritev(
const struct iovec *v,
int iovcnt, off64_t offset)
noexcept override = 0;
258 off64_t lseek64(off64_t offset,
int whence)
noexcept override
263 case SEEK_SET: r = offset;
break;
264 case SEEK_CUR: r = _pos + offset;
break;
265 case SEEK_END: r = size() + offset;
break;
266 default:
return -EINVAL;
276 ~Be_file_pos() noexcept = 0;
279 off64_t pos() const noexcept {
return _pos; }
285inline Be_file_pos::~Be_file_pos() noexcept {}
287class Be_file_stream :
public Be_file
290 ssize_t preadv(
const struct iovec *v,
int iovcnt, off64_t)
noexcept override
291 {
return readv(v, iovcnt); }
293 ssize_t pwritev(
const struct iovec *v,
int iovcnt, off64_t)
noexcept override
294 {
return writev(v, iovcnt); }
296 ~Be_file_stream() noexcept = 0;
300inline Be_file_stream::~Be_file_stream() noexcept {}
311 char const *
const _fstype;
325 vfs_ops->register_file_system(
this);
336 vfs_ops->unregister_file_system(
this);
344 char const *
type() const noexcept
override {
return _fstype; }
349#define L4RE_VFS_FILE_SYSTEM_ATTRIBUTE \
350 __attribute__((init_priority(INIT_PRIO_LATE)))
14namespace L4Re {
namespace Vfs {
…}
Boilerplate class for implementing a L4Re::Vfs::File_system.
~Be_file_system() noexcept
Destroy a file-system object.
char const * type() const noexcept override
Return the file-system type.
Be_file_system(char const *fstype) noexcept
Create a file-system object for the given fstype.
Boiler plate class for implementing an open file for L4Re::Vfs.
int faccessat(const char *, int, int) noexcept override
Default backend for POSIX access and faccessat functions.
ssize_t writev(const struct iovec *, int) noexcept override
Default backend for POSIX write and writev functions.
int unlink(const char *) noexcept override
Default backend for POSIX unlink, unlinkat.
int fchmodat(const char *, mode_t, int) noexcept override
Default backend for POSIX fchmodat function.
int ioctl(unsigned long, va_list) noexcept override
Default backend for POSIX ioctl.
int utimensat(const char *, const struct timespec[2], int) noexcept override
Default backend for POSIX utimensat.
int unlock_all_locks() noexcept override
Unlock all locks on the file.
bool check_ready(Ready_type) noexcept override
Default implementation of a readiness check.
ssize_t preadv(const struct iovec *, int, off64_t) noexcept override
Default backend for POSIX pread and preadv functions.
int rmdir(const char *) noexcept override
Default backend for POSIX rmdir, rmdirat.
int utimes(const struct timeval[2]) noexcept override
Default backend for POSIX utimes.
int set_status_flags(long) noexcept override
Default backend for POSIX fcntl subfunctions.
ssize_t pwritev(const struct iovec *, int, off64_t) noexcept override
Default backend for POSIX pwrite and pwritev functions.
ssize_t readv(const struct iovec *, int) noexcept override
Default backend for POSIX read and readv functions.
int fsync() const noexcept override
Default backend for POSIX fsync.
int mkdir(const char *, mode_t) noexcept override
Default backend for POSIX mkdir and mkdirat.
int ftruncate64(off64_t) noexcept override
Default backend for the POSIX truncate, ftruncate and similar functions.
int fchmod(mode_t) noexcept override
Default backend for POSIX chmod and fchmod.
int set_lock(struct flock64 *, bool) noexcept override
Default backend for POSIX fcntl subfunctions.
int get_status_flags() const noexcept override
Default backend for POSIX fcntl subfunctions.
int fstat64(struct stat64 *) const noexcept override
Get status information for the file.
off64_t lseek64(off64_t, int) noexcept override
Default backend for POSIX seek and lseek functions.
int fdatasync() const noexcept override
Default backend for POSIX fdatasync.
int symlink(const char *, const char *) noexcept override
Default backend for POSIX symlink, symlinkat.
L4::Cap< L4Re::Dataspace > data_space() noexcept override
Get an L4Re::Dataspace object for the file.
int utime(const struct utimbuf *) noexcept override
Default backend for POSIX utime.
int rename(const char *, const char *) noexcept override
Default backend for POSIX rename, renameat.
int get_lock(struct flock64 *) noexcept override
Default backend for POSIX fcntl subfunctions.
int link(const char *, const char *) noexcept override
Default backend for POSIX link, linkat.
ssize_t readlink(char *, size_t) override
Default backend for POSIX readlink, readlinkat.
Basic interface for an L4Re::Vfs file system.
The basic interface for an open POSIX file.
Ready_type
Type of I/O operation/condition a file can indicate readiness.
Interface for the POSIX backends of an application.
C++ interface for capabilities.
A reference-counting pointer with automatic cleanup.