summaryrefslogtreecommitdiff
path: root/usr/src/cmd/boot/bootadm/bootadm_loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/boot/bootadm/bootadm_loader.c')
-rw-r--r--usr/src/cmd/boot/bootadm/bootadm_loader.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/usr/src/cmd/boot/bootadm/bootadm_loader.c b/usr/src/cmd/boot/bootadm/bootadm_loader.c
index e2d99b24b0..a9dde19132 100644
--- a/usr/src/cmd/boot/bootadm/bootadm_loader.c
+++ b/usr/src/cmd/boot/bootadm/bootadm_loader.c
@@ -325,29 +325,34 @@ menu_read(struct menu_lst *menu, char *menu_path)
ret = BAM_ERROR;
goto done;
}
+ if (buf[0] == '\n') /* Skip empty lines */
+ continue;
+
key = strtok(buf, " \n");
- if (strcmp(key, "title") != 0) {
+ if (key == NULL || strcmp(key, "title") != 0) {
ret = BAM_ERROR;
goto done;
}
value = strtok(NULL, " \n");
- if ((title = strdup(value)) == NULL) {
+ if (value == NULL || (title = strdup(value)) == NULL) {
ret = BAM_ERROR;
goto done;
}
- if (fgets(buf, PATH_MAX, fp) == NULL) {
- ret = BAM_ERROR;
- goto done;
- }
+ do {
+ if (fgets(buf, PATH_MAX, fp) == NULL) {
+ ret = BAM_ERROR;
+ goto done;
+ }
+ } while (buf[0] == '\n'); /* Skip empty lines */
key = strtok(buf, " \n");
- if ((type = strdup(key)) == NULL) {
+ if (key == NULL || (type = strdup(key)) == NULL) {
ret = BAM_ERROR;
goto done;
}
value = strtok(NULL, " \n");
- if ((bootfs = strdup(value)) == NULL) {
+ if (value == NULL || (bootfs = strdup(value)) == NULL) {
ret = BAM_ERROR;
goto done;
}
@@ -761,6 +766,11 @@ bam_mount_be(menu_entry_t *entry, char **dir)
if (strcmp(be_node->be_root_ds, entry->me_bootfs) == 0)
break;
+ if (be_node == NULL) {
+ ret = BE_ERR_BE_NOENT;
+ goto out;
+ }
+
if (nvlist_add_string(be_attrs, BE_ATTR_ORIG_BE_NAME,
be_node->be_node_name) != 0) {
ret = BE_ERR_NOMEM;
@@ -838,7 +848,8 @@ list_menu_entry(menu_entry_t *entry, char *setting)
(void) rmdir(dir);
free(dir);
}
- bam_error(_("%s is not mounted\n"), entry->me_title);
+ bam_error(_("%s is not mounted: %s\n"), entry->me_title,
+ be_err_to_str(mounted));
return (BAM_ERROR);
}