diff options
author | Jacob Garber <jgarber1@ualberta.ca> | 2019-06-05 17:03:30 -0600 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2019-06-28 19:32:18 +0000 |
commit | 464f4d6ee240e5afd44317d9b7bc4a1228c04899 (patch) | |
tree | dac056ca7e269aec511043a5569d355a8f2b8a9d | |
parent | f77f7cdf891a3ab47f71eb392e4229ece33f27ac (diff) | |
download | coreboot-464f4d6ee240e5afd44317d9b7bc4a1228c04899.tar.xz |
device: Tidy up add_more_links()
- Add documentation comment
- Use 'unsigned int' to make checkpatch happy
- Return early if no more links need to be added
- Add error handling if malloc fails
- Clean up whitespace
Change-Id: I70976ee2539b058721d0ae3c15edf279253cd9b7
Signed-off-by: Jacob Garber <jgarber1@ualberta.ca>
Found-by: Coverity CID 1229634
Reviewed-on: https://review.coreboot.org/c/coreboot/+/33238
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r-- | src/device/device_util.c | 21 | ||||
-rw-r--r-- | src/include/device/device.h | 2 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/device/device_util.c b/src/device/device_util.c index e2370a1cce..11954a1982 100644 --- a/src/device/device_util.c +++ b/src/device/device_util.c @@ -654,7 +654,13 @@ bool dev_is_active_bridge(struct device *dev) return 0; } -void add_more_links(struct device *dev, unsigned total_links) +/** + * Ensure the device has a minimum number of bus links. + * + * @param dev The device to add links to. + * @param total_links The minimum number of links to have. + */ +void add_more_links(struct device *dev, unsigned int total_links) { struct bus *link, *last = NULL; int link_num = -1; @@ -668,15 +674,20 @@ void add_more_links(struct device *dev, unsigned total_links) if (last) { int links = total_links - (link_num + 1); if (links > 0) { - link = malloc(links*sizeof(*link)); + link = malloc(links * sizeof(*link)); if (!link) die("Couldn't allocate more links!\n"); - memset(link, 0, links*sizeof(*link)); + memset(link, 0, links * sizeof(*link)); last->next = link; + } else { + /* No more links to add */ + return; } } else { - link = malloc(total_links*sizeof(*link)); - memset(link, 0, total_links*sizeof(*link)); + link = malloc(total_links * sizeof(*link)); + if (!link) + die("Couldn't allocate more links!\n"); + memset(link, 0, total_links * sizeof(*link)); dev->link_list = link; } diff --git a/src/include/device/device.h b/src/include/device/device.h index 52635e1bd2..8e9454c4e1 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -191,7 +191,7 @@ const char *bus_path(struct bus *bus); void dev_set_enabled(struct device *dev, int enable); void disable_children(struct bus *bus); bool dev_is_active_bridge(struct device *dev); -void add_more_links(struct device *dev, unsigned total_links); +void add_more_links(struct device *dev, unsigned int total_links); /* Option ROM helper functions */ void run_bios(struct device *dev, unsigned long addr); |