mirror of
https://github.com/linux-msm/qbootctl.git
synced 2026-02-25 13:13:44 -08:00
properly error if run on a non-A/B device
Detect the case where there are no A/B partitions and print an error about it rather than erroneously continuing execution. Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
@@ -51,8 +51,9 @@ struct boot_control_module {
|
||||
* The returned value is always guaranteed to be strictly less than the
|
||||
* value returned by getNumberSlots. Slots start at 0 and
|
||||
* finish at getNumberSlots() - 1
|
||||
* Returns -ENOENT on devices with no slots.
|
||||
*/
|
||||
unsigned (*getCurrentSlot)();
|
||||
int (*getCurrentSlot)();
|
||||
|
||||
/*
|
||||
* (*markBootSuccessful)() marks the specified slot
|
||||
|
||||
@@ -358,13 +358,15 @@ unsigned get_active_boot_slot()
|
||||
* (e.g. because we booted via a secondary bootloader that removes Android cmdline args) then we
|
||||
* assume that the active slot is the current slot
|
||||
*/
|
||||
static unsigned int get_current_or_active_slot()
|
||||
static int get_current_or_active_slot()
|
||||
{
|
||||
uint32_t num_slots = 0;
|
||||
char bootSlotProp[MAX_CMDLINE_SIZE] = { '\0' };
|
||||
unsigned i = 0;
|
||||
num_slots = get_number_slots();
|
||||
if (num_slots <= 1) {
|
||||
if (num_slots == 0)
|
||||
return -ENOENT;
|
||||
if (num_slots == 1) {
|
||||
// Slot 0 is the only slot around.
|
||||
return 0;
|
||||
}
|
||||
|
||||
20
qbootctl.c
20
qbootctl.c
@@ -115,10 +115,9 @@ int get_slot_info(struct slot_info *slots)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dump_info()
|
||||
static void dump_info(int current_slot)
|
||||
{
|
||||
struct slot_info slots[2] = { { 0 } };
|
||||
int current_slot = impl->getCurrentSlot();
|
||||
|
||||
get_slot_info(slots);
|
||||
|
||||
@@ -135,7 +134,7 @@ void dump_info()
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int optflag;
|
||||
int slot = -1;
|
||||
int slot = -1, current_slot;
|
||||
int rc;
|
||||
bool ignore_missing_bsg = false;
|
||||
|
||||
@@ -144,9 +143,15 @@ int main(int argc, char **argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
current_slot = impl->getCurrentSlot();
|
||||
if (current_slot < 0) {
|
||||
fprintf(stderr, "No slots found, is this an A/B device?\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
switch (argc) {
|
||||
case 1:
|
||||
dump_info();
|
||||
dump_info(current_slot);
|
||||
return 0;
|
||||
case 2:
|
||||
break;
|
||||
@@ -157,14 +162,13 @@ int main(int argc, char **argv)
|
||||
return usage();
|
||||
}
|
||||
|
||||
if (slot < 0)
|
||||
slot = impl->getCurrentSlot();
|
||||
|
||||
optflag = getopt(argc, argv, "hcmas:ub:n:x");
|
||||
|
||||
if (slot < 0 || optflag == 'c')
|
||||
slot = current_slot;
|
||||
|
||||
switch (optflag) {
|
||||
case 'c':
|
||||
slot = impl->getCurrentSlot();
|
||||
printf("Current slot: %s\n", impl->getSuffix(slot));
|
||||
return 0;
|
||||
case 'a':
|
||||
|
||||
Reference in New Issue
Block a user