11#include <l4/l4re_vfs/vfs.h> 
   12#include <l4/crtn/initpriorities.h> 
   14extern "C" void l4re_vfs_select_poll_notify(
void);
 
   33  void *
operator new (
size_t size) 
noexcept 
   34  { 
return vfs_ops->malloc(size); }
 
   36  void *
operator new (size_t, 
void *m) 
noexcept 
   39  void operator delete (
void *m)
 
   51  ssize_t 
readv(
const struct iovec*, 
int) 
noexcept override 
 
   55  ssize_t 
writev(
const struct iovec*, 
int) 
noexcept override 
 
   59  ssize_t 
pwritev(
const struct iovec*, 
int, off64_t) 
noexcept override 
 
   63  ssize_t 
preadv(
const struct iovec*, 
int, off64_t) 
noexcept override 
 
   67  off64_t 
lseek(off64_t, 
int) 
noexcept override 
 
   75  int fsync() const noexcept
 override 
 
   83  int ioctl(
unsigned long, va_list) 
noexcept override 
 
   86  int fstat(
struct stat64 *) 
const noexcept override 
 
  106  int set_lock(
struct flock64 *, 
bool) 
noexcept override 
 
  114  int fchmodat(
const char *, mode_t, 
int) 
noexcept override 
 
  118  int utime(
const struct utimbuf *) 
noexcept override 
 
  122  int utimes(
const struct timeval [2]) 
noexcept override 
 
  126  int utimensat(
const char *, 
const struct timespec [2], 
int) 
noexcept override 
 
  130  int mkdir(
const char *, mode_t) 
noexcept override 
 
  134  int unlink(
const char *) 
noexcept override 
 
  138  int rename(
const char *, 
const char *) 
noexcept override 
 
  142  int link(
const char *, 
const char *) 
noexcept override 
 
  146  int symlink(
const char *, 
const char *) 
noexcept override 
 
  150  int rmdir(
const char *) 
noexcept override 
 
  157  ssize_t getdents(
char *, 
size_t) 
noexcept override 
  163  int bind(sockaddr 
const *, socklen_t) 
noexcept override 
  164  { 
return -ENOTSOCK; }
 
  166  int connect(sockaddr 
const *, socklen_t) 
noexcept override 
  167  { 
return -ENOTSOCK; }
 
  169  ssize_t send(
void const *, 
size_t, 
int) 
noexcept override 
  170  { 
return -ENOTSOCK; }
 
  172  ssize_t recv(
void *, 
size_t, 
int) 
noexcept override 
  173  { 
return -ENOTSOCK; }
 
  175  ssize_t sendto(
void const *, 
size_t, 
int, sockaddr 
const *, socklen_t) 
noexcept 
  177  { 
return -ENOTSOCK; }
 
  179  ssize_t recvfrom(
void *, 
size_t, 
int, sockaddr *, socklen_t *) 
noexcept override 
  180  { 
return -ENOTSOCK; }
 
  182  ssize_t sendmsg(msghdr 
const *, 
int) 
noexcept override 
  183  { 
return -ENOTSOCK; }
 
  185  ssize_t recvmsg(msghdr *, 
int) 
noexcept override 
  186  { 
return -ENOTSOCK; }
 
  188  int getsockopt(
int, 
int, 
void *, socklen_t *) 
noexcept override 
  189  { 
return -ENOTSOCK; }
 
  191  int setsockopt(
int, 
int, 
void const *, socklen_t) 
noexcept override 
  192  { 
return -ENOTSOCK; }
 
  194  int listen(
int) 
noexcept override 
  195  { 
return -ENOTSOCK; }
 
  197  int accept(sockaddr *, socklen_t *) 
noexcept override 
  198  { 
return -ENOTSOCK; }
 
  200  int shutdown(
int) 
noexcept override 
  201  { 
return -ENOTSOCK; }
 
  203  int getsockname(sockaddr *, socklen_t *) 
noexcept override 
  204  { 
return -ENOTSOCK; }
 
  206  int getpeername(sockaddr *, socklen_t *) 
noexcept override 
  207  { 
return -ENOTSOCK; }
 
  224  int get_entry(const 
char *, 
int, mode_t, 
cxx::Ref_ptr<
File> *) noexcept
 override 
 
  232Be_file::~Be_file() noexcept {}
 
  234class Be_file_pos : 
public Be_file 
  237  Be_file_pos() noexcept : Be_file(), _pos(0) {}
 
  239  virtual off64_t size() const noexcept = 0;
 
  241  ssize_t readv(const struct iovec *v, 
int iovcnt) noexcept
 override 
  243    ssize_t r = preadv(v, iovcnt, _pos);
 
  249  ssize_t writev(
const struct iovec *v, 
int iovcnt) 
noexcept override 
  251    ssize_t r = pwritev(v, iovcnt, _pos);
 
  257  ssize_t preadv(
const struct iovec *v, 
int iovcnt, off64_t offset) 
noexcept override = 0;
 
  258  ssize_t pwritev(
const struct iovec *v, 
int iovcnt, off64_t offset) 
noexcept override = 0;
 
  260  off64_t lseek(off64_t offset, 
int whence) 
noexcept override 
  265      case SEEK_SET: r = offset; 
break;
 
  266      case SEEK_CUR: r = _pos + offset; 
break;
 
  267      case SEEK_END: r = size() + offset; 
break;
 
  268      default: 
return -EINVAL;
 
  278  ~Be_file_pos() noexcept = 0;
 
  281  off64_t pos() const noexcept { 
return _pos; }
 
  287inline Be_file_pos::~Be_file_pos() noexcept {}
 
  289class Be_file_stream : 
public Be_file 
  292  ssize_t preadv(
const struct iovec *v, 
int iovcnt, off64_t) 
noexcept override 
  293  { 
return readv(v, iovcnt); }
 
  295  ssize_t pwritev(
const struct iovec *v, 
int iovcnt, off64_t) 
noexcept override 
  296  { 
return writev(v, iovcnt); }
 
  298  ~Be_file_stream() noexcept = 0;
 
  302inline Be_file_stream::~Be_file_stream() noexcept {}
 
  313  char const *
const _fstype;
 
  325  : File_system(), _fstype(fstype)
 
  327    vfs_ops->register_file_system(
this);
 
 
  338    vfs_ops->unregister_file_system(
this);
 
 
  346  char const *
type() const noexcept
 override { 
return _fstype; }
 
 
  351#define L4RE_VFS_FILE_SYSTEM_ATTRIBUTE \ 
  352     __attribute__((init_priority(INIT_PRIO_LATE))) 
 
~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 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.
 
off64_t lseek(off64_t, int) noexcept override
Default backend for POSIX seek and lseek functions.
 
int get_status_flags() const noexcept override
Default backend for POSIX fcntl subfunctions.
 
int ftruncate(off64_t) noexcept override
Default backend for the POSIX truncate, ftruncate and similar 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 fstat(struct stat64 *) const noexcept override
Get status information for the file.
 
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.
 
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.
 
@ Invalid
Invalid capability selector.
 
C++ interface for capabilities.
 
A reference-counting pointer with automatic cleanup.
 
Virtual file system for interfaces in POSIX libc.