Compare commits
13 Commits
main
...
579b2623a4
| Author | SHA1 | Date | |
|---|---|---|---|
| 579b2623a4 | |||
| a140320f30 | |||
| 7405083815 | |||
| 9a1af981d9 | |||
| eda1b3d50c | |||
| 0c48c13852 | |||
| 7ab20f1c99 | |||
| a45b7332cc | |||
| caff1510f9 | |||
| 876674726d | |||
| 4b1c1607ed | |||
| 6a25a663e7 | |||
| 1545511859 |
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
Language: Cpp
|
Language: Cpp
|
||||||
AccessModifierOffset: -1
|
AccessModifierOffset: -2
|
||||||
AlignAfterOpenBracket: Align
|
AlignAfterOpenBracket: Align
|
||||||
AlignArrayOfStructures: None
|
AlignArrayOfStructures: None
|
||||||
AlignConsecutiveAssignments:
|
AlignConsecutiveAssignments:
|
||||||
@@ -65,7 +65,7 @@ AlignConsecutiveTableGenDefinitionColons:
|
|||||||
AlignFunctionDeclarations: false
|
AlignFunctionDeclarations: false
|
||||||
AlignFunctionPointers: false
|
AlignFunctionPointers: false
|
||||||
PadOperators: false
|
PadOperators: false
|
||||||
AlignEscapedNewlines: Left
|
AlignEscapedNewlines: Right
|
||||||
AlignOperands: Align
|
AlignOperands: Align
|
||||||
AlignTrailingComments:
|
AlignTrailingComments:
|
||||||
Kind: Always
|
Kind: Always
|
||||||
@@ -79,22 +79,17 @@ AllowShortCaseLabelsOnASingleLine: false
|
|||||||
AllowShortCompoundRequirementOnASingleLine: true
|
AllowShortCompoundRequirementOnASingleLine: true
|
||||||
AllowShortEnumsOnASingleLine: true
|
AllowShortEnumsOnASingleLine: true
|
||||||
AllowShortFunctionsOnASingleLine: All
|
AllowShortFunctionsOnASingleLine: All
|
||||||
AllowShortIfStatementsOnASingleLine: WithoutElse
|
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
|
||||||
AllowShortLambdasOnASingleLine: All
|
AllowShortLambdasOnASingleLine: All
|
||||||
AllowShortLoopsOnASingleLine: true
|
AllowShortLoopsOnASingleLine: false
|
||||||
AllowShortNamespacesOnASingleLine: false
|
AllowShortNamespacesOnASingleLine: false
|
||||||
AlwaysBreakAfterDefinitionReturnType: None
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
AlwaysBreakBeforeMultilineStrings: true
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
AttributeMacros:
|
AttributeMacros:
|
||||||
- __capability
|
- __capability
|
||||||
- absl_nonnull
|
|
||||||
- absl_nullable
|
|
||||||
- absl_nullability_unknown
|
|
||||||
BinPackArguments: true
|
BinPackArguments: true
|
||||||
BinPackLongBracedList: true
|
|
||||||
BinPackParameters: BinPack
|
BinPackParameters: BinPack
|
||||||
BitFieldColonSpacing: Both
|
BitFieldColonSpacing: Both
|
||||||
BracedInitializerIndentWidth: -1
|
|
||||||
BraceWrapping:
|
BraceWrapping:
|
||||||
AfterCaseLabel: false
|
AfterCaseLabel: false
|
||||||
AfterClass: false
|
AfterClass: false
|
||||||
@@ -123,14 +118,13 @@ BreakBeforeBinaryOperators: None
|
|||||||
BreakBeforeConceptDeclarations: Always
|
BreakBeforeConceptDeclarations: Always
|
||||||
BreakBeforeBraces: Attach
|
BreakBeforeBraces: Attach
|
||||||
BreakBeforeInlineASMColon: OnlyMultiline
|
BreakBeforeInlineASMColon: OnlyMultiline
|
||||||
BreakBeforeTemplateCloser: false
|
|
||||||
BreakBeforeTernaryOperators: true
|
BreakBeforeTernaryOperators: true
|
||||||
BreakBinaryOperations: Never
|
BreakBinaryOperations: Never
|
||||||
BreakConstructorInitializers: BeforeColon
|
BreakConstructorInitializers: BeforeColon
|
||||||
BreakFunctionDefinitionParameters: false
|
BreakFunctionDefinitionParameters: false
|
||||||
BreakInheritanceList: BeforeColon
|
BreakInheritanceList: BeforeColon
|
||||||
BreakStringLiterals: true
|
BreakStringLiterals: true
|
||||||
BreakTemplateDeclarations: Yes
|
BreakTemplateDeclarations: MultiLine
|
||||||
ColumnLimit: 80
|
ColumnLimit: 80
|
||||||
CommentPragmas: '^ IWYU pragma:'
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
CompactNamespaces: false
|
CompactNamespaces: false
|
||||||
@@ -141,7 +135,6 @@ DerivePointerAlignment: false
|
|||||||
DisableFormat: false
|
DisableFormat: false
|
||||||
EmptyLineAfterAccessModifier: Never
|
EmptyLineAfterAccessModifier: Never
|
||||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||||
EnumTrailingComma: Leave
|
|
||||||
ExperimentalAutoDetectBinPacking: false
|
ExperimentalAutoDetectBinPacking: false
|
||||||
FixNamespaceComments: true
|
FixNamespaceComments: true
|
||||||
ForEachMacros:
|
ForEachMacros:
|
||||||
@@ -150,29 +143,25 @@ ForEachMacros:
|
|||||||
- BOOST_FOREACH
|
- BOOST_FOREACH
|
||||||
IfMacros:
|
IfMacros:
|
||||||
- KJ_IF_MAYBE
|
- KJ_IF_MAYBE
|
||||||
IncludeBlocks: Regroup
|
IncludeBlocks: Preserve
|
||||||
IncludeCategories:
|
IncludeCategories:
|
||||||
- Regex: '^<ext/.*\.h>'
|
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||||
Priority: 2
|
Priority: 2
|
||||||
SortPriority: 0
|
SortPriority: 0
|
||||||
CaseSensitive: false
|
CaseSensitive: false
|
||||||
- Regex: '^<.*\.h>'
|
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
||||||
Priority: 1
|
|
||||||
SortPriority: 0
|
|
||||||
CaseSensitive: false
|
|
||||||
- Regex: '^<.*'
|
|
||||||
Priority: 2
|
|
||||||
SortPriority: 0
|
|
||||||
CaseSensitive: false
|
|
||||||
- Regex: '.*'
|
|
||||||
Priority: 3
|
Priority: 3
|
||||||
SortPriority: 0
|
SortPriority: 0
|
||||||
CaseSensitive: false
|
CaseSensitive: false
|
||||||
IncludeIsMainRegex: '([-_](test|unittest))?$'
|
- Regex: '.*'
|
||||||
|
Priority: 1
|
||||||
|
SortPriority: 0
|
||||||
|
CaseSensitive: false
|
||||||
|
IncludeIsMainRegex: '(Test)?$'
|
||||||
IncludeIsMainSourceRegex: ''
|
IncludeIsMainSourceRegex: ''
|
||||||
IndentAccessModifiers: false
|
IndentAccessModifiers: false
|
||||||
IndentCaseBlocks: false
|
IndentCaseBlocks: false
|
||||||
IndentCaseLabels: true
|
IndentCaseLabels: false
|
||||||
IndentExportBlock: true
|
IndentExportBlock: true
|
||||||
IndentExternBlock: AfterExternBlock
|
IndentExternBlock: AfterExternBlock
|
||||||
IndentGotoLabels: true
|
IndentGotoLabels: true
|
||||||
@@ -194,7 +183,7 @@ JavaScriptQuotes: Leave
|
|||||||
JavaScriptWrapImports: true
|
JavaScriptWrapImports: true
|
||||||
KeepEmptyLines:
|
KeepEmptyLines:
|
||||||
AtEndOfFile: false
|
AtEndOfFile: false
|
||||||
AtStartOfBlock: false
|
AtStartOfBlock: true
|
||||||
AtStartOfFile: true
|
AtStartOfFile: true
|
||||||
KeepFormFeed: false
|
KeepFormFeed: false
|
||||||
LambdaBodyIndentation: Signature
|
LambdaBodyIndentation: Signature
|
||||||
@@ -204,15 +193,14 @@ MacroBlockEnd: ''
|
|||||||
MainIncludeChar: Quote
|
MainIncludeChar: Quote
|
||||||
MaxEmptyLinesToKeep: 1
|
MaxEmptyLinesToKeep: 1
|
||||||
NamespaceIndentation: None
|
NamespaceIndentation: None
|
||||||
ObjCBinPackProtocolList: Never
|
ObjCBinPackProtocolList: Auto
|
||||||
ObjCBlockIndentWidth: 2
|
ObjCBlockIndentWidth: 2
|
||||||
ObjCBreakBeforeNestedBlockParam: true
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
ObjCSpaceAfterProperty: false
|
ObjCSpaceAfterProperty: false
|
||||||
ObjCSpaceBeforeProtocolList: true
|
ObjCSpaceBeforeProtocolList: true
|
||||||
OneLineFormatOffRegex: ''
|
PackConstructorInitializers: BinPack
|
||||||
PackConstructorInitializers: NextLine
|
|
||||||
PenaltyBreakAssignment: 2
|
PenaltyBreakAssignment: 2
|
||||||
PenaltyBreakBeforeFirstCallParameter: 1
|
PenaltyBreakBeforeFirstCallParameter: 19
|
||||||
PenaltyBreakBeforeMemberAccess: 150
|
PenaltyBreakBeforeMemberAccess: 150
|
||||||
PenaltyBreakComment: 300
|
PenaltyBreakComment: 300
|
||||||
PenaltyBreakFirstLessLess: 120
|
PenaltyBreakFirstLessLess: 120
|
||||||
@@ -222,40 +210,10 @@ PenaltyBreakString: 1000
|
|||||||
PenaltyBreakTemplateDeclaration: 10
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
PenaltyExcessCharacter: 1000000
|
PenaltyExcessCharacter: 1000000
|
||||||
PenaltyIndentedWhitespace: 0
|
PenaltyIndentedWhitespace: 0
|
||||||
PenaltyReturnTypeOnItsOwnLine: 200
|
PenaltyReturnTypeOnItsOwnLine: 60
|
||||||
PointerAlignment: Left
|
PointerAlignment: Right
|
||||||
PPIndentWidth: -1
|
PPIndentWidth: -1
|
||||||
QualifierAlignment: Leave
|
QualifierAlignment: Leave
|
||||||
RawStringFormats:
|
|
||||||
- Language: Cpp
|
|
||||||
Delimiters:
|
|
||||||
- cc
|
|
||||||
- CC
|
|
||||||
- cpp
|
|
||||||
- Cpp
|
|
||||||
- CPP
|
|
||||||
- 'c++'
|
|
||||||
- 'C++'
|
|
||||||
CanonicalDelimiter: ''
|
|
||||||
BasedOnStyle: google
|
|
||||||
- Language: TextProto
|
|
||||||
Delimiters:
|
|
||||||
- pb
|
|
||||||
- PB
|
|
||||||
- proto
|
|
||||||
- PROTO
|
|
||||||
EnclosingFunctions:
|
|
||||||
- EqualsProto
|
|
||||||
- EquivToProto
|
|
||||||
- PARSE_PARTIAL_TEXT_PROTO
|
|
||||||
- PARSE_TEST_PROTO
|
|
||||||
- PARSE_TEXT_PROTO
|
|
||||||
- ParseTextOrDie
|
|
||||||
- ParseTextProtoOrDie
|
|
||||||
- ParseTestProto
|
|
||||||
- ParsePartialTestProto
|
|
||||||
CanonicalDelimiter: pb
|
|
||||||
BasedOnStyle: google
|
|
||||||
ReferenceAlignment: Pointer
|
ReferenceAlignment: Pointer
|
||||||
ReflowComments: Always
|
ReflowComments: Always
|
||||||
RemoveBracesLLVM: false
|
RemoveBracesLLVM: false
|
||||||
@@ -267,14 +225,11 @@ RequiresExpressionIndentation: OuterScope
|
|||||||
SeparateDefinitionBlocks: Leave
|
SeparateDefinitionBlocks: Leave
|
||||||
ShortNamespaceLines: 1
|
ShortNamespaceLines: 1
|
||||||
SkipMacroDefinitionBody: false
|
SkipMacroDefinitionBody: false
|
||||||
SortIncludes:
|
SortIncludes: CaseSensitive
|
||||||
Enabled: true
|
|
||||||
IgnoreCase: false
|
|
||||||
SortJavaStaticImport: Before
|
SortJavaStaticImport: Before
|
||||||
SortUsingDeclarations: LexicographicNumeric
|
SortUsingDeclarations: LexicographicNumeric
|
||||||
SpaceAfterCStyleCast: false
|
SpaceAfterCStyleCast: false
|
||||||
SpaceAfterLogicalNot: false
|
SpaceAfterLogicalNot: false
|
||||||
SpaceAfterOperatorKeyword: false
|
|
||||||
SpaceAfterTemplateKeyword: true
|
SpaceAfterTemplateKeyword: true
|
||||||
SpaceAroundPointerQualifiers: Default
|
SpaceAroundPointerQualifiers: Default
|
||||||
SpaceBeforeAssignmentOperators: true
|
SpaceBeforeAssignmentOperators: true
|
||||||
@@ -290,7 +245,6 @@ SpaceBeforeParensOptions:
|
|||||||
AfterFunctionDefinitionName: false
|
AfterFunctionDefinitionName: false
|
||||||
AfterFunctionDeclarationName: false
|
AfterFunctionDeclarationName: false
|
||||||
AfterIfMacros: true
|
AfterIfMacros: true
|
||||||
AfterNot: false
|
|
||||||
AfterOverloadedOperator: false
|
AfterOverloadedOperator: false
|
||||||
AfterPlacementOperator: true
|
AfterPlacementOperator: true
|
||||||
AfterRequiresInClause: false
|
AfterRequiresInClause: false
|
||||||
@@ -299,7 +253,7 @@ SpaceBeforeParensOptions:
|
|||||||
SpaceBeforeRangeBasedForLoopColon: true
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
SpaceBeforeSquareBrackets: false
|
SpaceBeforeSquareBrackets: false
|
||||||
SpaceInEmptyBlock: false
|
SpaceInEmptyBlock: false
|
||||||
SpacesBeforeTrailingComments: 2
|
SpacesBeforeTrailingComments: 1
|
||||||
SpacesInAngles: Never
|
SpacesInAngles: Never
|
||||||
SpacesInContainerLiterals: true
|
SpacesInContainerLiterals: true
|
||||||
SpacesInLineCommentPrefix:
|
SpacesInLineCommentPrefix:
|
||||||
@@ -313,7 +267,7 @@ SpacesInParensOptions:
|
|||||||
InEmptyParentheses: false
|
InEmptyParentheses: false
|
||||||
Other: false
|
Other: false
|
||||||
SpacesInSquareBrackets: false
|
SpacesInSquareBrackets: false
|
||||||
Standard: Auto
|
Standard: Latest
|
||||||
StatementAttributeLikeMacros:
|
StatementAttributeLikeMacros:
|
||||||
- Q_EMIT
|
- Q_EMIT
|
||||||
StatementMacros:
|
StatementMacros:
|
||||||
|
|||||||
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
- name: Build And Prepare For Release
|
- name: Build And Prepare For Release
|
||||||
id: build
|
id: build
|
||||||
run: |
|
run: |
|
||||||
git clone https://github.com/ShawkTeam/pmt-renovated -b main ./pmt && cd pmt
|
git clone https://git.yzbruh.space/${{ github.repository }} -b main ./pmt && cd pmt
|
||||||
export ANDROID_NDK="${{ github.workspace }}/android-ndk-r28c"
|
export ANDROID_NDK="${{ github.workspace }}/android-ndk-r28c"
|
||||||
bash build.sh clean
|
bash build.sh clean
|
||||||
bash build.sh build -DCMAKE_BUILD_TYPE=Release
|
bash build.sh build -DCMAKE_BUILD_TYPE=Release
|
||||||
@@ -50,8 +50,8 @@ jobs:
|
|||||||
echo "BUILD_DATE=$(date +%Y%m%d)" >> $GITHUB_ENV
|
echo "BUILD_DATE=$(date +%Y%m%d)" >> $GITHUB_ENV
|
||||||
echo "BUILD=${{ github.workspace }}/pmt" >> $GITHUB_ENV
|
echo "BUILD=${{ github.workspace }}/pmt" >> $GITHUB_ENV
|
||||||
cd ..
|
cd ..
|
||||||
echo -e "Read [Wiki - About Release Types](https://github.com/ShawkTeam/pmt-renovated/wiki/About-Release-Types) for getting more information.\n\n### Changes\n" > release.txt
|
echo -e "Read [Wiki - About Release Types](https://git.yzbruh.space/${{ github.repository }}/wiki/About-Release-Types) for getting more information.\n\n### Changes\n" > release.txt
|
||||||
git log --since="2025-08-21" --pretty=format:" * %ad | [%s](https://github.com/ShawkTeam/pmt-renovated/commit/%H)" --date=short | sed 's/ -.*//' | grep -v cleanup >> release.txt
|
git log --since="2025-08-21" --pretty=format:" * %ad | [%s](https://git.yzbruh.space/${{ github.repository }}/commit/%H)" --date=short | sed 's/ -.*//' | grep -v cleanup >> release.txt
|
||||||
working-directory: ${{ github.workspace }}
|
working-directory: ${{ github.workspace }}
|
||||||
|
|
||||||
- name: Upload To GitHub Releases
|
- name: Upload To GitHub Releases
|
||||||
|
|||||||
25
.github/workflows/fetch-changes.yml
vendored
25
.github/workflows/fetch-changes.yml
vendored
@@ -1,25 +0,0 @@
|
|||||||
name: Mirror External Repo to GitHub
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 * * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
mirror:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Mirror external repo
|
|
||||||
run: |
|
|
||||||
git config --global user.name "github-actions"
|
|
||||||
git config --global user.email "actions@github.com"
|
|
||||||
git clone --mirror https://git.yzbruh.space/YZBruh/pmt-renovated.git temp-mirror
|
|
||||||
cd temp-mirror
|
|
||||||
git remote add github https://github.com/ShawkTeam/pmt-renovated.git
|
|
||||||
git push --mirror github
|
|
||||||
10
README.md
10
README.md
@@ -25,13 +25,13 @@ PMT is designed for developers, technicians, and Android enthusiasts who need fi
|
|||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
For all information about PMT, see the [wiki](https://github.com/ShawkTeam/pmt-renovated/wiki).\
|
For all information about PMT, see the [wiki](https://git.yzbruh.space/YZBruh/pmt-renovated/wiki).\
|
||||||
Read [Wiki - Using PMT via Termux or ADB](https://github.com/ShawkTeam/pmt-renovated/wiki/Using-PMT-via-Termux-or-ADB) for learn how to use PMT via Termux or ADB.\
|
Read [Wiki - Using PMT via Termux or ADB](https://git.yzbruh.space/YZBruh/pmt-renovated/wiki/Using-PMT-via-Termux-or-ADB) for learn how to use PMT via Termux or ADB.\
|
||||||
Detailed usage instructions and option references can be found in the [Wiki - Usage](https://github.com/ShawkTeam/pmt-renovated/wiki/Usage).\
|
Detailed usage instructions and option references can be found in the [Wiki - Usage](https://git.yzbruh.space/YZBruh/pmt-renovated/wiki/Usage).\
|
||||||
See [Wiki - How To Build](https://github.com/ShawkTeam/pmt-renovated/wiki/How-To-Build) to learn how to build.
|
See [Wiki - How To Build](https://git.yzbruh.space/YZBruh/pmt-renovated/wiki/How-To-Build) to learn how to build.
|
||||||
|
|
||||||
## Bug Reporting
|
## Bug Reporting
|
||||||
Please submit bugs at [Issues](https://github.com/ShawkTeam/pmt-renovated/issues) page.
|
Please submit bugs at [Issues](https://git.yzbruh.space/YZBruh/pmt-renovated/issues) page.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
7
build.sh
7
build.sh
@@ -61,9 +61,12 @@ build() {
|
|||||||
-DANDROID_STL=c++_static
|
-DANDROID_STL=c++_static
|
||||||
done
|
done
|
||||||
|
|
||||||
|
CORES=$(($(nproc --all) - 2))
|
||||||
|
[ $CORES -eq 0 ] && CORES=2
|
||||||
|
|
||||||
for a in ${TARGET_ABI_LIST[@]}; do
|
for a in ${TARGET_ABI_LIST[@]}; do
|
||||||
echo "Building $a artifacts... Using $(($(nproc) - 2)) thread."
|
echo "Building $a artifacts... Using $CORES thread."
|
||||||
cmake --build build_$a -j$(($(nproc) - 2))
|
cmake --build build_$a -j$CORES
|
||||||
echo "$a build complete, artifacts: $PWD/build_$a"
|
echo "$a build complete, artifacts: $PWD/build_$a"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,8 +82,7 @@ class basic_function {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// A class for function management.
|
// A class for function management.
|
||||||
template <class _Type>
|
template <class _Type> class basic_manager {
|
||||||
class basic_manager {
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::unique_ptr<_Type>> _functions;
|
std::vector<std::unique_ptr<_Type>> _functions;
|
||||||
|
|
||||||
|
|||||||
21
manager.sh
21
manager.sh
@@ -19,7 +19,8 @@ RELEASE="20250821"
|
|||||||
|
|
||||||
echo() { command echo "[$THIS]: $@"; }
|
echo() { command echo "[$THIS]: $@"; }
|
||||||
|
|
||||||
checks() {
|
checks()
|
||||||
|
{
|
||||||
if ! curl "https://github.com" &>/dev/null; then
|
if ! curl "https://github.com" &>/dev/null; then
|
||||||
echo "No internet connection!"
|
echo "No internet connection!"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -31,7 +32,8 @@ checks() {
|
|||||||
[ ! -f $PREFIX/bin/wget ] && pkg install -y wget
|
[ ! -f $PREFIX/bin/wget ] && pkg install -y wget
|
||||||
}
|
}
|
||||||
|
|
||||||
select_variant() {
|
select_variant()
|
||||||
|
{
|
||||||
LINK=""; ARCH=""; VARIANT=""
|
LINK=""; ARCH=""; VARIANT=""
|
||||||
|
|
||||||
if getprop ro.product.cpu.abi | grep "arm64-v8a" &>/dev/null; then ARCH="arm64-v8a"
|
if getprop ro.product.cpu.abi | grep "arm64-v8a" &>/dev/null; then ARCH="arm64-v8a"
|
||||||
@@ -42,7 +44,8 @@ select_variant() {
|
|||||||
LINK="https://github.com/ShawkTeam/pmt-renovated/releases/download/${RELEASE}/pmt-${VARIANT}${ARCH}.zip"
|
LINK="https://github.com/ShawkTeam/pmt-renovated/releases/download/${RELEASE}/pmt-${VARIANT}${ARCH}.zip"
|
||||||
}
|
}
|
||||||
|
|
||||||
download() {
|
download()
|
||||||
|
{
|
||||||
echo "Downloading pmt-${VARIANT}${ARCH}.zip (${RELEASE})"
|
echo "Downloading pmt-${VARIANT}${ARCH}.zip (${RELEASE})"
|
||||||
if ! wget -O $PREFIX/tmp/pmt.zip "${LINK}" &>/dev/null; then
|
if ! wget -O $PREFIX/tmp/pmt.zip "${LINK}" &>/dev/null; then
|
||||||
echo "Download failed! LINK=${LINK}"
|
echo "Download failed! LINK=${LINK}"
|
||||||
@@ -57,7 +60,8 @@ download() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup()
|
||||||
|
{
|
||||||
[ -f $PREFIX/tmp/pmt_static ] && mv $PREFIX/tmp/pmt_static $PREFIX/tmp/pmt
|
[ -f $PREFIX/tmp/pmt_static ] && mv $PREFIX/tmp/pmt_static $PREFIX/tmp/pmt
|
||||||
set -e
|
set -e
|
||||||
install -t $PREFIX/bin $PREFIX/tmp/pmt
|
install -t $PREFIX/bin $PREFIX/tmp/pmt
|
||||||
@@ -68,18 +72,21 @@ setup() {
|
|||||||
echo "Installed successfully. Try running 'pmt' command."
|
echo "Installed successfully. Try running 'pmt' command."
|
||||||
}
|
}
|
||||||
|
|
||||||
uninstall() {
|
uninstall()
|
||||||
|
{
|
||||||
rm -f $PREFIX/bin/pmt $PREFIX/lib/libhelper* $PREFIX/lib/libpartition_map* &>/dev/null
|
rm -f $PREFIX/bin/pmt $PREFIX/lib/libhelper* $PREFIX/lib/libpartition_map* &>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
is_installed() {
|
is_installed()
|
||||||
|
{
|
||||||
if /system/bin/which pmt &>/dev/null; then
|
if /system/bin/which pmt &>/dev/null; then
|
||||||
echo "PMT is already installed."
|
echo "PMT is already installed."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup()
|
||||||
|
{
|
||||||
rm -f $PREFIX/tmp/pmt* $PREFIX/tmp/lib* $PREFIX/tmp/*.zip &>/dev/null
|
rm -f $PREFIX/tmp/pmt* $PREFIX/tmp/lib* $PREFIX/tmp/*.zip &>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,9 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
@@ -43,15 +42,13 @@ std::vector<std::string> splitIfHasDelim(const std::string& s, const char delim,
|
|||||||
|
|
||||||
void setupBufferSize(uint64_t &size, const std::string &entry) {
|
void setupBufferSize(uint64_t &size, const std::string &entry) {
|
||||||
if (PART_MAP.hasPartition(entry) && PART_MAP.sizeOf(entry) % size != 0) {
|
if (PART_MAP.hasPartition(entry) && PART_MAP.sizeOf(entry) % size != 0) {
|
||||||
println(
|
println("%sWARNING%s: Specified buffer size is invalid for %s! Using "
|
||||||
"%sWARNING%s: Specified buffer size is invalid for %s! Using "
|
|
||||||
"different buffer size for %s.",
|
"different buffer size for %s.",
|
||||||
YELLOW, STYLE_RESET, entry.data(), entry.data());
|
YELLOW, STYLE_RESET, entry.data(), entry.data());
|
||||||
size = PART_MAP.sizeOf(entry) % 4096 == 0 ? 4096 : 1;
|
size = PART_MAP.sizeOf(entry) % 4096 == 0 ? 4096 : 1;
|
||||||
} else if (Helper::fileIsExists(entry)) {
|
} else if (Helper::fileIsExists(entry)) {
|
||||||
if (Helper::fileSize(entry) % size != 0) {
|
if (Helper::fileSize(entry) % size != 0) {
|
||||||
println(
|
println("%sWARNING%s: Specified buffer size is invalid for %s! using "
|
||||||
"%sWARNING%s: Specified buffer size is invalid for %s! using "
|
|
||||||
"different buffer size for %s.",
|
"different buffer size for %s.",
|
||||||
YELLOW, STYLE_RESET, entry.data(), entry.data());
|
YELLOW, STYLE_RESET, entry.data(), entry.data());
|
||||||
size = Helper::fileSize(entry) % 4096 == 0 ? 4096 : 1;
|
size = Helper::fileSize(entry) % 4096 == 0 ? 4096 : 1;
|
||||||
|
|||||||
@@ -14,19 +14,17 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "functions/functions.hpp"
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <csignal>
|
#include <csignal>
|
||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#include "functions/functions.hpp"
|
|
||||||
#ifndef ANDROID_BUILD
|
#ifndef ANDROID_BUILD
|
||||||
#include <generated/buildInfo.hpp>
|
#include <generated/buildInfo.hpp>
|
||||||
#endif
|
#endif
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
namespace PartitionManager {
|
namespace PartitionManager {
|
||||||
|
|
||||||
@@ -39,11 +37,8 @@ namespace PartitionManager {
|
|||||||
FuncManager.registerFunction(std::make_unique<cls>(), AppMain)
|
FuncManager.registerFunction(std::make_unique<cls>(), AppMain)
|
||||||
|
|
||||||
basic_variables::basic_variables()
|
basic_variables::basic_variables()
|
||||||
: logFile(Helper::LoggingProperties::FILE),
|
: logFile(Helper::LoggingProperties::FILE), onLogical(false),
|
||||||
onLogical(false),
|
quietProcess(false), verboseMode(false), viewVersion(false),
|
||||||
quietProcess(false),
|
|
||||||
verboseMode(false),
|
|
||||||
viewVersion(false),
|
|
||||||
forceProcess(false) {
|
forceProcess(false) {
|
||||||
try {
|
try {
|
||||||
PartMap = std::make_unique<PartitionMap::BuildMap>();
|
PartMap = std::make_unique<PartitionMap::BuildMap>();
|
||||||
@@ -68,8 +63,7 @@ static int write(void* cookie, const char* buf, const int size) {
|
|||||||
const int ret = fwrite(buf, 1, static_cast<size_t>(size), real);
|
const int ret = fwrite(buf, 1, static_cast<size_t>(size), real);
|
||||||
fflush(real);
|
fflush(real);
|
||||||
return ret;
|
return ret;
|
||||||
} else
|
} else return size;
|
||||||
return size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static FILE *make_fp(FILE *real) {
|
static FILE *make_fp(FILE *real) {
|
||||||
@@ -117,8 +111,7 @@ int Main(int argc, char** argv) {
|
|||||||
|
|
||||||
AppMain.fallthrough(true);
|
AppMain.fallthrough(true);
|
||||||
AppMain.set_help_all_flag("--help-all", "Print full help message and exit");
|
AppMain.set_help_all_flag("--help-all", "Print full help message and exit");
|
||||||
AppMain.footer(
|
AppMain.footer("Partition Manager Tool is written by YZBruh\n"
|
||||||
"Partition Manager Tool is written by YZBruh\n"
|
|
||||||
"This project licensed under "
|
"This project licensed under "
|
||||||
"Apache 2.0 license\nReport "
|
"Apache 2.0 license\nReport "
|
||||||
"bugs to https://github.com/ShawkTeam/pmt-renovated/issues");
|
"bugs to https://github.com/ShawkTeam/pmt-renovated/issues");
|
||||||
@@ -166,18 +159,15 @@ int Main(int argc, char** argv) {
|
|||||||
|
|
||||||
if (FuncManager.hasFlagOnUsedFunction(NO_MAP_CHECK)) {
|
if (FuncManager.hasFlagOnUsedFunction(NO_MAP_CHECK)) {
|
||||||
if (!VARS.searchPath.empty())
|
if (!VARS.searchPath.empty())
|
||||||
WARNING(
|
WARNING("-S (--search-path) flag is ignored. Because, don't needed "
|
||||||
"-S (--search-path) flag is ignored. Because, don't needed "
|
|
||||||
"partition map by your used function.\n");
|
"partition map by your used function.\n");
|
||||||
if (VARS.onLogical)
|
if (VARS.onLogical)
|
||||||
WARNING(
|
WARNING("-l (--logical) flag ignored. Because, partition type don't "
|
||||||
"-l (--logical) flag ignored. Because, partition type don't "
|
|
||||||
"needed by your used function.\n");
|
"needed by your used function.\n");
|
||||||
} else {
|
} else {
|
||||||
if (!VARS.searchPath.empty()) (PART_MAP)(VARS.searchPath);
|
if (!VARS.searchPath.empty()) (PART_MAP)(VARS.searchPath);
|
||||||
if (!VARS.PartMap && VARS.searchPath.empty())
|
if (!VARS.PartMap && VARS.searchPath.empty())
|
||||||
throw Error(
|
throw Error("No default search entries were found. Specify a search "
|
||||||
"No default search entries were found. Specify a search "
|
|
||||||
"directory with -S "
|
"directory with -S "
|
||||||
"(--search-path)");
|
"(--search-path)");
|
||||||
|
|
||||||
|
|||||||
@@ -14,17 +14,15 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include "functions.hpp"
|
||||||
#include <private/android_filesystem_config.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <future>
|
#include <future>
|
||||||
|
#include <private/android_filesystem_config.h>
|
||||||
#include "functions.hpp"
|
#include <unistd.h>
|
||||||
|
|
||||||
#define BFUN "backupFunction"
|
#define BFUN "backupFunction"
|
||||||
#define FUNCTION_CLASS backupFunction
|
#define FUNCTION_CLASS backupFunction
|
||||||
@@ -155,8 +153,7 @@ RUN {
|
|||||||
if (!snd) {
|
if (!snd) {
|
||||||
end += fst + '\n';
|
end += fst + '\n';
|
||||||
endResult = false;
|
endResult = false;
|
||||||
} else
|
} else println("%s", fst.c_str());
|
||||||
println("%s", fst.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!endResult) throw Error("%s", end.c_str());
|
if (!endResult) throw Error("%s", end.c_str());
|
||||||
|
|||||||
@@ -14,9 +14,8 @@ Copyright 2025 Yağız Zengin
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
|
||||||
|
|
||||||
#include "functions.hpp"
|
#include "functions.hpp"
|
||||||
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
|
|
||||||
#define CFUN "cleanLogFunction"
|
#define CFUN "cleanLogFunction"
|
||||||
#define FUNCTION_CLASS cleanLogFunction
|
#define FUNCTION_CLASS cleanLogFunction
|
||||||
|
|||||||
@@ -14,14 +14,12 @@ Copyright 2025 Yağız Zengin
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include "functions.hpp"
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <future>
|
#include <future>
|
||||||
|
#include <unistd.h>
|
||||||
#include "functions.hpp"
|
|
||||||
|
|
||||||
#define EFUN "eraseFunction"
|
#define EFUN "eraseFunction"
|
||||||
#define FUNCTION_CLASS eraseFunction
|
#define FUNCTION_CLASS eraseFunction
|
||||||
@@ -83,8 +81,7 @@ RUN_ASYNC(const std::string& partitionName, const uint64_t bufferSize) {
|
|||||||
return {Helper::format("Can't write zero bytes to partition: %s: %s",
|
return {Helper::format("Can't write zero bytes to partition: %s: %s",
|
||||||
partitionName.data(), strerror(errno)),
|
partitionName.data(), strerror(errno)),
|
||||||
false};
|
false};
|
||||||
else
|
else bytesWritten += result;
|
||||||
bytesWritten += result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {Helper::format("Successfully wrote zero bytes to the %s partition",
|
return {Helper::format("Successfully wrote zero bytes to the %s partition",
|
||||||
@@ -123,8 +120,7 @@ RUN {
|
|||||||
if (!snd) {
|
if (!snd) {
|
||||||
end += fst + '\n';
|
end += fst + '\n';
|
||||||
endResult = false;
|
endResult = false;
|
||||||
} else
|
} else println("%s", fst.c_str());
|
||||||
println("%s", fst.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!endResult) throw Error("%s", end.c_str());
|
if (!endResult) throw Error("%s", end.c_str());
|
||||||
|
|||||||
@@ -14,15 +14,13 @@ Copyright 2025 Yağız Zengin
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include "functions.hpp"
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <future>
|
#include <future>
|
||||||
|
#include <unistd.h>
|
||||||
#include "functions.hpp"
|
|
||||||
|
|
||||||
#define FFUN "flashFunction"
|
#define FFUN "flashFunction"
|
||||||
#define FUNCTION_CLASS flashFunction
|
#define FUNCTION_CLASS flashFunction
|
||||||
@@ -153,8 +151,7 @@ RUN {
|
|||||||
if (!snd) {
|
if (!snd) {
|
||||||
end += fst + '\n';
|
end += fst + '\n';
|
||||||
endResult = false;
|
endResult = false;
|
||||||
} else
|
} else println("%s", fst.c_str());
|
||||||
println("%s", fst.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!endResult) throw Error("%s", end.c_str());
|
if (!endResult) throw Error("%s", end.c_str());
|
||||||
|
|||||||
@@ -14,15 +14,13 @@ Copyright 2025 Yağız Zengin
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include "functions.hpp"
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#include "functions.hpp"
|
|
||||||
|
|
||||||
#define IFUN "infoFunction"
|
#define IFUN "infoFunction"
|
||||||
#define FUNCTION_CLASS infoFunction
|
#define FUNCTION_CLASS infoFunction
|
||||||
|
|
||||||
@@ -32,8 +30,7 @@ INIT {
|
|||||||
LOGN(IFUN, INFO) << "Initializing variables of info printer function."
|
LOGN(IFUN, INFO) << "Initializing variables of info printer function."
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
cmd = _app.add_subcommand("info", "Tell info(s) of input partition list")
|
cmd = _app.add_subcommand("info", "Tell info(s) of input partition list")
|
||||||
->footer(
|
->footer("Use get-all or getvar-all as partition name for getting "
|
||||||
"Use get-all or getvar-all as partition name for getting "
|
|
||||||
"info's of all partitions.\nUse get-logicals as partition "
|
"info's of all partitions.\nUse get-logicals as partition "
|
||||||
"name for getting info's of logical partitions.\n"
|
"name for getting info's of logical partitions.\n"
|
||||||
"Use get-physical as partition name for getting info's of "
|
"Use get-physical as partition name for getting info's of "
|
||||||
@@ -106,8 +103,7 @@ RUN {
|
|||||||
PART_MAP.doForLogicalPartitions(func);
|
PART_MAP.doForLogicalPartitions(func);
|
||||||
else if (partitions.back() == "get-physicals")
|
else if (partitions.back() == "get-physicals")
|
||||||
PART_MAP.doForPhysicalPartitions(func);
|
PART_MAP.doForPhysicalPartitions(func);
|
||||||
else
|
else PART_MAP.doForPartitionList(partitions, func);
|
||||||
PART_MAP.doForPartitionList(partitions, func);
|
|
||||||
|
|
||||||
if (jsonFormat) {
|
if (jsonFormat) {
|
||||||
nlohmann::json j;
|
nlohmann::json j;
|
||||||
|
|||||||
@@ -14,16 +14,14 @@ Copyright 2025 Yağız Zengin
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include "functions.hpp"
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <random>
|
#include <random>
|
||||||
|
#include <unistd.h>
|
||||||
#include "functions.hpp"
|
|
||||||
|
|
||||||
#define MTFUN "memoryTestFunction"
|
#define MTFUN "memoryTestFunction"
|
||||||
#define FUNCTION_CLASS memoryTestFunction
|
#define FUNCTION_CLASS memoryTestFunction
|
||||||
|
|||||||
@@ -14,9 +14,8 @@ Copyright 2025 Yağız Zengin
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
|
||||||
|
|
||||||
#include "functions.hpp"
|
#include "functions.hpp"
|
||||||
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
|
|
||||||
#define SFUN "partitionSizeFunction"
|
#define SFUN "partitionSizeFunction"
|
||||||
#define FUNCTION_CLASS partitionSizeFunction
|
#define FUNCTION_CLASS partitionSizeFunction
|
||||||
@@ -27,8 +26,7 @@ INIT {
|
|||||||
<< "Initializing variables of partition size getter function."
|
<< "Initializing variables of partition size getter function."
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
cmd = _app.add_subcommand("sizeof", "Tell size(s) of input partition list")
|
cmd = _app.add_subcommand("sizeof", "Tell size(s) of input partition list")
|
||||||
->footer(
|
->footer("Use get-all or getvar-all as partition name for getting "
|
||||||
"Use get-all or getvar-all as partition name for getting "
|
|
||||||
"sizes of all partitions.\nUse get-logicals as partition "
|
"sizes of all partitions.\nUse get-logicals as partition "
|
||||||
"name for getting sizes of logical partitions.\n"
|
"name for getting sizes of logical partitions.\n"
|
||||||
"Use get-physical as partition name for getting sizes of "
|
"Use get-physical as partition name for getting sizes of "
|
||||||
@@ -74,8 +72,7 @@ RUN {
|
|||||||
partition.data());
|
partition.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onlySize)
|
if (onlySize) println("%d", Helper::convertTo(props.size, multiple));
|
||||||
println("%d", Helper::convertTo(props.size, multiple));
|
|
||||||
else
|
else
|
||||||
println("%s: %d%s", partition.data(),
|
println("%s: %d%s", partition.data(),
|
||||||
Helper::convertTo(props.size, multiple),
|
Helper::convertTo(props.size, multiple),
|
||||||
@@ -90,8 +87,7 @@ RUN {
|
|||||||
PART_MAP.doForLogicalPartitions(func);
|
PART_MAP.doForLogicalPartitions(func);
|
||||||
else if (partitions.back() == "get-physicals")
|
else if (partitions.back() == "get-physicals")
|
||||||
PART_MAP.doForPhysicalPartitions(func);
|
PART_MAP.doForPhysicalPartitions(func);
|
||||||
else
|
else PART_MAP.doForPartitionList(partitions, func);
|
||||||
PART_MAP.doForPartitionList(partitions, func);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,9 +14,8 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
|
||||||
|
|
||||||
#include "functions.hpp"
|
#include "functions.hpp"
|
||||||
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
|
|
||||||
#define RPFUN "realPathFunction"
|
#define RPFUN "realPathFunction"
|
||||||
#define FUNCTION_CLASS realPathFunction
|
#define FUNCTION_CLASS realPathFunction
|
||||||
@@ -52,8 +51,7 @@ RUN {
|
|||||||
|
|
||||||
if (realLinkPath)
|
if (realLinkPath)
|
||||||
println("%s", PART_MAP.getRealLinkPathOf(partition).data());
|
println("%s", PART_MAP.getRealLinkPathOf(partition).data());
|
||||||
else
|
else println("%s", PART_MAP.getRealPathOf(partition).data());
|
||||||
println("%s", PART_MAP.getRealPathOf(partition).data());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -14,9 +14,8 @@ Copyright 2025 Yağız Zengin
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
|
||||||
|
|
||||||
#include "functions.hpp"
|
#include "functions.hpp"
|
||||||
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
|
|
||||||
#define RFUN "rebootFunction"
|
#define RFUN "rebootFunction"
|
||||||
#define FUNCTION_CLASS rebootFunction
|
#define FUNCTION_CLASS rebootFunction
|
||||||
@@ -36,10 +35,8 @@ RUN {
|
|||||||
<< (rebootTarget.empty() ? "none" : rebootTarget)
|
<< (rebootTarget.empty() ? "none" : rebootTarget)
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
||||||
if (Helper::androidReboot(rebootTarget))
|
if (Helper::androidReboot(rebootTarget)) println("Reboot command was sent");
|
||||||
println("Reboot command was sent");
|
else throw Error("Cannot reboot device");
|
||||||
else
|
|
||||||
throw Error("Cannot reboot device");
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,10 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "functions.hpp"
|
||||||
#include <PartitionManager/PartitionManager.hpp>
|
#include <PartitionManager/PartitionManager.hpp>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "functions.hpp"
|
|
||||||
|
|
||||||
#define TFUN "typeFunction"
|
#define TFUN "typeFunction"
|
||||||
#define FUNCTION_CLASS typeFunction
|
#define FUNCTION_CLASS typeFunction
|
||||||
|
|
||||||
@@ -48,8 +47,7 @@ RUN {
|
|||||||
magics.merge(PartitionMap::Extras::AndroidMagicMap);
|
magics.merge(PartitionMap::Extras::AndroidMagicMap);
|
||||||
else if (onlyCheckFileSystemMagics)
|
else if (onlyCheckFileSystemMagics)
|
||||||
magics.merge(PartitionMap::Extras::FileSystemMagicMap);
|
magics.merge(PartitionMap::Extras::FileSystemMagicMap);
|
||||||
else
|
else magics.merge(PartitionMap::Extras::MagicMap);
|
||||||
magics.merge(PartitionMap::Extras::MagicMap);
|
|
||||||
|
|
||||||
for (const auto &content : contents) {
|
for (const auto &content : contents) {
|
||||||
if (!PART_MAP.hasPartition(content) && !Helper::fileIsExists(content))
|
if (!PART_MAP.hasPartition(content) && !Helper::fileIsExists(content))
|
||||||
|
|||||||
@@ -17,9 +17,8 @@
|
|||||||
#ifndef LIBHELPER_LIB_HPP
|
#ifndef LIBHELPER_LIB_HPP
|
||||||
#define LIBHELPER_LIB_HPP
|
#define LIBHELPER_LIB_HPP
|
||||||
|
|
||||||
#include <dirent.h>
|
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <dirent.h>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
@@ -87,8 +86,7 @@ class Logger final {
|
|||||||
|
|
||||||
~Logger();
|
~Logger();
|
||||||
|
|
||||||
template <typename T>
|
template <typename T> Logger &operator<<(const T &msg) {
|
||||||
Logger& operator<<(const T& msg) {
|
|
||||||
_oss << msg;
|
_oss << msg;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@@ -108,8 +106,7 @@ class garbageCollector {
|
|||||||
public:
|
public:
|
||||||
~garbageCollector();
|
~garbageCollector();
|
||||||
|
|
||||||
template <typename T>
|
template <typename T> void delAfterProgress(T *_ptr) {
|
||||||
void delAfterProgress(T* _ptr) {
|
|
||||||
_cleaners.push_back([_ptr] { delete[] _ptr; });
|
_cleaners.push_back([_ptr] { delete[] _ptr; });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,10 +130,12 @@ class Random {
|
|||||||
|
|
||||||
if constexpr (d > 0) {
|
if constexpr (d > 0) {
|
||||||
std::uniform_int_distribution<> dist(0, (max - start - 1) / d);
|
std::uniform_int_distribution<> dist(0, (max - start - 1) / d);
|
||||||
while (set.size() < count) set.insert(start + dist(gen) * d);
|
while (set.size() < count)
|
||||||
|
set.insert(start + dist(gen) * d);
|
||||||
} else {
|
} else {
|
||||||
std::uniform_int_distribution<> dist(start, max - 1);
|
std::uniform_int_distribution<> dist(start, max - 1);
|
||||||
while (set.size() < count) set.insert(dist(gen));
|
while (set.size() < count)
|
||||||
|
set.insert(dist(gen));
|
||||||
}
|
}
|
||||||
|
|
||||||
return set;
|
return set;
|
||||||
@@ -159,15 +158,15 @@ class Random {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename _Type1, typename _Type2, typename _Type3>
|
template <typename _Type1, typename _Type2, typename _Type3> class PureTuple {
|
||||||
class PureTuple {
|
|
||||||
private:
|
private:
|
||||||
void expand_if_needed() {
|
void expand_if_needed() {
|
||||||
if (count == capacity) {
|
if (count == capacity) {
|
||||||
capacity *= 2;
|
capacity *= 2;
|
||||||
Data *data = new Data[capacity];
|
Data *data = new Data[capacity];
|
||||||
|
|
||||||
for (size_t i = 0; i < count; i++) data[i] = tuple_data[i];
|
for (size_t i = 0; i < count; i++)
|
||||||
|
data[i] = tuple_data[i];
|
||||||
|
|
||||||
delete[] tuple_data;
|
delete[] tuple_data;
|
||||||
tuple_data = data;
|
tuple_data = data;
|
||||||
@@ -180,8 +179,8 @@ class PureTuple {
|
|||||||
_Type2 second;
|
_Type2 second;
|
||||||
_Type3 third;
|
_Type3 third;
|
||||||
|
|
||||||
bool operator==(
|
bool
|
||||||
const std::tuple<_Type1, _Type2, _Type3>& t) const noexcept {
|
operator==(const std::tuple<_Type1, _Type2, _Type3> &t) const noexcept {
|
||||||
return first == std::get<0>(t) && second == std::get<1>(t) &&
|
return first == std::get<0>(t) && second == std::get<1>(t) &&
|
||||||
third == std::get<2>(t);
|
third == std::get<2>(t);
|
||||||
}
|
}
|
||||||
@@ -224,17 +223,16 @@ class PureTuple {
|
|||||||
|
|
||||||
PureTuple(std::initializer_list<Data> val)
|
PureTuple(std::initializer_list<Data> val)
|
||||||
: tuple_data(new Data[20]), capacity(20), count(0) {
|
: tuple_data(new Data[20]), capacity(20), count(0) {
|
||||||
for (const auto& v : val) insert(v);
|
for (const auto &v : val)
|
||||||
|
insert(v);
|
||||||
}
|
}
|
||||||
PureTuple(PureTuple &other)
|
PureTuple(PureTuple &other)
|
||||||
: tuple_data(new Data[other.capacity]),
|
: tuple_data(new Data[other.capacity]), capacity(other.capacity),
|
||||||
capacity(other.capacity),
|
|
||||||
count(other.count) {
|
count(other.count) {
|
||||||
std::copy(other.tuple_data, other.tuple_data + count, tuple_data);
|
std::copy(other.tuple_data, other.tuple_data + count, tuple_data);
|
||||||
}
|
}
|
||||||
PureTuple(PureTuple &&other) noexcept
|
PureTuple(PureTuple &&other) noexcept
|
||||||
: tuple_data(new Data[other.capacity]),
|
: tuple_data(new Data[other.capacity]), capacity(other.capacity),
|
||||||
capacity(other.capacity),
|
|
||||||
count(other.count) {
|
count(other.count) {
|
||||||
std::copy(other.tuple_data, other.tuple_data + count, tuple_data);
|
std::copy(other.tuple_data, other.tuple_data + count, tuple_data);
|
||||||
other.clear();
|
other.clear();
|
||||||
@@ -345,7 +343,8 @@ class PureTuple {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void merge(const PureTuple &other) noexcept {
|
void merge(const PureTuple &other) noexcept {
|
||||||
for (const auto& v : other) insert(v);
|
for (const auto &v : other)
|
||||||
|
insert(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pop_back() noexcept {
|
void pop_back() noexcept {
|
||||||
@@ -482,8 +481,7 @@ class PureTuple {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Provides a capsule structure to store variable references and values.
|
// Provides a capsule structure to store variable references and values.
|
||||||
template <typename _Type>
|
template <typename _Type> class Capsule : public garbageCollector {
|
||||||
class Capsule : public garbageCollector {
|
|
||||||
public:
|
public:
|
||||||
_Type &value;
|
_Type &value;
|
||||||
|
|
||||||
@@ -565,19 +563,13 @@ void set(std::string_view name, std::string_view file);
|
|||||||
void setProgramName(std::string_view name);
|
void setProgramName(std::string_view name);
|
||||||
void setLogFile(std::string_view file);
|
void setLogFile(std::string_view file);
|
||||||
|
|
||||||
template <int state>
|
template <int state> void setPrinting() {
|
||||||
void setPrinting() {
|
if (state == 1 || state == 0) PRINT = state;
|
||||||
if (state == 1 || state == 0)
|
else PRINT = NO;
|
||||||
PRINT = state;
|
|
||||||
else
|
|
||||||
PRINT = NO;
|
|
||||||
}
|
}
|
||||||
template <int state>
|
template <int state> void setLoggingState() {
|
||||||
void setLoggingState() {
|
if (state == 1 || state == 0) DISABLE = state;
|
||||||
if (state == 1 || state == 0)
|
else DISABLE = NO;
|
||||||
DISABLE = state;
|
|
||||||
else
|
|
||||||
DISABLE = NO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
@@ -817,8 +809,7 @@ __attribute__((format(printf, 1, 2))) std::string format(const char* format,
|
|||||||
/**
|
/**
|
||||||
* Convert input size to input multiple
|
* Convert input size to input multiple
|
||||||
*/
|
*/
|
||||||
template <uint64_t size>
|
template <uint64_t size> int convertTo(const sizeCastTypes type) {
|
||||||
int convertTo(const sizeCastTypes type) {
|
|
||||||
if (type == KB) return TO_KB(size);
|
if (type == KB) return TO_KB(size);
|
||||||
if (type == MB) return TO_MB(size);
|
if (type == MB) return TO_MB(size);
|
||||||
if (type == GB) return TO_GB(size);
|
if (type == GB) return TO_GB(size);
|
||||||
|
|||||||
@@ -14,13 +14,12 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <private/android_filesystem_config.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <libhelper/lib.hpp>
|
#include <libhelper/lib.hpp>
|
||||||
|
#include <private/android_filesystem_config.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
namespace Helper {
|
namespace Helper {
|
||||||
bool hasSuperUser() { return (getuid() == AID_ROOT); }
|
bool hasSuperUser() { return (getuid() == AID_ROOT); }
|
||||||
|
|||||||
@@ -14,20 +14,19 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <libgen.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <dirent.h>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <libgen.h>
|
||||||
#include <libhelper/lib.hpp>
|
#include <libhelper/lib.hpp>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
namespace Helper {
|
namespace Helper {
|
||||||
Error::Error(const char *format, ...) {
|
Error::Error(const char *format, ...) {
|
||||||
@@ -44,12 +43,8 @@ const char* Error::what() const noexcept { return _message.data(); }
|
|||||||
|
|
||||||
Logger::Logger(const LogLevels level, const char *func, const char *file,
|
Logger::Logger(const LogLevels level, const char *func, const char *file,
|
||||||
const char *name, const char *source_file, const int line)
|
const char *name, const char *source_file, const int line)
|
||||||
: _level(level),
|
: _level(level), _function_name(func), _logFile(file), _program_name(name),
|
||||||
_function_name(func),
|
_file(source_file), _line(line) {}
|
||||||
_logFile(file),
|
|
||||||
_program_name(name),
|
|
||||||
_file(source_file),
|
|
||||||
_line(line) {}
|
|
||||||
|
|
||||||
Logger::~Logger() {
|
Logger::~Logger() {
|
||||||
if (LoggingProperties::DISABLE) return;
|
if (LoggingProperties::DISABLE) return;
|
||||||
@@ -102,11 +97,16 @@ Logger& Logger::operator<<(std::ostream& (*msg)(std::ostream&)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
garbageCollector::~garbageCollector() {
|
garbageCollector::~garbageCollector() {
|
||||||
for (auto& ptr_func : _cleaners) ptr_func();
|
for (auto &ptr_func : _cleaners)
|
||||||
for (const auto& fd : _fds) close(fd);
|
ptr_func();
|
||||||
for (const auto& fp : _fps) fclose(fp);
|
for (const auto &fd : _fds)
|
||||||
for (const auto& dp : _dps) closedir(dp);
|
close(fd);
|
||||||
for (const auto& file : _files) eraseEntry(file);
|
for (const auto &fp : _fps)
|
||||||
|
fclose(fp);
|
||||||
|
for (const auto &dp : _dps)
|
||||||
|
closedir(dp);
|
||||||
|
for (const auto &file : _files)
|
||||||
|
eraseEntry(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
void garbageCollector::delFileAfterProgress(const std::string &_path) {
|
void garbageCollector::delFileAfterProgress(const std::string &_path) {
|
||||||
|
|||||||
@@ -14,17 +14,16 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <libhelper/lib.hpp>
|
#include <libhelper/lib.hpp>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
namespace Helper {
|
namespace Helper {
|
||||||
bool writeFile(const std::string_view file, const std::string_view text) {
|
bool writeFile(const std::string_view file, const std::string_view text) {
|
||||||
@@ -49,7 +48,8 @@ std::optional<std::string> readFile(const std::string_view file) {
|
|||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
std::string str;
|
std::string str;
|
||||||
while (fgets(buffer, sizeof(buffer), fp)) str += buffer;
|
while (fgets(buffer, sizeof(buffer), fp))
|
||||||
|
str += buffer;
|
||||||
|
|
||||||
LOGN(HELPER, INFO) << "read " << file << " successfully, read text: \"" << str
|
LOGN(HELPER, INFO) << "read " << file << " successfully, read text: \"" << str
|
||||||
<< "\"" << std::endl;
|
<< "\"" << std::endl;
|
||||||
|
|||||||
@@ -14,14 +14,13 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <picosha2.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <libhelper/lib.hpp>
|
#include <libhelper/lib.hpp>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
#include <picosha2.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace Helper {
|
namespace Helper {
|
||||||
|
|||||||
@@ -14,31 +14,28 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cutils/android_reboot.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
#include <cutils/android_reboot.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#ifndef ANDROID_BUILD
|
#ifndef ANDROID_BUILD
|
||||||
#include <sys/_system_properties.h>
|
|
||||||
|
|
||||||
#include <generated/buildInfo.hpp>
|
#include <generated/buildInfo.hpp>
|
||||||
|
#include <sys/_system_properties.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/system_properties.h>
|
#include <sys/system_properties.h>
|
||||||
#endif
|
#endif
|
||||||
#include <cutils/android_reboot.h>
|
|
||||||
#include <libgen.h>
|
|
||||||
#include <sys/_system_properties.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
|
#include <cutils/android_reboot.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <libgen.h>
|
||||||
#include <libhelper/lib.hpp>
|
#include <libhelper/lib.hpp>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
#include <sys/_system_properties.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
// From system/core/libcutils/android_reboot.cpp android16-s2-release
|
// From system/core/libcutils/android_reboot.cpp android16-s2-release
|
||||||
@@ -61,10 +58,8 @@ int android_reboot(const unsigned cmd, int /*flags*/, const char* arg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!restart_cmd) return -1;
|
if (!restart_cmd) return -1;
|
||||||
if (arg && arg[0])
|
if (arg && arg[0]) ret = asprintf(&prop_value, "%s,%s", restart_cmd, arg);
|
||||||
ret = asprintf(&prop_value, "%s,%s", restart_cmd, arg);
|
else ret = asprintf(&prop_value, "%s", restart_cmd);
|
||||||
else
|
|
||||||
ret = asprintf(&prop_value, "%s", restart_cmd);
|
|
||||||
|
|
||||||
if (ret < 0) return -1;
|
if (ret < 0) return -1;
|
||||||
ret = __system_property_set(ANDROID_RB_PROPERTY, prop_value);
|
ret = __system_property_set(ANDROID_RB_PROPERTY, prop_value);
|
||||||
|
|||||||
@@ -51,13 +51,11 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
if (!Helper::writeFile("file.txt", "hello world"))
|
if (!Helper::writeFile("file.txt", "hello world"))
|
||||||
throw Helper::Error("Cannot write \"hello world\" in 'file.txt'");
|
throw Helper::Error("Cannot write \"hello world\" in 'file.txt'");
|
||||||
else
|
else std::cout << "file.txt writed." << std::endl;
|
||||||
std::cout << "file.txt writed." << std::endl;
|
|
||||||
|
|
||||||
if (const auto content = Helper::readFile("file.txt"); !content)
|
if (const auto content = Helper::readFile("file.txt"); !content)
|
||||||
throw Helper::Error("Cannot read 'file.txt'");
|
throw Helper::Error("Cannot read 'file.txt'");
|
||||||
else
|
else std::cout << "'file.txt': " << *content << std::endl;
|
||||||
std::cout << "'file.txt': " << *content << std::endl;
|
|
||||||
|
|
||||||
std::cout << "Making directory 'dir2': " << std::boolalpha
|
std::cout << "Making directory 'dir2': " << std::boolalpha
|
||||||
<< Helper::makeDirectory(test_path("dir2")) << std::endl;
|
<< Helper::makeDirectory(test_path("dir2")) << std::endl;
|
||||||
@@ -82,8 +80,7 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
if (const auto sha256 = Helper::sha256Of(test_path("file2.txt")); !sha256)
|
if (const auto sha256 = Helper::sha256Of(test_path("file2.txt")); !sha256)
|
||||||
throw Helper::Error("Cannot get sha256 of 'file2.txt'");
|
throw Helper::Error("Cannot get sha256 of 'file2.txt'");
|
||||||
else
|
else std::cout << "SHA256 of 'file2.txt': " << *sha256 << std::endl;
|
||||||
std::cout << "SHA256 of 'file2.txt': " << *sha256 << std::endl;
|
|
||||||
|
|
||||||
std::cout << "'file2.txt' and 'file2lnk.txt' same? (SHA256): "
|
std::cout << "'file2.txt' and 'file2lnk.txt' same? (SHA256): "
|
||||||
<< std::boolalpha
|
<< std::boolalpha
|
||||||
|
|||||||
@@ -98,7 +98,8 @@ class basic_partition_map {
|
|||||||
|
|
||||||
explicit iterator(_entry *p);
|
explicit iterator(_entry *p);
|
||||||
|
|
||||||
auto operator*() const -> std::pair<std::string&, decltype(_entry::props)&>;
|
auto operator*() const
|
||||||
|
-> std::pair<std::string &, decltype(_entry::props) &>;
|
||||||
_entry *operator->() const;
|
_entry *operator->() const;
|
||||||
iterator &operator++();
|
iterator &operator++();
|
||||||
iterator operator++(int);
|
iterator operator++(int);
|
||||||
@@ -173,8 +174,8 @@ class basic_partition_map_builder final {
|
|||||||
* Map_temp_t type. If the partition is not in the
|
* Map_temp_t type. If the partition is not in the
|
||||||
* currently created list, returns std::nullopt.
|
* currently created list, returns std::nullopt.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] std::optional<std::pair<uint64_t, bool>> get(
|
[[nodiscard]] std::optional<std::pair<uint64_t, bool>>
|
||||||
std::string_view name) const;
|
get(std::string_view name) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If there is a logical partition(s) in the created
|
* If there is a logical partition(s) in the created
|
||||||
@@ -182,16 +183,16 @@ class basic_partition_map_builder final {
|
|||||||
* data of type std::string). If there is no logical
|
* data of type std::string). If there is no logical
|
||||||
* partition in the created list, it returns std::nullopt.
|
* partition in the created list, it returns std::nullopt.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] std::optional<std::list<std::string>> getLogicalPartitionList()
|
[[nodiscard]] std::optional<std::list<std::string>>
|
||||||
const;
|
getLogicalPartitionList() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The physical partitions in the created list are
|
* The physical partitions in the created list are
|
||||||
* returned as std::list type. If there is no content
|
* returned as std::list type. If there is no content
|
||||||
* due to any problem, returns std::nullopt.
|
* due to any problem, returns std::nullopt.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] std::optional<std::list<std::string>> getPhysicalPartitionList()
|
[[nodiscard]] std::optional<std::list<std::string>>
|
||||||
const;
|
getPhysicalPartitionList() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The partitions in the created list are returned as std::list
|
* The partitions in the created list are returned as std::list
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ Map_t basic_partition_map_builder::getAll() const {
|
|||||||
return _current_map;
|
return _current_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::pair<uint64_t, bool>> basic_partition_map_builder::get(
|
std::optional<std::pair<uint64_t, bool>>
|
||||||
const std::string_view name) const {
|
basic_partition_map_builder::get(const std::string_view name) const {
|
||||||
_map_build_check();
|
_map_build_check();
|
||||||
|
|
||||||
if (!_current_map.find(name)) return std::nullopt;
|
if (!_current_map.find(name)) return std::nullopt;
|
||||||
@@ -63,7 +63,8 @@ basic_partition_map_builder::getPartitionList() const {
|
|||||||
_map_build_check();
|
_map_build_check();
|
||||||
|
|
||||||
std::list<std::string> partitions;
|
std::list<std::string> partitions;
|
||||||
for (const auto& [name, props] : _current_map) partitions.push_back(name);
|
for (const auto &[name, props] : _current_map)
|
||||||
|
partitions.push_back(name);
|
||||||
|
|
||||||
if (partitions.empty()) return std::nullopt;
|
if (partitions.empty()) return std::nullopt;
|
||||||
return partitions;
|
return partitions;
|
||||||
@@ -77,8 +78,8 @@ std::string basic_partition_map_builder::getRealLinkPathOf(
|
|||||||
return std::string(_workdir + "/" + name.data());
|
return std::string(_workdir + "/" + name.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string basic_partition_map_builder::getRealPathOf(
|
std::string
|
||||||
const std::string_view name) const {
|
basic_partition_map_builder::getRealPathOf(const std::string_view name) const {
|
||||||
_map_build_check();
|
_map_build_check();
|
||||||
|
|
||||||
const std::string full = (isLogical(name))
|
const std::string full = (isLogical(name))
|
||||||
|
|||||||
@@ -15,13 +15,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <libhelper/lib.hpp>
|
#include <libhelper/lib.hpp>
|
||||||
#include <libpartition_map/lib.hpp>
|
#include <libpartition_map/lib.hpp>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "PartitionManager/PartitionManager.hpp"
|
#include "PartitionManager/PartitionManager.hpp"
|
||||||
|
|
||||||
|
|||||||
@@ -14,26 +14,24 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#ifndef ANDROID_BUILD
|
#ifndef ANDROID_BUILD
|
||||||
#include <generated/buildInfo.hpp>
|
#include <generated/buildInfo.hpp>
|
||||||
#endif
|
#endif
|
||||||
#include <linux/fs.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <libpartition_map/lib.hpp>
|
#include <libpartition_map/lib.hpp>
|
||||||
|
#include <linux/fs.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
static constexpr std::array<std::string_view, 3> defaultEntryList = {
|
static constexpr std::array<std::string_view, 3> defaultEntryList = {
|
||||||
@@ -151,10 +149,8 @@ basic_partition_map_builder::basic_partition_map_builder(
|
|||||||
if (std::filesystem::exists(path)) {
|
if (std::filesystem::exists(path)) {
|
||||||
if (!_is_real_block_dir(path)) return;
|
if (!_is_real_block_dir(path)) return;
|
||||||
_current_map = _build_map(path);
|
_current_map = _build_map(path);
|
||||||
if (_current_map.empty())
|
if (_current_map.empty()) _any_generating_error = true;
|
||||||
_any_generating_error = true;
|
else _workdir = path;
|
||||||
else
|
|
||||||
_workdir = path;
|
|
||||||
} else
|
} else
|
||||||
throw Error("Cannot find directory: %s. Cannot build partition map!",
|
throw Error("Cannot find directory: %s. Cannot build partition map!",
|
||||||
path.data());
|
path.data());
|
||||||
@@ -209,8 +205,7 @@ bool basic_partition_map_builder::readDirectory(const std::string_view path) {
|
|||||||
if (_current_map.empty()) {
|
if (_current_map.empty()) {
|
||||||
_any_generating_error = true;
|
_any_generating_error = true;
|
||||||
return false;
|
return false;
|
||||||
} else
|
} else _workdir = path;
|
||||||
_workdir = path;
|
|
||||||
} else
|
} else
|
||||||
throw Error("Cannot find directory: %s. Cannot build partition map!",
|
throw Error("Cannot find directory: %s. Cannot build partition map!",
|
||||||
path.data());
|
path.data());
|
||||||
@@ -255,7 +250,8 @@ bool basic_partition_map_builder::copyPartitionsToVector(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
vec.clear();
|
vec.clear();
|
||||||
for (const auto& [name, props] : _current_map) vec.push_back(name);
|
for (const auto &[name, props] : _current_map)
|
||||||
|
vec.push_back(name);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,8 +268,7 @@ bool basic_partition_map_builder::copyLogicalPartitionsToVector(
|
|||||||
if (vec2.empty()) {
|
if (vec2.empty()) {
|
||||||
LOGN(MAP, ERROR) << "Cannot find logical partitions in current map.";
|
LOGN(MAP, ERROR) << "Cannot find logical partitions in current map.";
|
||||||
return false;
|
return false;
|
||||||
} else
|
} else vec = vec2;
|
||||||
vec = vec2;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,8 +285,7 @@ bool basic_partition_map_builder::copyPhysicalPartitionsToVector(
|
|||||||
if (vec2.empty()) {
|
if (vec2.empty()) {
|
||||||
LOGN(MAP, ERROR) << "Cannot find physical partitions in current map.";
|
LOGN(MAP, ERROR) << "Cannot find physical partitions in current map.";
|
||||||
return false;
|
return false;
|
||||||
} else
|
} else vec = vec2;
|
||||||
vec = vec2;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -385,8 +379,8 @@ bool basic_partition_map_builder::doForPartitionList(
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t basic_partition_map_builder::sizeOf(
|
uint64_t
|
||||||
const std::string_view name) const {
|
basic_partition_map_builder::sizeOf(const std::string_view name) const {
|
||||||
_map_build_check();
|
_map_build_check();
|
||||||
return _current_map.get_size(name);
|
return _current_map.get_size(name);
|
||||||
}
|
}
|
||||||
@@ -425,8 +419,8 @@ Info basic_partition_map_builder::operator[](const int index) const {
|
|||||||
return _current_map[index];
|
return _current_map[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicInf basic_partition_map_builder::operator[](
|
BasicInf
|
||||||
const std::string_view& name) const {
|
basic_partition_map_builder::operator[](const std::string_view &name) const {
|
||||||
return _current_map[name];
|
return _current_map[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,8 @@ void basic_partition_map::_resize_map() {
|
|||||||
const size_t new_capacity = _capacity * 2;
|
const size_t new_capacity = _capacity * 2;
|
||||||
auto *new_data = new _entry[new_capacity];
|
auto *new_data = new _entry[new_capacity];
|
||||||
|
|
||||||
for (size_t i = 0; i < _count; i++) new_data[i] = _data[i];
|
for (size_t i = 0; i < _count; i++)
|
||||||
|
new_data[i] = _data[i];
|
||||||
|
|
||||||
delete[] _data;
|
delete[] _data;
|
||||||
_data = new_data;
|
_data = new_data;
|
||||||
@@ -110,15 +111,13 @@ basic_partition_map::basic_partition_map(const std::string& name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
basic_partition_map::basic_partition_map(const basic_partition_map &other)
|
basic_partition_map::basic_partition_map(const basic_partition_map &other)
|
||||||
: _data(new _entry[other._capacity]),
|
: _data(new _entry[other._capacity]), _count(other._count),
|
||||||
_count(other._count),
|
|
||||||
_capacity(other._capacity) {
|
_capacity(other._capacity) {
|
||||||
std::copy(other._data, other._data + _count, _data);
|
std::copy(other._data, other._data + _count, _data);
|
||||||
}
|
}
|
||||||
|
|
||||||
basic_partition_map::basic_partition_map(basic_partition_map &&other) noexcept
|
basic_partition_map::basic_partition_map(basic_partition_map &&other) noexcept
|
||||||
: _data(new _entry[other._capacity]),
|
: _data(new _entry[other._capacity]), _count(other._count),
|
||||||
_count(other._count),
|
|
||||||
_capacity(other._capacity) {
|
_capacity(other._capacity) {
|
||||||
std::copy(other._data, other._data + _count, _data);
|
std::copy(other._data, other._data + _count, _data);
|
||||||
other.clear();
|
other.clear();
|
||||||
@@ -163,8 +162,8 @@ bool basic_partition_map::is_logical(const std::string_view name) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_returnable_entry basic_partition_map::get_all(
|
_returnable_entry
|
||||||
const std::string_view name) const {
|
basic_partition_map::get_all(const std::string_view name) const {
|
||||||
if (const int pos = _index_of(name); name == _data[pos].name)
|
if (const int pos = _index_of(name); name == _data[pos].name)
|
||||||
return _returnable_entry{_data[pos].props.size, _data[pos].props.isLogical};
|
return _returnable_entry{_data[pos].props.size, _data[pos].props.isLogical};
|
||||||
|
|
||||||
@@ -195,8 +194,8 @@ void basic_partition_map::clear() {
|
|||||||
_data = new _entry[_capacity];
|
_data = new _entry[_capacity];
|
||||||
}
|
}
|
||||||
|
|
||||||
basic_partition_map& basic_partition_map::operator=(
|
basic_partition_map &
|
||||||
const basic_partition_map& map) {
|
basic_partition_map::operator=(const basic_partition_map &map) {
|
||||||
if (this != &map) {
|
if (this != &map) {
|
||||||
delete[] _data;
|
delete[] _data;
|
||||||
|
|
||||||
@@ -218,8 +217,7 @@ bool basic_partition_map::operator==(const basic_partition_map& other) const {
|
|||||||
_data[i].props.size == other._data[i].props.size &&
|
_data[i].props.size == other._data[i].props.size &&
|
||||||
_data[i].props.isLogical == other._data[i].props.isLogical)
|
_data[i].props.isLogical == other._data[i].props.isLogical)
|
||||||
continue;
|
continue;
|
||||||
else
|
else return false;
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,10 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <libpartition_map/lib.hpp>
|
#include <libpartition_map/lib.hpp>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
if (getuid() != 0) return 2;
|
if (getuid() != 0) return 2;
|
||||||
|
|||||||
Reference in New Issue
Block a user