1.1 --- a/libipc/lib/src/direct.c Tue Mar 07 19:10:40 2023 +0100
1.2 +++ b/libipc/lib/src/direct.c Thu Mar 09 19:27:22 2023 +0100
1.3 @@ -1,7 +1,7 @@
1.4 /*
1.5 * Interprocess communication abstractions.
1.6 *
1.7 - * Copyright (C) 2018, 2019 Paul Boddie <paul@boddie.org.uk>
1.8 + * Copyright (C) 2018, 2019, 2021, 2023 Paul Boddie <paul@boddie.org.uk>
1.9 *
1.10 * This program is free software; you can redistribute it and/or
1.11 * modify it under the terms of the GNU General Public License as
1.12 @@ -54,7 +54,16 @@
1.13
1.14 long ipc_import_capability(l4_msgtag_t tag, int item, l4_cap_idx_t *ref)
1.15 {
1.16 - return _import_capability(tag, l4_utcb_br(), l4_utcb_mr(), item, ref);
1.17 + int local;
1.18 + long err = _import_capability(tag, l4_utcb_br(), l4_utcb_mr(), item, ref, &local);
1.19 +
1.20 + if (err)
1.21 + return err;
1.22 +
1.23 + if (local)
1.24 + return L4_EOK;
1.25 +
1.26 + return ipc_expect_capability(item);
1.27 }
1.28
1.29 /* Import a dataspace, mapping it to an address, updating the buffer registers
1.30 @@ -62,5 +71,17 @@
1.31
1.32 long ipc_import_dataspace(l4_msgtag_t tag, int item, l4re_ds_t *mem, l4_addr_t *addr)
1.33 {
1.34 - return _import_dataspace(tag, l4_utcb_br(), l4_utcb_mr(), item, mem, addr);
1.35 + int local;
1.36 + long err = _import_dataspace(tag, l4_utcb_br(), l4_utcb_mr(), item, mem, addr, &local);
1.37 +
1.38 + if (err)
1.39 + return err;
1.40 +
1.41 + if (local)
1.42 + return L4_EOK;
1.43 +
1.44 + return ipc_expect_capability(item);
1.45 }
1.46 +
1.47 +/* vim: tabstop=2 expandtab shiftwidth=2
1.48 +*/