1 /*
2  * (c) 2010 Alexander Warg <warg@os.inf.tu-dresden.de>
3  *     economic rights: Technische Universität Dresden (Germany)
4  *
5  * This file is part of TUD:OS and distributed under the terms of the
6  * GNU General Public License 2.
7  * Please see the COPYING-GPL-2 file for details.
8  */
9 #include <l4/re/env>
10 #include <l4/re/namespace>
11 #include <l4/sys/factory>
12 
13 #include <lua.h>
14 #include <lauxlib.h>
15 #include <lualib.h>
16 #include "lua.h"
17 #include "lua_cap.h"
18 
19 namespace Lua {
20 namespace {
21 
22 class Lib_env : public Lib
23 {
24 public:
Lib_env()25   Lib_env() : Lib(P_env) {}
26 
init(lua_State * l)27   void init(lua_State *l)
28   {
29 #if 0
30     printf("initializing lua L4Re::Env\n");
31 #endif
32     Lua::lua_require_module(l, "L4");
33     lua_newtable(l);
34     lua_pushvalue(l, -1);
35     lua_setfield(l, -3, "Env");
36 
37     L4Re::Env const *e = L4Re::Env::env();
38 
39     register_cap(l, "parent", e->parent());
40     register_cap(l, "mem_alloc", e->mem_alloc(), L4::Factory::Protocol);
41     register_cap(l, "rm", e->rm());
42     register_cap(l, "log", e->log());
43     register_cap(l, "factory", e->factory(), L4::Factory::Protocol);
44     register_cap(l, "scheduler", e->scheduler());
45 
46     for (L4Re::Env::Cap_entry const *i = e->initial_caps();
47          i && i->flags != ~0UL; ++i)
48       {
49 	register_cap(l, i->name, L4::Cap<L4::Kobject>(i->cap));
50       }
51 
52     lua_pop(l, 2);
53   }
54 };
55 
56 static Lib_env __env_lib;
57 
58 }}
59