From d21464399fc3a2acc2ab83dfe5dd5f8950aa8f3a Mon Sep 17 00:00:00 2001
From: Christian Helmuth <christian.helmuth@genode-labs.com>
Date: Thu, 7 Apr 2022 16:14:29 +0200
Subject: [PATCH] vfs_rump: use dynamic_cast for safe downcasts

As it stands, the implementation requires minimal reflection measures to
implement correct cleanup procedure. static_cast<> cannot be used as it
does not implement runtime type casting as dynamic_cast<> does.
---
 repos/dde_rump/src/lib/vfs/rump/vfs_rump.cc | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/repos/dde_rump/src/lib/vfs/rump/vfs_rump.cc b/repos/dde_rump/src/lib/vfs/rump/vfs_rump.cc
index 498c5ee492..3859dfa3f8 100644
--- a/repos/dde_rump/src/lib/vfs/rump/vfs_rump.cc
+++ b/repos/dde_rump/src/lib/vfs/rump/vfs_rump.cc
@@ -667,7 +667,7 @@ class Vfs::Rump_file_system : public File_system
 		void close(Vfs_handle *vfs_handle) override
 		{
 			if (Rump_vfs_file_handle *handle =
-				static_cast<Rump_vfs_file_handle *>(vfs_handle))
+				dynamic_cast<Rump_vfs_file_handle *>(vfs_handle))
 			{
 				_file_handles.remove(handle);
 				if (handle->modifying())
@@ -676,13 +676,13 @@ class Vfs::Rump_file_system : public File_system
 			}
 			else
 			if (Rump_vfs_dir_handle *handle =
-				static_cast<Rump_vfs_dir_handle *>(vfs_handle))
+				dynamic_cast<Rump_vfs_dir_handle *>(vfs_handle))
 			{
 				destroy(vfs_handle->alloc(), handle);
 			}
 			else
 			if (Rump_vfs_symlink_handle *handle =
-				static_cast<Rump_vfs_symlink_handle *>(vfs_handle))
+				dynamic_cast<Rump_vfs_symlink_handle *>(vfs_handle))
 			{
 				destroy(vfs_handle->alloc(), handle);
 			}