]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/cxx/lib/ipc/include/ipc_stream
update
[l4.git] / l4 / pkg / cxx / lib / ipc / include / ipc_stream
index 4d77b896b7644b519326c3771bf4f104367b7d9b..d5a7858586b77d0fbe9389cc1236a209660b7955 100644 (file)
@@ -700,7 +700,7 @@ public:
   }
 
 
-  int get(Ipc::Varg *va)
+  bool get(Ipc::Varg *va)
   {
     Ipc::Varg::Tag t;
     if (!has_more<Ipc::Varg::Tag>())
@@ -712,7 +712,7 @@ public:
     va->tag(t);
     get(msg_ptr(va->data()), va->length());
 
-    return 0;
+    return 1;
   }
 
   /**
@@ -802,6 +802,21 @@ protected:
   unsigned char _current_buf;
 };
 
+class Istream_copy : public Istream
+{
+private:
+  l4_msg_regs_t _mrs;
+
+public:
+  Istream_copy(Istream const &o) : Istream(o), _mrs(*l4_utcb_mr_u(o.utcb()))
+  {
+    // do some reverse mr to utcb trickery
+    _utcb = (l4_utcb_t*)((l4_addr_t)&_mrs - (l4_addr_t)l4_utcb_mr_u((l4_utcb_t*)0));
+    _current_msg = reinterpret_cast<char*>(l4_utcb_mr_u(_utcb)->mr);
+  }
+
+};
+
 template< typename T >
 inline
 T read(Istream &s) { T t; s >> t; return t; }