Updated Library Documentation (markdown)
@@ -614,4 +614,184 @@ If you're going to use it prebuilt, you can find it in the PMT releases. Or you
|
|||||||
---
|
---
|
||||||
|
|
||||||
## libpartition_map library
|
## libpartition_map library
|
||||||
soon!
|
`libpartition_map` provides a C++ interface to manage, query, and manipulate disk partitions programmatically. It is built on top of `libhelper`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Namespaces
|
||||||
|
|
||||||
|
#### PartitionMap
|
||||||
|
|
||||||
|
Main namespace of the library. Contains all core types, builder classes, and utilities.
|
||||||
|
|
||||||
|
```c++
|
||||||
|
#include <libpartition_map/lib.hpp>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Types
|
||||||
|
|
||||||
|
#### `PartitionMap::Info`
|
||||||
|
|
||||||
|
Represents a single partition entry.
|
||||||
|
|
||||||
|
| Member | Type | Description |
|
||||||
|
| ------- | ------------- | -------------------- |
|
||||||
|
| `name` | `std::string` | Partition name |
|
||||||
|
| `props` | struct | Partition properties |
|
||||||
|
|
||||||
|
```c++
|
||||||
|
struct _entry {
|
||||||
|
std::string name;
|
||||||
|
struct {
|
||||||
|
uint64_t size;
|
||||||
|
bool isLogical;
|
||||||
|
} props;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### `PartitionMap::BasicInfo`
|
||||||
|
|
||||||
|
Minimal information about a partition.
|
||||||
|
|
||||||
|
| Member | Type | Description |
|
||||||
|
| ----------- | ---------- | ---------------------- |
|
||||||
|
| `size` | `uint64_t` | Partition size |
|
||||||
|
| `isLogical` | `bool` | Logical partition flag |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Aliases
|
||||||
|
|
||||||
|
| Alias | Type |
|
||||||
|
| ------------------ | ----------------------------- |
|
||||||
|
| `Partition_t` | `_entry` |
|
||||||
|
| `Map_t` | `basic_partition_map` |
|
||||||
|
| `BuildMap` / `Map` | `basic_partition_map_builder` |
|
||||||
|
| `BasicInf` | `_returnable_entry` |
|
||||||
|
| `Info` | `_entry` |
|
||||||
|
| `Error` | `Helper::Error` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Classes
|
||||||
|
|
||||||
|
#### Map_t (basic_partition_map)
|
||||||
|
Core partition map type.
|
||||||
|
|
||||||
|
##### Overview
|
||||||
|
|
||||||
|
```c++
|
||||||
|
PartitionMap::Map_t myMap;
|
||||||
|
```
|
||||||
|
|
||||||
|
* Supports insertion, merging, clearing, and queries etc...
|
||||||
|
* Provides **for-each support** via `iterator` and `constant_iterator`:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
for (const auto &entry : myMap) {
|
||||||
|
std::cout << entry.first << " size: " << entry.second.size << " logical: " << entry.second.isLogical << std::endl;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: Direct use of `iterator` and `constant_iterator` is typically unnecessary; use range-based for loops.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### BuildMap (basic_partition_map_builder)
|
||||||
|
|
||||||
|
High-level interface to build and query partition maps.
|
||||||
|
|
||||||
|
##### Example Usage
|
||||||
|
|
||||||
|
```c++
|
||||||
|
#include <libpartition_map/lib.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
try {
|
||||||
|
PartitionMap::Map builder;
|
||||||
|
|
||||||
|
// Read default directories
|
||||||
|
if (!builder.readDefaultDirectories()) {
|
||||||
|
std::cerr << "Failed to read default directories" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query partitions
|
||||||
|
auto allPartitions = builder.getPartitionList();
|
||||||
|
if (allPartitions) {
|
||||||
|
for (const auto &p : *allPartitions) {
|
||||||
|
std::cout << p << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use doForAllPartitions lambda
|
||||||
|
builder.doForAllPartitions([](const std::string &name, PartitionMap::BasicInf props) {
|
||||||
|
std::cout << name << " -> size: " << props.size << ", logical: " << props.isLogical << std::endl;
|
||||||
|
return true; // Continue iteration
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check specific partition
|
||||||
|
if (builder.hasPartition("boot")) {
|
||||||
|
std::cout << "sda1 size: " << builder.sizeOf("boot") << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Other library functions...
|
||||||
|
|
||||||
|
} catch (PartitionMap::Error &e) {
|
||||||
|
std::cerr << "PartitionMap Error: " << e.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: `PartitionMap::Error` can be thrown, so always wrap operations in try-catch blocks.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Constants
|
||||||
|
|
||||||
|
#### PartitionMap::Extras::FileSystemMagic
|
||||||
|
|
||||||
|
```c++
|
||||||
|
constexpr uint64_t EXTFS_FS = 0xEF53;
|
||||||
|
constexpr uint64_t F2FS_FS = 0xF2F52010;
|
||||||
|
constexpr uint64_t EROFS_FS = 0xE0F5E1E2;
|
||||||
|
constexpr uint64_t EXFAT_FS = 0x5441465845;
|
||||||
|
// ... and more
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PartitionMap::Extras::AndroidMagic
|
||||||
|
|
||||||
|
```c++
|
||||||
|
constexpr uint64_t BOOT_IMAGE = 0x2144494F52444E41;
|
||||||
|
constexpr uint64_t VBOOT_IMAGE = 0x544F4F4252444E56;
|
||||||
|
constexpr uint64_t LK_IMAGE = 0x00006B6C;
|
||||||
|
// ... and more
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Compling and linking
|
||||||
|
If you're using CMake in your project, you can include it directly with `add_subdirectory`. Both the static and shared libraries will be compiled.
|
||||||
|
|
||||||
|
```cmake
|
||||||
|
# Include required libhelper library
|
||||||
|
add_subdirectory(srclib/libhelper)
|
||||||
|
add_subdirectory(srclib/libpartition_map)
|
||||||
|
|
||||||
|
# Usage example
|
||||||
|
add_executable(main main.cpp)
|
||||||
|
target_link_libraries(main PRIVATE partition_map_shared) # use helper_static if you want link static library
|
||||||
|
```
|
||||||
|
|
||||||
|
If you're going to use it prebuilt, you can find it in the PMT releases. Or you can compile it separately... WARNING: PMT releases only include builds for ARM.
|
||||||
|
|
||||||
|
---
|
||||||
Reference in New Issue
Block a user