From a79f7d234bc28b981540368d2cf49b44f8565649 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= <josef.soentgen@genode-labs.com>
Date: Wed, 22 Feb 2017 13:26:33 +0100
Subject: [PATCH] libc: remove global env from fd_alloc

Issue #2280.
---
 repos/libports/include/libc-plugin/fd_alloc.h |  2 +-
 repos/libports/src/lib/libc/fd_alloc.cc       | 36 +++++++++----------
 .../src/lib/libc/libc_mmap_registry.h         |  3 ++
 3 files changed, 22 insertions(+), 19 deletions(-)

diff --git a/repos/libports/include/libc-plugin/fd_alloc.h b/repos/libports/include/libc-plugin/fd_alloc.h
index b3c0a02cb9..2748fad152 100644
--- a/repos/libports/include/libc-plugin/fd_alloc.h
+++ b/repos/libports/include/libc-plugin/fd_alloc.h
@@ -73,7 +73,7 @@ namespace Libc {
 			/**
 			 * Constructor
 			 */
-			File_descriptor_allocator();
+			File_descriptor_allocator(Genode::Allocator &md_alloc);
 
 			/**
 			 * Allocate file descriptor
diff --git a/repos/libports/src/lib/libc/fd_alloc.cc b/repos/libports/src/lib/libc/fd_alloc.cc
index a89a7fbf16..ae9f444f0c 100644
--- a/repos/libports/src/lib/libc/fd_alloc.cc
+++ b/repos/libports/src/lib/libc/fd_alloc.cc
@@ -16,32 +16,32 @@
 #include <util/construct_at.h>
 #include <base/env.h>
 #include <base/log.h>
+#include <libc/allocator.h>
 
 /* libc plugin interface */
 #include <libc-plugin/fd_alloc.h>
 
-namespace Libc {
-
-	File_descriptor_allocator *file_descriptor_allocator()
-	{
-		static bool constructed = 0;
-		static char placeholder[sizeof(File_descriptor_allocator)];
-		if (!constructed) {
-			Genode::construct_at<File_descriptor_allocator>(placeholder);
-			constructed = 1;
-		}
-
-		return reinterpret_cast<File_descriptor_allocator *>(placeholder);
-	}
-}
-
-
 using namespace Libc;
 using namespace Genode;
 
 
-File_descriptor_allocator::File_descriptor_allocator()
-: Allocator_avl_tpl<File_descriptor>(Genode::env()->heap())
+File_descriptor_allocator *Libc::file_descriptor_allocator()
+{
+	static bool constructed = false;
+	static char placeholder[sizeof(File_descriptor_allocator)];
+	static Libc::Allocator md_alloc;
+
+	if (!constructed) {
+		Genode::construct_at<File_descriptor_allocator>(placeholder, md_alloc);
+		constructed = true;
+	}
+
+	return reinterpret_cast<File_descriptor_allocator *>(placeholder);
+}
+
+
+File_descriptor_allocator::File_descriptor_allocator(Genode::Allocator &md_alloc)
+: Allocator_avl_tpl<File_descriptor>(&md_alloc)
 {
 	add_range(0, MAX_NUM_FDS);
 }
diff --git a/repos/libports/src/lib/libc/libc_mmap_registry.h b/repos/libports/src/lib/libc/libc_mmap_registry.h
index 0013ae8f32..5ddee1d279 100644
--- a/repos/libports/src/lib/libc/libc_mmap_registry.h
+++ b/repos/libports/src/lib/libc/libc_mmap_registry.h
@@ -12,6 +12,9 @@
 #include <base/env.h>
 #include <base/log.h>
 
+/* Genode libc includes */
+#include <errno.h>
+
 /* libc-internal includes */
 #include <libc-plugin/plugin.h>