#include <l4/re/error_helper>
#include <l4/re/util/cap_alloc>
#include <l4/re/util/object_registry>
-#include <l4/re/protocols>
+#include <l4/re/dataspace>
#include <l4/re/dataspace-sys.h>
+#include <l4/re/namespace>
#include <l4/re/namespace-sys.h>
#include <l4/re/mem_alloc>
#include <l4/sys/factory>
static const char *fprov_prefix = "ux";
-static L4Re::Util::Registry_server<> server(l4_utcb(),
- L4Re::Env::env()->main_thread(),
- L4Re::Env::env()->factory());
+static L4Re::Util::Registry_server<> server;
enum {
- Max_search_paths = 10,
+ Max_search_paths = 20,
};
static char *search_paths[Max_search_paths];
}
-class Ds : public L4::Server_object
+class Ds : public L4::Server_object_t<L4Re::Dataspace>
{
public:
explicit Ds(const char *fname);
- int dispatch(l4_umword_t obj, L4::Ipc_iostream &ios);
+ int dispatch(l4_umword_t obj, L4::Ipc::Iostream &ios);
private:
unsigned long flags() { return 0; }
unsigned long _size;
L4::Cap<L4Re::Dataspace> mem_ds;
int map(l4_addr_t offs, l4_addr_t hot_spot, unsigned long flags,
- l4_addr_t min, l4_addr_t max, L4::Snd_fpage &snd_fpage);
+ l4_addr_t min, l4_addr_t max, L4::Ipc::Snd_fpage &snd_fpage);
unsigned evict_page();
gzFile fd;
}
int Ds::map(l4_addr_t offs, l4_addr_t hot_spot, unsigned long flags,
- l4_addr_t, l4_addr_t, L4::Snd_fpage &snd_fpage)
+ l4_addr_t, l4_addr_t, L4::Ipc::Snd_fpage &snd_fpage)
{
printf("map: offs=%lx hot_spot=%lx flags=%lx\n", offs, hot_spot, flags);
- snd_fpage = L4::Snd_fpage();
+ snd_fpage = L4::Ipc::Snd_fpage();
if (offs > l4_round_page(_size))
return -L4_ENOENT;
hot_spot = l4_trunc_page(hot_spot);
- snd_fpage = L4::Snd_fpage(l4_fpage((l4_addr_t)mem(idx), L4_PAGESHIFT, L4_FPAGE_RO),
+ snd_fpage = L4::Ipc::Snd_fpage(l4_fpage((l4_addr_t)mem(idx), L4_PAGESHIFT, L4_FPAGE_RO),
hot_spot);
return -L4_EOK;
}
-int Ds::dispatch(l4_umword_t obj, L4::Ipc_iostream &ios)
+int Ds::dispatch(l4_umword_t obj, L4::Ipc::Iostream &ios)
{
l4_msgtag_t tag;
ios >> tag;
- if (tag.label() != L4Re::Protocol::Dataspace)
+ if (tag.label() != L4Re::Dataspace::Protocol)
return -L4_EBADPROTO;
L4::Opcode op;
unsigned long flags;
ios >> offset >> spot >> flags;
- L4::Snd_fpage fp;
+ L4::Ipc::Snd_fpage fp;
long int ret = map(offset, spot, !read_only && (flags & 1), 0, ~0, fp);
if (ret == L4_EOK)
// ------------------------------------------------------------------------
-class Fprov_server : public L4::Server_object
+class Fprov_server : public L4::Server_object_t<L4Re::Namespace>
{
public:
Fprov_server();
- int dispatch(l4_umword_t obj, L4::Ipc_iostream &ios);
+ int dispatch(l4_umword_t obj, L4::Ipc::Iostream &ios);
private:
enum {
Buf_size = 64 << 10,
};
- int get_file1(const char *fname, L4::Ipc_iostream &ios);
- int get_file2(const char *fname, L4::Ipc_iostream &ios);
+ int get_file1(const char *fname, L4::Ipc::Iostream &ios);
+ int get_file2(const char *fname, L4::Ipc::Iostream &ios);
char *_buf;
};
}
int
-Fprov_server::get_file2(char const *fname, L4::Ipc_iostream &ios)
+Fprov_server::get_file2(char const *fname, L4::Ipc::Iostream &ios)
{
printf("open: %s\n", fname);
Ds *ds = new Ds(fname);
- ios << L4::Snd_fpage(ds->obj_cap().fpage(L4_FPAGE_RO));
+ ios << L4::Ipc::Snd_fpage(ds->obj_cap().fpage(L4_FPAGE_RO));
return -L4_EOK;
}
int
-Fprov_server::get_file1(char const *fname, L4::Ipc_iostream &ios)
+Fprov_server::get_file1(char const *fname, L4::Ipc::Iostream &ios)
{
gzFile fd = NULL;
long fread;
L4Re::Env::env()->rm()->detach(addr, 0);
gzclose(fd);
- ios << L4::Snd_fpage(ds_cap.fpage(L4_FPAGE_RO));
+ ios << L4::Ipc::Snd_fpage(ds_cap.fpage(L4_FPAGE_RO));
return 0;
}
int
-Fprov_server::dispatch(l4_umword_t, L4::Ipc_iostream &ios)
+Fprov_server::dispatch(l4_umword_t, L4::Ipc::Iostream &ios)
{
l4_msgtag_t t;
ios >> t;
- if (t.label() != L4Re::Protocol::Namespace)
+ if (t.label() != L4Re::Namespace::Protocol)
return -L4_EBADPROTO;
l4_umword_t opcode;
{
case L4Re::Namespace_::Query:
{
- char const *filenamep = 0;
char filename[Max_filename_len];
unsigned long len = Max_filename_len;
- ios >> L4::ipc_buf_in(filenamep, len);
-
- // copy out of utcb
- if (Max_filename_len - 1 < len)
- len = Max_filename_len - 1;
- memcpy(filename, filenamep, len);
+ ios >> L4::Ipc::buf_cp_in(filename, len);
filename[len] = 0;
return get_file1(filename, ios);
int
main(int argc, char *argv[])
{
- setup(argc, argv);
try
{
+ setup(argc, argv);
+
int err = mount("/", fprov_prefix, "fuxfs", 0, 0);
if (err == -1)
{