diff --git a/commands/barebox-update.c b/commands/barebox-update.c index 84798ab..903b406 100644 --- a/commands/barebox-update.c +++ b/commands/barebox-update.c @@ -28,6 +28,7 @@ { int opt, ret, repair = 0; struct bbu_data data = {}; + struct bbu_handler *handler; void *image = NULL; while ((opt = getopt(argc, argv, "t:yf:ld:r")) > 0) { @@ -69,7 +70,15 @@ return COMMAND_ERROR_USAGE; } - ret = barebox_update(&data); + handler = bbu_find_handler_by_device(data.devicefile); + + if (!handler) + handler = bbu_find_handler_by_name(data.handler_name); + + if (!handler) + return COMMAND_ERROR_USAGE; + + ret = barebox_update(&data, handler); free(image); diff --git a/common/bbu.c b/common/bbu.c index fabd949..75c3221 100644 --- a/common/bbu.c +++ b/common/bbu.c @@ -216,19 +216,10 @@ /* * do a barebox update with data from *data */ -int barebox_update(struct bbu_data *data) +int barebox_update(struct bbu_data *data, struct bbu_handler *handler) { - struct bbu_handler *handler; int ret; - handler = bbu_find_handler_by_device(data->devicefile); - - if (!handler) - handler = bbu_find_handler_by_name(data->handler_name); - - if (!handler) - return -ENODEV; - if (!data->image && !data->imagefile && !(handler->flags & BBU_HANDLER_CAN_REFRESH)) { pr_err("No Image file given\n"); diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 0f25c13..58d9230 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -986,12 +986,14 @@ } if (IS_ENABLED(CONFIG_BAREBOX_UPDATE) && filetype_is_barebox_image(filetype)) { + struct bbu_handler *handler; struct bbu_data data = { .devicefile = filename, .flags = BBU_FLAG_YES, }; - if (!bbu_find_handler_by_device(data.devicefile)) + handler = bbu_find_handler_by_device(data.devicefile); + if (!handler) goto copy; fastboot_tx_print(f_fb, "INFOThis is a barebox image..."); @@ -1010,7 +1012,7 @@ data.image = f_fb->buf; data.imagefile = sourcefile; - ret = barebox_update(&data); + ret = barebox_update(&data, handler); if (ret) fastboot_tx_print(f_fb, "FAILupdate barebox: %s", strerror(-ret)); diff --git a/include/bbu.h b/include/bbu.h index 775d7a3..0ed355b 100644 --- a/include/bbu.h +++ b/include/bbu.h @@ -40,7 +40,7 @@ int bbu_confirm(struct bbu_data *); -int barebox_update(struct bbu_data *); +int barebox_update(struct bbu_data *, struct bbu_handler *); struct bbu_handler *bbu_find_handler_by_name(const char *name); struct bbu_handler *bbu_find_handler_by_device(const char *devicepath);