L4Re - L4 Runtime Environment
ns_fs.h
1 /*
2  * (c) 2010 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
3  * Alexander Warg <warg@os.inf.tu-dresden.de>
4  * economic rights: Technische Universität Dresden (Germany)
5  *
6  * This file is part of TUD:OS and distributed under the terms of the
7  * GNU General Public License 2.
8  * Please see the COPYING-GPL-2 file for details.
9  *
10  * As a special exception, you may use this file as part of a free software
11  * library without restriction. Specifically, if other files instantiate
12  * templates or use macros or inline functions from this file, or you compile
13  * this file and link it with other files to produce an executable, this
14  * file does not by itself cause the resulting executable to be covered by
15  * the GNU General Public License. This exception does not however
16  * invalidate any other reasons why the executable file might be covered by
17  * the GNU General Public License.
18  */
19 #pragma once
20 
21 #include <l4/l4re_vfs/backend>
22 #include <l4/sys/capability>
23 #include <l4/re/namespace>
24 
25 namespace L4Re { namespace Core {
26 
27 using cxx::Ref_ptr;
28 
29 class Env_dir : public L4Re::Vfs::Be_file
30 {
31 public:
32  explicit Env_dir(L4Re::Env const *env)
33  : _env(env), _current_cap_entry(env->initial_caps())
34  {}
35 
36  ssize_t readv(const struct iovec*, int) throw() { return -EISDIR; }
37  ssize_t writev(const struct iovec*, int) throw() { return -EISDIR; }
38  ssize_t preadv(const struct iovec*, int, off64_t) throw() { return -EISDIR; }
39  ssize_t pwritev(const struct iovec*, int, off64_t) throw() { return -EISDIR; }
40  int fstat64(struct stat64 *) const throw();
41  int faccessat(const char *path, int mode, int flags) throw();
42  int get_entry(const char *path, int flags, mode_t mode,
43  Ref_ptr<L4Re::Vfs::File> *) throw();
44  ssize_t getdents(char *, size_t) throw();
45 
46  ~Env_dir() throw() {}
47 
48 private:
49  int get_ds(const char *path, L4Re::Auto_cap<L4Re::Dataspace>::Cap *ds) throw();
50  bool check_type(Env::Cap_entry const *e, long protocol) throw();
51 
52  L4Re::Env const *_env;
53  Env::Cap_entry const *_current_cap_entry;
54 };
55 
56 class Ns_dir : public L4Re::Vfs::Be_file
57 {
58 public:
59  explicit Ns_dir(L4::Cap<L4Re::Namespace> ns)
60  : _ns(ns), _current_dir_pos(0)
61  {}
62 
63  ssize_t readv(const struct iovec*, int) throw() { return -EISDIR; }
64  ssize_t writev(const struct iovec*, int) throw() { return -EISDIR; }
65  ssize_t preadv(const struct iovec*, int, off64_t) throw() { return -EISDIR; }
66  ssize_t pwritev(const struct iovec*, int, off64_t) throw() { return -EISDIR; }
67  int fstat64(struct stat64 *) const throw();
68  int faccessat(const char *path, int mode, int flags) throw();
69  int get_entry(const char *path, int flags, mode_t mode,
70  Ref_ptr<L4Re::Vfs::File> *) throw();
71  ssize_t getdents(char *, size_t) throw();
72 
73  ~Ns_dir() throw() {}
74 
75 private:
76  int get_ds(const char *path, L4Re::Auto_cap<L4Re::Dataspace>::Cap *ds) throw();
77 
79  size_t _current_dir_pos;
80 };
81 
82 }}
A reference-counting pointer with automatic cleanup.
Definition: ref_ptr:80
Smart capability class.
l4re_env_cap_entry_t Cap_entry
C++ type for an entry in the initial objects array.
Definition: env:91
C++ interface of the initial environment that is provided to an L4 task.
Definition: env:82
L4Re C++ Interfaces.
Definition: cmd_control:15
L4::Cap related definitions.
Boiler plate class for implementing an open file for L4Re::Vfs.
Definition: backend:39
Namespace interface.