From d5af695a87df96d4cc6c404db8990a493970add0 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Sat, 3 Nov 2012 13:42:30 +0100 Subject: [PATCH] barebox update: fix finding default handler It was not possible to register another handler when already a default handler is registered. Fix this. Signed-off-by: Sascha Hauer --- common/bbu.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/common/bbu.c b/common/bbu.c index 92f8d2b2f..e31f645d9 100644 --- a/common/bbu.c +++ b/common/bbu.c @@ -71,13 +71,13 @@ int bbu_confirm(struct bbu_data *data) return -EINTR; } -static struct bbu_handler *bbu_find_handler(const char *name, unsigned long flags) +static struct bbu_handler *bbu_find_handler(const char *name) { struct bbu_handler *handler; list_for_each_entry(handler, &bbu_image_handlers, list) { if (!name) { - if (flags & BBU_HANDLER_FLAG_DEFAULT) + if (handler->flags & BBU_HANDLER_FLAG_DEFAULT) return handler; continue; } @@ -97,10 +97,13 @@ int barebox_update(struct bbu_data *data) struct bbu_handler *handler; int ret; - handler = bbu_find_handler(data->handler_name, data->flags); + handler = bbu_find_handler(data->handler_name); if (!handler) return -ENODEV; + if (!data->handler_name) + data->handler_name = handler->name; + if (!data->devicefile) data->devicefile = handler->devicefile; @@ -137,11 +140,11 @@ void bbu_handlers_list(void) */ int bbu_register_handler(struct bbu_handler *handler) { - if (bbu_find_handler(handler->name, 0)) + if (bbu_find_handler(handler->name)) return -EBUSY; if (handler->flags & BBU_HANDLER_FLAG_DEFAULT && - bbu_find_handler(NULL, BBU_HANDLER_FLAG_DEFAULT)) + bbu_find_handler(NULL)) return -EBUSY; list_add_tail(&handler->list, &bbu_image_handlers);