diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2016-03-11 10:49:35 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-03-11 10:49:35 +0100 |
commit | 330dc0a6b7866f4256a058b2e8980a7522ee04e2 (patch) | |
tree | ffe42e2a25e89ab99ab4b0dcefbf7254fc578adb /common/bbu.c | |
parent | aaad4dad239d59520063c09288480ab215a263f9 (diff) | |
parent | 0240fd3f8469eba3bda367b79dc221b9736baec7 (diff) | |
download | barebox-330dc0a6b7866f4256a058b2e8980a7522ee04e2.tar.gz barebox-330dc0a6b7866f4256a058b2e8980a7522ee04e2.tar.xz |
Merge branch 'for-next/bbu'
Diffstat (limited to 'common/bbu.c')
-rw-r--r-- | common/bbu.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/common/bbu.c b/common/bbu.c index fc821934c6..68812a733d 100644 --- a/common/bbu.c +++ b/common/bbu.c @@ -97,6 +97,34 @@ static struct bbu_handler *bbu_find_handler(const char *name) return NULL; } +static struct bbu_handler *bbu_find_handler_by_device(const char *devicepath) +{ + struct bbu_handler *handler; + + if (!devicepath) + return NULL; + + list_for_each_entry(handler, &bbu_image_handlers, list) + if (!strcmp(handler->devicefile, devicepath)) + return handler; + + return NULL; +} + +bool barebox_update_handler_exists(struct bbu_data *data) +{ + struct bbu_handler *handler; + + handler = bbu_find_handler_by_device(data->devicefile); + if (handler) + return true; + + if (!data->handler_name) + return false; + + return !bbu_find_handler(data->handler_name); +} + /* * do a barebox update with data from *data */ @@ -105,7 +133,11 @@ int barebox_update(struct bbu_data *data) struct bbu_handler *handler; int ret; - handler = bbu_find_handler(data->handler_name); + handler = bbu_find_handler_by_device(data->devicefile); + + if (!handler) + handler = bbu_find_handler(data->handler_name); + if (!handler) return -ENODEV; |