--- trunk/grubby/grubby.c 2014/07/16 10:41:38 2687 +++ trunk/grubby/grubby.c 2014/07/16 10:45:12 2692 @@ -60,6 +60,12 @@ int isEfi = 0; +#if defined(__arch64__) +#define isEfiOnly 1 +#else +#define isEfiOnly 0 +#endif + char *saved_command_line = NULL; /* comments get lumped in with indention */ @@ -155,6 +161,7 @@ int defaultIsVariable; int defaultSupportSaved; int defaultIsSaved; + int defaultIsUnquoted; enum lineType_e entryStart; enum lineType_e entryEnd; int needsBootPrefix; @@ -630,6 +637,7 @@ .needsBootPrefix = 1, .maxTitleLength = 255, .mbAllowExtraInitRds = 1, + .defaultIsUnquoted = 1, }; struct grubConfig { @@ -720,17 +728,10 @@ struct configFileInfo *cfi) { if (isEfi && cfi == &grub2ConfigType) { switch (type) { -#if defined(__aarch64__) case LT_KERNEL: - return LT_KERNEL; + return isEfiOnly ? LT_KERNEL : LT_KERNEL_EFI; case LT_INITRD: - return LT_INITRD; -#else - case LT_KERNEL: - return LT_KERNEL_EFI; - case LT_INITRD: - return LT_INITRD_EFI; -#endif + return isEfiOnly ? LT_INITRD : LT_INITRD_EFI; default: return type; } @@ -1192,9 +1193,6 @@ cfg->flags &= ~GRUB_CONFIG_NO_DEFAULT; defaultLine = line; } - } else if (line->type == LT_DEFAULT && line->numElements == 2) { - cfg->flags &= ~GRUB_CONFIG_NO_DEFAULT; - defaultLine = line; } else if (iskernel(line->type)) { /* if by some freak chance this is multiboot and the "module" @@ -1227,8 +1225,9 @@ cfg->fallbackImage = strtol(line->elements[1].item, &end, 10); if (*end) cfg->fallbackImage = -1; - } else if (line->type == LT_TITLE && line->numElements > 1) { - /* make the title a single argument (undoing our parsing) */ + } else if ((line->type == LT_DEFAULT && cfi->defaultIsUnquoted) || + (line->type == LT_TITLE && line->numElements > 1)) { + /* make the title/default a single argument (undoing our parsing) */ len = 0; for (int i = 1; i < line->numElements; i++) { len += strlen(line->elements[i].item); @@ -1335,6 +1334,11 @@ } } + if (line->type == LT_DEFAULT && line->numElements == 2) { + cfg->flags &= ~GRUB_CONFIG_NO_DEFAULT; + defaultLine = line; + } + /* If we find a generic config option which should live at the top of the file, move it there. Old versions of grubby were probably responsible for putting new images in the wrong