bootspec: sprinkle some argument assert()s all over the place

The previous commit fixed a NULL parameter issue, let's check for such,
to make it easier to find issues like this.
This commit is contained in:
Lennart Poettering 2017-12-11 22:22:04 +01:00
parent ecec2a5d7a
commit 4fe2ba0e25

View file

@ -36,8 +36,9 @@
#include "virt.h"
void boot_entry_free(BootEntry *entry) {
free(entry->filename);
assert(entry);
free(entry->filename);
free(entry->title);
free(entry->show_title);
free(entry->version);
@ -56,6 +57,9 @@ int boot_entry_load(const char *path, BootEntry *entry) {
_cleanup_(boot_entry_free) BootEntry tmp = {};
int r;
assert(path);
assert(entry);
f = fopen(path, "re");
if (!f)
return log_error_errno(errno, "Failed to open \"%s\": %m", path);
@ -123,6 +127,8 @@ int boot_entry_load(const char *path, BootEntry *entry) {
void boot_config_free(BootConfig *config) {
unsigned i;
assert(config);
free(config->default_pattern);
free(config->timeout);
free(config->editor);
@ -140,6 +146,9 @@ int boot_loader_read_conf(const char *path, BootConfig *config) {
unsigned line = 1;
int r;
assert(path);
assert(config);
f = fopen(path, "re");
if (!f)
return log_error_errno(errno, "Failed to open \"%s\": %m", path);
@ -251,14 +260,17 @@ static int boot_entry_compare(const void *a, const void *b) {
return str_verscmp(aa->filename, bb->filename);
}
int boot_entries_find(const char *dir, BootEntry **entries, size_t *n_entries) {
int boot_entries_find(const char *dir, BootEntry **ret_entries, size_t *ret_n_entries) {
_cleanup_strv_free_ char **files = NULL;
char **f;
int r;
BootEntry *array = NULL;
size_t n_allocated = 0, n = 0;
assert(dir);
assert(ret_entries);
assert(ret_n_entries);
r = conf_files_list(&files, ".conf", NULL, 0, dir, NULL);
if (r < 0)
return log_error_errno(r, "Failed to list files in \"%s\": %m", dir);
@ -276,8 +288,9 @@ int boot_entries_find(const char *dir, BootEntry **entries, size_t *n_entries) {
qsort_safe(array, n, sizeof(BootEntry), boot_entry_compare);
*entries = array;
*n_entries = n;
*ret_entries = array;
*ret_n_entries = n;
return 0;
}
@ -285,6 +298,9 @@ static bool find_nonunique(BootEntry *entries, size_t n_entries, bool *arr) {
unsigned i, j;
bool non_unique = false;
assert(entries || n_entries == 0);
assert(arr || n_entries == 0);
for (i = 0; i < n_entries; i++)
arr[i] = false;
@ -303,6 +319,8 @@ static int boot_entries_uniquify(BootEntry *entries, size_t n_entries) {
int r;
bool arr[n_entries];
assert(entries || n_entries == 0);
/* Find _all_ non-unique titles */
if (!find_nonunique(entries, n_entries, arr))
return 0;
@ -349,6 +367,8 @@ static int boot_entries_uniquify(BootEntry *entries, size_t n_entries) {
static int boot_entries_select_default(const BootConfig *config) {
int i;
assert(config);
if (config->entry_oneshot)
for (i = config->n_entries - 1; i >= 0; i--)
if (streq(config->entry_oneshot, config->entries[i].filename)) {
@ -377,6 +397,7 @@ static int boot_entries_select_default(const BootConfig *config) {
log_debug("Found default: last entry \"%s\"", config->entries[config->n_entries - 1].filename);
else
log_debug("Found no default boot entry :(");
return config->n_entries - 1; /* -1 means "no default" */
}
@ -384,6 +405,9 @@ int boot_entries_load_config(const char *esp_path, BootConfig *config) {
const char *p;
int r;
assert(esp_path);
assert(config);
p = strjoina(esp_path, "/loader/loader.conf");
r = boot_loader_read_conf(p, config);
if (r < 0)