From 2a1458104dffea1397f45eabd7759da7933e2e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Sat, 16 Aug 2008 22:23:10 +0000 Subject: [PATCH] Avoid mounting images inside images (inside images (inside images...)). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26996 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/loader/partitions.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/system/boot/loader/partitions.cpp b/src/system/boot/loader/partitions.cpp index 78a5d05d66..430f3fcd36 100644 --- a/src/system/boot/loader/partitions.cpp +++ b/src/system/boot/loader/partitions.cpp @@ -222,6 +222,7 @@ Partition::AddChild() status_t Partition::_Mount(file_system_module_info *module, Directory **_fileSystem) { + static int fileMapDiskDepth = 0; TRACE(("%p Partition::_Mount check for file_system: %s\n", this, module->pretty_name)); @@ -236,13 +237,16 @@ Partition::_Mount(file_system_module_info *module, Directory **_fileSystem) fIsFileSystem = true; - // see if it contains an image file we could mount in turn - // XXX: avoid recursing too much - FileMapDisk *disk = FileMapDisk::FindAnyFileMapDisk(fileSystem); - if (disk) { - TRACE(("%p Partition::_Mount: found FileMapDisk\n", this)); - add_partitions_for(disk, true, false); + // if we aren't already mounting an image + if (!fileMapDiskDepth++) { + // see if it contains an image file we could mount in turn + FileMapDisk *disk = FileMapDisk::FindAnyFileMapDisk(fileSystem); + if (disk) { + TRACE(("%p Partition::_Mount: found FileMapDisk\n", this)); + add_partitions_for(disk, true, false); + } } + fileMapDiskDepth--; return B_OK; }