_root_mount.add_ref();
_root.add_ref();
_root_mount.mount(cxx::ref_ptr(&_root));
- _cwd = &_root;
+ _cwd = cxx::ref_ptr(&_root);
#if 0
Ref_ptr<L4Re::Vfs::File> rom;
int munmap(void *start, size_t len) throw();
int mremap(void *old, size_t old_sz, size_t new_sz, int flags,
- void **new_adr) throw();
+ void **new_addr) throw();
int mprotect(const void *a, size_t sz, int prot) throw();
int msync(void *addr, size_t len, int flags) throw();
int madvise(void *addr, size_t len, int advice) throw();
switch (err & Rm::Detach_result_mask)
{
case Rm::Split_ds:
- if (ds.is_valid())
- ds->take();
return 0;
case Rm::Detached_ds:
if (ds.is_valid())
else
*ds = _annon_ds;
- (*ds)->take();
-
if (_early_oom)
{
if (int err = (*ds)->allocate(_annon_offset, size))
else
{
ds = fds;
- ds->take();
}
}
else
if (!(flags & MAP_FIXED)) rm_flags |= Rm::Search_addr;
if (!(prot & PROT_WRITE)) rm_flags |= Rm::Read_only;
- err = r->attach(&data, size, rm_flags, ds, offset);
+ err = r->attach(&data, size, rm_flags,
+ L4::Ipc::make_cap(ds, (prot & PROT_WRITE)
+ ? L4_CAP_FPAGE_RW
+ : L4_CAP_FPAGE_RO),
+ offset);
DEBUG_LOG(debug_mmap, {
outstring(" MAPPED: ");
if (ts > max_s)
ts = max_s;
- err = r->attach(&n, ts, tflags | Rm::In_area, tds, toffs);
+ err = r->attach(&n, ts, tflags | Rm::In_area,
+ L4::Ipc::make_cap(tds, (tflags & Rm::Read_only)
+ ? L4_CAP_FPAGE_RO
+ : L4_CAP_FPAGE_RW),
+ toffs);
if (err)
return err;
- tds->take();
-
err = r->detach(ta, ts, &tds, This_task, Rm::Detach_exact | Rm::Detach_keep);
if (err < 0)
return err;
switch (err & Rm::Detach_result_mask)
{
case Rm::Split_ds:
- if (tds.is_valid())
- tds->take();
break;
case Rm::Detached_ds:
if (tds.is_valid())
*new_addr = (void *)na;
na = na + old_size;
- err = r->attach(&na, new_size - old_size, Rm::In_area | Rm::Detach_free, tds, toffs);
+ err = r->attach(&na, new_size - old_size, Rm::In_area | Rm::Detach_free,
+ L4::Ipc::make_cap(tds, (tflags & Rm::Read_only)
+ ? L4_CAP_FPAGE_RO
+ : L4_CAP_FPAGE_RW),
+ toffs);
return err;
}