X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fefibootmgr%2Fefibootmgr.c;fp=src%2Fefibootmgr%2Fefibootmgr.c;h=5db0d9e65e1304d17dbeef09e6fe6631614f69f7;hb=438378f384ede73602fcdfd288e45ac41d933bb0;hp=7aeb1868e0e9bc7e1e780b92a6b3ab0fbd68a895;hpb=5a32ac6f167fe2ffdd5711ceafe2b39db8ad1ce0;p=debian%2Fefibootmgr diff --git a/src/efibootmgr/efibootmgr.c b/src/efibootmgr/efibootmgr.c index 7aeb186..5db0d9e 100644 --- a/src/efibootmgr/efibootmgr.c +++ b/src/efibootmgr/efibootmgr.c @@ -436,7 +436,10 @@ delete_boot_var(uint16_t num) status = delete_variable(&var); } - if (status) return status; + if (status) { + fprintf (stderr,"\nboot entry: %X not found\n\n",num); + return status; + } list_for_each_safe(pos, n, &boot_entry_list) { boot = list_entry(pos, var_entry_t, list); if (boot->num == num) { @@ -583,6 +586,21 @@ unparse_boot_order(uint16_t *order, int length) printf("\n"); } +static int +is_current_boot_entry(int b) +{ + list_t *pos; + var_entry_t *boot; + + list_for_each(pos, &boot_entry_list) { + boot = list_entry(pos, var_entry_t, list); + if (boot->num == b) + return 1; + } + return 0; +} + + static int parse_boot_order(char *buffer, uint16_t *order, int length) { @@ -592,6 +610,16 @@ parse_boot_order(char *buffer, uint16_t *order, int length) for (i=0; i= 0) { - set_active_state(); + if (opts.bootnum == -1) { + fprintf(stderr, "\nYou must specify a boot entry to delete (see the -b option).\n\n"); + return 1; + } + else + ret=set_active_state(); } } if (opts.create) { warn_duplicate_name(&boot_entry_list); new_boot = make_boot_var(&boot_entry_list); + if (!new_boot) + return 1; + /* Put this boot var in the right BootOrder */ if (!opts.testfile && new_boot) - add_to_boot_order(new_boot->num); + ret=add_to_boot_order(new_boot->num); } if (!opts.testfile) { if (opts.delete_bootorder) { - delete_var("BootOrder"); + ret=delete_var("BootOrder"); } if (opts.bootorder) { - set_boot_order(); + ret=set_boot_order(); } if (opts.delete_bootnext) { - delete_var("BootNext"); + ret=delete_var("BootNext"); } if (opts.delete_timeout) { - delete_var("Timeout"); + ret=delete_var("Timeout"); } if (opts.bootnext >= 0) { - set_boot_u16("BootNext", opts.bootnext & 0xFFFF); + if (!is_current_boot_entry(opts.bootnext & 0xFFFF)){ + fprintf (stderr,"\n\nboot entry %X does not exist\n\n", + opts.bootnext); + return 1; + } + ret=set_boot_u16("BootNext", opts.bootnext & 0xFFFF); } if (opts.set_timeout) { - set_boot_u16("Timeout", opts.timeout); + ret=set_boot_u16("Timeout", opts.timeout); } - if (!opts.quiet) { + if (!opts.quiet && ret == 0) { num = read_boot_u16("BootNext"); if (num != -1 ) { printf("BootNext: %04X\n", num); @@ -1045,6 +1130,8 @@ main(int argc, char **argv) } free_dirents(boot_names, num_boot_names); free_vars(&boot_entry_list); + if (ret) + return 1; return 0; }