+#define _GNU_SOURCE
#include <string.h>
#include <talloc/talloc.h>
static void pxe_finish(struct conf_context *conf)
{
- printf("%s\n", __func__);
discover_context_add_boot_option(conf->dc, conf->parser_info);
}
struct discover_boot_option *opt = ctx->parser_info;
struct pb_url *url;
+ /* quirk in the syslinux config format: initrd can be separated
+ * by an '=' */
+ if (!name && !strncasecmp(value, "initrd=", strlen("initrd="))) {
+ name = "initrd";
+ value += strlen("initrd=");
+ }
+
+ if (!name)
+ return;
+
if (streq(name, "LABEL")) {
if (opt)
pxe_finish(ctx);
url = pb_url_join(ctx->dc, ctx->dc->conf_url, value);
opt->boot_image = create_url_resource(opt, url);
+ } else if (streq(name, "INITRD")) {
+ url = pb_url_join(ctx->dc, ctx->dc->conf_url, value);
+ opt->initrd = create_url_resource(opt, url);
+
} else if (streq(name, "APPEND")) {
+ char *str, *end;
+
opt->option->boot_args = talloc_strdup(opt->option, value);
- /* todo: initrd extraction */
+
+ str = strcasestr(value, "INITRD=");
+ if (str) {
+ str += strlen("INITRD=");
+ end = strchrnul(str, ' ');
+ *end = '\0';
+
+ url = pb_url_join(ctx->dc, ctx->dc->conf_url, str);
+ opt->initrd = create_url_resource(opt, url);
+ }
}
+
}
static int pxe_parse(struct discover_context *dc, char *buf, int len)