--- trunk/grubby/grubby.c 2016/06/30 10:24:27 2977 +++ trunk/grubby/grubby.c 2016/06/30 10:26:25 2980 @@ -222,6 +222,7 @@ .mbHyperFirst = 1, .mbInitRdIsModule = 1, .mbAllowExtraInitRds = 1, + .titlePosition = 1, }; struct keywordTypes grub2Keywords[] = { @@ -594,6 +595,7 @@ .needsBootPrefix = 1, .argsInQuotes = 1, .mbConcatArgs = 1, + .titlePosition = 1, }; struct configFileInfo liloConfigType = { @@ -602,6 +604,7 @@ .entryStart = LT_KERNEL, .argsInQuotes = 1, .maxTitleLength = 15, + .titlePosition = 1, }; struct configFileInfo yabootConfigType = { @@ -612,6 +615,7 @@ .argsInQuotes = 1, .maxTitleLength = 15, .mbAllowExtraInitRds = 1, + .titlePosition = 1, }; struct configFileInfo siloConfigType = { @@ -621,6 +625,7 @@ .needsBootPrefix = 1, .argsInQuotes = 1, .maxTitleLength = 15, + .titlePosition = 1, }; struct configFileInfo ziplConfigType = { @@ -640,6 +645,7 @@ .maxTitleLength = 255, .mbAllowExtraInitRds = 1, .defaultIsUnquoted = 1, + .titlePosition = 1, }; struct grubConfig { @@ -828,12 +834,20 @@ } /* extract the title from within brackets (for zipl) */ -static char * extractTitle(struct singleLine * line) { +static char * extractTitle(struct grubConfig *cfg, struct singleLine * line) { /* bracketed title... let's extract it */ char * title = NULL; + if (cfg->cfi == &grub2ConfigType) + return grub2ExtractTitle(line); if (line->type == LT_TITLE) { - title = strdup(line->elements[0].item + 1); - *(title + strlen(title) - 1) = '\0'; + char *tmp = line->elements[cfg->cfi->titlePosition].item; + if (cfg->cfi->titleBracketed) { + tmp++; + title = strdup(tmp); + *(title + strlen(title) - 1) = '\0'; + } else { + title = strdup(tmp); + } } else if (line->type == LT_MENUENTRY) title = strdup(line->elements[1].item); else @@ -1441,7 +1455,7 @@ line->elements[1].item)) break; } else if (line) { if (!strcmp(defaultLine->elements[1].item, - extractTitle(line))) break; + extractTitle(cfg, line))) break; } i++; entry = NULL; @@ -1492,7 +1506,7 @@ if (!line) line = getLineByType(LT_TITLE, entry->lines); if (line) { - title = extractTitle(line); + title = extractTitle(cfg, line); if (title) cfg->cfi->setEnv(cfg->cfi, "saved_entry", title); } @@ -1530,7 +1544,7 @@ else if (line && (line->numElements == 1) && cfg->cfi->titleBracketed) { fprintf(out, "%sdefault%s%s\n", indent, separator, - extractTitle(line)); + extractTitle(cfg, line)); } } } @@ -3332,7 +3346,7 @@ if (!line) continue; - linetitle = extractTitle(line); + linetitle = extractTitle(cfg, line); if (!linetitle) continue; if (strcmp(title, linetitle)) { @@ -3386,7 +3400,7 @@ if (!line) continue; - linetitle = extractTitle(line); + linetitle = extractTitle(cfg, line); if (!linetitle) continue; if (strcmp(title, linetitle)) {