From 71c5afc3db8e3cf3ca2761af3c13a479887572b6 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Mon, 22 May 2017 20:41:56 +0200 Subject: [PATCH] libc_pipe: fix deprecated warnings Fixes #2426 --- repos/libports/src/lib/libc_pipe/plugin.cc | 40 ++++++++++++++++------ 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/repos/libports/src/lib/libc_pipe/plugin.cc b/repos/libports/src/lib/libc_pipe/plugin.cc index 769d0ad55..63337cbae 100644 --- a/repos/libports/src/lib/libc_pipe/plugin.cc +++ b/repos/libports/src/lib/libc_pipe/plugin.cc @@ -14,6 +14,7 @@ /* Genode includes */ #include +#include #include #include #include @@ -48,9 +49,12 @@ namespace Libc_pipe { Type _type; + Libc::File_descriptor *_partner; + + Genode::Allocator &_alloc; + Pipe_buffer *_buffer; - Libc::File_descriptor *_partner; Genode::Semaphore *_write_avail_sem; bool _nonblock = false; @@ -65,7 +69,8 @@ namespace Libc_pipe { * * \param partner the other pipe end */ - Plugin_context(Type type, Libc::File_descriptor *partner); + Plugin_context(Type type, Libc::File_descriptor *partner, + Genode::Allocator &alloc); ~Plugin_context(); @@ -82,6 +87,10 @@ namespace Libc_pipe { class Plugin : public Libc::Plugin { + private: + + Genode::Constructible _heap; + public: /** @@ -89,6 +98,8 @@ namespace Libc_pipe { */ Plugin(); + void init(Genode::Env &env) override; + bool supports_pipe() override; bool supports_select(int nfds, fd_set *readfds, @@ -134,15 +145,16 @@ namespace Libc_pipe { ** Plugin_context ** ********************/ - Plugin_context::Plugin_context(Type type, Libc::File_descriptor *partner) - : _type(type), _partner(partner) + Plugin_context::Plugin_context(Type type, Libc::File_descriptor *partner, + Genode::Allocator &alloc) + : _type(type), _partner(partner), _alloc(alloc) { if (!_partner) { /* allocate shared resources */ - _buffer = new (Genode::env()->heap()) Pipe_buffer; - _write_avail_sem = new (Genode::env()->heap()) Genode::Semaphore(PIPE_BUF_SIZE); + _buffer = new (_alloc) Pipe_buffer; + _write_avail_sem = new (_alloc) Genode::Semaphore(PIPE_BUF_SIZE); } else { @@ -164,8 +176,8 @@ namespace Libc_pipe { } else { /* partner fd is already destroyed -> free shared resources */ - destroy(Genode::env()->heap(), _buffer); - destroy(Genode::env()->heap(), _write_avail_sem); + destroy(_alloc, _buffer); + destroy(_alloc, _write_avail_sem); } } @@ -180,6 +192,12 @@ namespace Libc_pipe { } + void Plugin::init(Genode::Env &env) + { + _heap.construct(env.ram(), env.rm()); + } + + bool Plugin::supports_pipe() { return true; @@ -215,7 +233,7 @@ namespace Libc_pipe { int Plugin::close(Libc::File_descriptor *pipefdo) { - Genode::destroy(Genode::env()->heap(), context(pipefdo)); + Genode::destroy(*_heap, context(pipefdo)); Libc::file_descriptor_allocator()->free(pipefdo); return 0; @@ -281,9 +299,9 @@ namespace Libc_pipe { int Plugin::pipe(Libc::File_descriptor *pipefdo[2]) { pipefdo[0] = Libc::file_descriptor_allocator()->alloc(this, - new (Genode::env()->heap()) Plugin_context(READ_END, 0)); + new (*_heap) Plugin_context(READ_END, 0, *_heap)); pipefdo[1] = Libc::file_descriptor_allocator()->alloc(this, - new (Genode::env()->heap()) Plugin_context(WRITE_END, pipefdo[0])); + new (*_heap) Plugin_context(WRITE_END, pipefdo[0], *_heap)); static_cast(pipefdo[0]->context)->set_partner(pipefdo[1]); return 0;