diff --git a/src/add-ons/kernel/partitioning_systems/intel/Jamfile b/src/add-ons/kernel/partitioning_systems/intel/Jamfile index c3137bfb9c..3b96273e8d 100644 --- a/src/add-ons/kernel/partitioning_systems/intel/Jamfile +++ b/src/add-ons/kernel/partitioning_systems/intel/Jamfile @@ -11,18 +11,3 @@ KernelAddon intel : PartitionMapWriter.cpp write_support.cpp ; - -# Also build a userland version -# ToDo: it's probably not a good idea to build them into the same directory -#Addon intel : -# intel.cpp -# PartitionLocker.cpp -# PartitionMap.cpp -# PartitionMapParser.cpp -# PartitionMapWriter.cpp -#; - -#LinkAgainst intel : -# libkernelland_emu.so -# libdisk_device_manager.so -#; diff --git a/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.cpp b/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.cpp index 6d2ef66e42..ba8021e44c 100644 --- a/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.cpp +++ b/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.cpp @@ -6,11 +6,13 @@ * Ingo Weinhold, bonefish@cs.tu-berlin.de */ + /*! \file PartitionMap.cpp \brief Definitions for "intel" style partitions and implementation of related classes. */ + #include #include #include @@ -356,19 +358,6 @@ Partition::Unset() } -#ifdef _BOOT_MODE -void -Partition::AdjustSize(off_t sessionSize) -{ - // To work around buggy (or older) BIOS, we shrink the partition size to - // always fit into its session - this should improve detection of boot - // partitions (see bug #238 for more information) - if (sessionSize < fOffset + fSize && sessionSize > fOffset) - fSize = sessionSize - fOffset; -} -#endif - - bool Partition::CheckLocation(off_t sessionSize) const { @@ -410,6 +399,20 @@ Partition::CheckLocation(off_t sessionSize) const } +void +Partition::FitSizeToSession(off_t sessionSize) +{ + // To work around buggy (or older) BIOS, we shrink the partition size to + // always fit into its session - this should improve detection of boot + // partitions (see bug #238 for more information). + // Also, the drive size is obviously reported differently sometimes; this + // should let us read problematic drives - let the file system figure out + // if something is wrong. + if (sessionSize < fOffset + fSize && sessionSize > fOffset) + fSize = sessionSize - fOffset; +} + + // #pragma mark - PrimaryPartition diff --git a/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.h b/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.h index 3712e87b25..c35fa2fa0f 100644 --- a/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.h +++ b/src/add-ons/kernel/partitioning_systems/intel/PartitionMap.h @@ -182,9 +182,7 @@ public: { fBlockSize = blockSize; } bool CheckLocation(off_t sessionSize) const; -#ifdef _BOOT_MODE - void AdjustSize(off_t sessionSize); -#endif + void FitSizeToSession(off_t sessionSize); private: off_t fPartitionTableOffset; diff --git a/src/add-ons/kernel/partitioning_systems/intel/PartitionMapParser.cpp b/src/add-ons/kernel/partitioning_systems/intel/PartitionMapParser.cpp index 5f16265e95..20e676ec09 100644 --- a/src/add-ons/kernel/partitioning_systems/intel/PartitionMapParser.cpp +++ b/src/add-ons/kernel/partitioning_systems/intel/PartitionMapParser.cpp @@ -110,10 +110,9 @@ PartitionMapParser::_ParsePrimary(const partition_table* table) PrimaryPartition* partition = fMap->PrimaryPartitionAt(i); partition->SetTo(descriptor, 0, fBlockSize); -#ifdef _BOOT_MODE - // work-around potential BIOS problems - partition->AdjustSize(fSessionSize); -#endif + // work-around potential BIOS/OS problems + partition->FitSizeToSession(fSessionSize); + // ignore, if location is bad if (!partition->CheckLocation(fSessionSize)) { TRACE(("intel: _ParsePrimary(): partition %ld: bad location, "