1// vi:set ft=cpp: -*- Mode: C++ -*-
2/**
3 * \file
4 * \brief IPC helper
5 */
6/*
7 * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
8 *               Alexander Warg <warg@os.inf.tu-dresden.de>
9 *     economic rights: Technische Universität Dresden (Germany)
10 *
11 * This file is part of TUD:OS and distributed under the terms of the
12 * GNU General Public License 2.
13 * Please see the COPYING-GPL-2 file for details.
14 *
15 * As a special exception, you may use this file as part of a free software
16 * library without restriction.  Specifically, if other files instantiate
17 * templates or use macros or inline functions from this file, or you compile
18 * this file and link it with other files to produce an executable, this
19 * file does not by itself cause the resulting executable to be covered by
20 * the GNU General Public License.  This exception does not however
21 * invalidate any other reasons why the executable file might be covered by
22 * the GNU General Public License.
23 */
24#pragma once
25
26#include <l4/cxx/exceptions>
27#include <l4/sys/utcb.h>
28
29namespace L4
30{
31#ifdef __EXCEPTIONS
32  /**
33   * \brief Throw an L4 IPC error as exception.
34   *
35   * \ingroup helper
36   * \param o    The client side object, for which the IPC was invoked.
37   * \param err  The IPC result code (error code).
38   * \utcb{utcb}
39   */
40  inline void
41  throw_ipc_exception(L4::Cap<void> const &o, l4_msgtag_t const &err,
42                      l4_utcb_t *utcb)
43  {
44    (void)o;
45    if (err.has_error())
46      throw (L4::Com_error(l4_error_u(err, utcb)));
47  }
48
49  /**
50   * \brief Throw an L4 IPC error as exception.
51   *
52   * \ingroup helper
53   * \param o    The client side object, for which the IPC was invoked.
54   * \param err  The IPC result code (error code).
55   * \utcb{utcb}
56   */
57  inline void
58  throw_ipc_exception(void const *o, l4_msgtag_t const &err,
59                      l4_utcb_t *utcb)
60  { throw_ipc_exception(L4::Cap<void>(o), err, utcb); }
61#endif
62
63}
64