diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index b9434111792..d2486b4f6d0 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -678,7 +678,7 @@ AddFilesToHaikuImage system add-ons Screen\ Savers : $(SYSTEM_ADD_ONS_SCREENSAVERS) ; AddFilesToHaikuImage system add-ons disk_systems - : intel bfs ntfs ; + : intel gpt bfs ntfs ; # decorators AddDirectoryToHaikuImage home config add-ons decorators ; diff --git a/src/add-ons/disk_systems/gpt/GPTDiskAddOn.rdef b/src/add-ons/disk_systems/gpt/GPTDiskAddOn.rdef index 18ca93a59ff..41771bdba8b 100644 --- a/src/add-ons/disk_systems/gpt/GPTDiskAddOn.rdef +++ b/src/add-ons/disk_systems/gpt/GPTDiskAddOn.rdef @@ -1,8 +1,4 @@ -/* - * IntelDiskAddOn.rdef - */ - -resource app_signature "application/x-vnd.Haiku-IntelDiskAddOn"; +resource app_signature "application/x-vnd.Haiku-GPTDiskAddOn"; resource app_version { major = 1, @@ -11,5 +7,5 @@ resource app_version { variety = 0, internal = 0, short_info = "1.0.0", - long_info = "Haiku Intel disk add-on." + long_info = "GUID Partition Table disk add-on." }; diff --git a/src/add-ons/disk_systems/gpt/GPTPartitionHandle.cpp b/src/add-ons/disk_systems/gpt/GPTPartitionHandle.cpp index 8efba5100f3..66227fe4c25 100644 --- a/src/add-ons/disk_systems/gpt/GPTPartitionHandle.cpp +++ b/src/add-ons/disk_systems/gpt/GPTPartitionHandle.cpp @@ -1,5 +1,6 @@ /* * Copyright 2013, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2007, Ingo Weinhold, bonefish@users.sf.net. * Distributed under the terms of the MIT License. */ @@ -13,6 +14,7 @@ #include #include #include +#include #include @@ -43,6 +45,23 @@ GPTPartitionHandle::~GPTPartitionHandle() status_t GPTPartitionHandle::Init() { + // TODO: how to get the path of a BMutablePartition? + //BPath path; + //status_t status = Partition()->GetPath(&path); + //if (status != B_OK) + //return status; + + //fd = open(path.Path(), O_RDONLY); + //if (fd < 0) + //return errno; + + //fHeader = new EFI::Header(fd, Partition()->BlockSize(), + //Partition()->BlockSize()); + //status = fHeader->InitCheck(); + //if (status != B_OK) + //return status; + + //close(fd); return B_OK; } @@ -100,10 +119,12 @@ GPTPartitionHandle::GetNextSupportedType(const BMutablePartition* child, status_t GPTPartitionHandle::GetPartitioningInfo(BPartitioningInfo* info) { - // init to the full size (minus the first sector) + // init to the full size (minus the GPT table header and entries) off_t size = Partition()->ContentSize(); - status_t status = info->SetTo(Partition()->BlockSize(), - size - Partition()->BlockSize()); + // TODO: use fHeader + size_t headerSize = Partition()->BlockSize() + 16384; + status_t status = info->SetTo(Partition()->BlockSize() + headerSize, + size - Partition()->BlockSize() - 2 * headerSize); if (status != B_OK) return status; @@ -141,7 +162,7 @@ status_t GPTPartitionHandle::ValidateCreateChild(off_t* _offset, off_t* _size, const char* typeString, BString* name, const char* parameters) { - return B_BAD_VALUE; + return B_OK; } @@ -150,7 +171,21 @@ GPTPartitionHandle::CreateChild(off_t offset, off_t size, const char* typeString, const char* name, const char* parameters, BMutablePartition** _child) { - return B_BAD_VALUE; + // create the child + BMutablePartition* partition = Partition(); + BMutablePartition* child; + status_t status = partition->CreateChild(0, typeString, name, + parameters, &child); + if (status != B_OK) + return status; + + // init the child + child->SetOffset(offset); + child->SetSize(size); + child->SetBlockSize(partition->BlockSize()); + + *_child = child; + return B_OK; } diff --git a/src/add-ons/disk_systems/gpt/GPTPartitionHandle.h b/src/add-ons/disk_systems/gpt/GPTPartitionHandle.h index 23fbf141195..c743bd0065b 100644 --- a/src/add-ons/disk_systems/gpt/GPTPartitionHandle.h +++ b/src/add-ons/disk_systems/gpt/GPTPartitionHandle.h @@ -8,6 +8,8 @@ #include +#include "Header.h" + class GPTPartitionHandle : public BPartitionHandle { public: @@ -39,6 +41,9 @@ class GPTPartitionHandle : public BPartitionHandle { const char* parameters, BMutablePartition** child); virtual status_t DeleteChild(BMutablePartition* child); + +private: + EFI::Header* fHeader; }; diff --git a/src/add-ons/disk_systems/gpt/Jamfile b/src/add-ons/disk_systems/gpt/Jamfile index 2083ced8495..5174bc5cbd4 100644 --- a/src/add-ons/disk_systems/gpt/Jamfile +++ b/src/add-ons/disk_systems/gpt/Jamfile @@ -1,6 +1,6 @@ SubDir HAIKU_TOP src add-ons disk_systems gpt ; -UsePrivateHeaders shared storage ; +UsePrivateHeaders interface shared storage ; UsePrivateSystemHeaders ; SEARCH_SOURCE @@ -13,5 +13,10 @@ Addon gpt : GPTDiskAddOn.cpp GPTPartitionHandle.cpp + # from the kernel partitioning system add-on + Header.cpp + crc32.cpp + utility.cpp + : be $(TARGET_LIBSUPC++) ;