#include <assert.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include "log/log.h"
#include "talloc/talloc.h"
const char *path)
{
struct discover_boot_option *opt = state->opt;
- const char *dev, *part;
+ const char *dev, *part, *devpos;
struct resource *res;
- char *devpath;
+ char *devpath, *devstr;
dev = state->device;
part = state->partition;
devpath = talloc_strdup(conf, path);
} else if (dev && part) {
- devpath = talloc_asprintf(conf,
- "%s%s:%s", dev, part, path);
+ devpos = &dev[strlen(dev) - 1];
+ if (isdigit(*devpos)) {
+ while (isdigit(*devpos))
+ devpos--;
+
+ devstr = talloc_strndup(conf, dev, devpos - dev + 1);
+ devpath = talloc_asprintf(conf, "%s%s:%s", devstr,
+ part, path);
+ talloc_free(devstr);
+ } else {
+ devpath = talloc_asprintf(conf,
+ "%s%s:%s", dev, part, path);
+ }
} else if (dev) {
devpath = talloc_asprintf(conf, "%s:%s", dev, path);
} else {
static void yaboot_finish(struct conf_context *conf)
{
struct yaboot_state *state = conf->parser_info;
+ const char *default_label;
struct boot_option *opt;
assert(state->opt);
conf_strip_str(opt->boot_args);
conf_strip_str(opt->description);
+ default_label = conf_get_global_option(conf, "default");
+ if (default_label &&
+ !strcasecmp(state->opt->option->name, default_label))
+ state->opt->option->is_default = true;
+
discover_context_add_boot_option(conf->dc, state->opt);
}
{ .name = "video" },
{ .name = "literal" },
{ .name = "ramdisk" },
+ { .name = "default" },
{ .name = NULL },
};