pbt: upgrade to 1.5.0

This commit is contained in:
2024-03-04 23:54:36 +03:00
committed by GitHub
parent 48bc47c1e2
commit a5ded6a26e

View File

@@ -18,7 +18,8 @@
#define PACK_NAME "Partition Backupper" #define PACK_NAME "Partition Backupper"
#define PACK_LANG "en" #define PACK_LANG "en"
#include "include/pbt.h" #include "include/common.h"
#include "include/tools.h"
#include "include/documentation.h" #include "include/documentation.h"
/* By YZBruh */ /* By YZBruh */
@@ -72,6 +73,7 @@ int main(int argc, char *argv[]) {
struct option long_options[] = { struct option long_options[] = {
{"partition", required_argument, 0, 'p'}, {"partition", required_argument, 0, 'p'},
{"logical", no_argument, 0, 'l'}, {"logical", no_argument, 0, 'l'},
{"flash", required_argument, 0, 'f'},
{"out", required_argument, 0, 'o'}, {"out", required_argument, 0, 'o'},
{"outdir", required_argument, 0, 'd'}, {"outdir", required_argument, 0, 'd'},
{"context", required_argument, 0, 'c'}, {"context", required_argument, 0, 'c'},
@@ -81,9 +83,8 @@ int main(int argc, char *argv[]) {
{"license", no_argument, 0, 'L'}, {"license", no_argument, 0, 'L'},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
char *argx_target_p; use_argx_p = false;
bool use_argx_p = false; use_logical = false;
bool use_logical = false;
int opt; int opt;
/* control for each argument */ /* control for each argument */
while ((opt = getopt_long(argc, argv, "p:lo:d:c:DvhL", long_options, NULL)) != -1) { while ((opt = getopt_long(argc, argv, "p:lo:d:c:DvhL", long_options, NULL)) != -1) {
@@ -91,7 +92,6 @@ int main(int argc, char *argv[]) {
switch (opt) { switch (opt) {
case 'p': case 'p':
argx_target_p = strdup(optarg); argx_target_p = strdup(optarg);
use_argx_p = true;
break; break;
case 'l': case 'l':
verify_root(); verify_root();
@@ -102,6 +102,10 @@ int main(int argc, char *argv[]) {
error("This device does not have logical partitions!\n"); error("This device does not have logical partitions!\n");
} }
break; break;
case 'f':
target_flash_f = strdup(optarg);
pbt_flash_mode = true;
break;
case 'o': case 'o':
out = strdup(optarg); out = strdup(optarg);
break; break;
@@ -156,6 +160,27 @@ int main(int argc, char *argv[]) {
} }
verify_root(); verify_root();
check_psf(); check_psf();
/* check flash stats */
if (pbt_flash_mode) {
if (argx_target_p == NULL) {
fprintf(stderr, "To use the flash function, you need to specify a partition.\n");
exit(EXIT_FAILURE);
}
struct stat flashf_info;
if (stat(target_flash_f, &flashf_info) != 0) {
fprintf(stderr, "%s: %s: no such file or directory.\n", argv[0], target_flash_f);
exit(EXIT_FAILURE);
} else {
if (S_ISREG(flashf_info.st_mode)) {
/* empty */
} else {
fprintf(stderr, "%s: %s: is a not file.\n", argv[0], target_flash_f);
exit(EXIT_FAILURE);
}
}
flash(argx_target_p, target_flash_f);
exit(EXIT_SUCCESS);
}
/* custom context checker */ /* custom context checker */
if (use_cust_cxt) { if (use_cust_cxt) {
struct stat cxtinfo; struct stat cxtinfo;
@@ -174,11 +199,13 @@ int main(int argc, char *argv[]) {
printf("%sThis custom context is strange...%s", ANSI_YELLOW, ANSI_RESET); printf("%sThis custom context is strange...%s", ANSI_YELLOW, ANSI_RESET);
} }
} }
if (use_argx_p) { if (argx_target_p != NULL) {
if (use_logical) { if (use_logical) {
backup(argx_target_p, "logical"); backup(argx_target_p, "logical");
exit(EXIT_SUCCESS);
} else { } else {
backup(argx_target_p, "classic"); backup(argx_target_p, "classic");
exit(EXIT_SUCCESS);
} }
} else { } else {
fprintf(stderr, "%s: required partition name.\nTry `%s --help' for more information.\n", argv[0], argv[0]); fprintf(stderr, "%s: required partition name.\nTry `%s --help' for more information.\n", argv[0], argv[0]);