--- trunk/grubby/grubby.c 2017/06/27 14:14:00 3003 +++ trunk/grubby/grubby.c 2017/06/27 14:28:28 3007 @@ -4210,9 +4210,9 @@ const char *newKernelArgs, const char *newKernelInitrd, const char **extraInitrds, int extraInitrdCount, const char *newMBKernel, const char *newMBKernelArgs, - const char *newDevTreePath) + const char *newDevTreePath, int newIndex) { - struct singleEntry *new; + struct singleEntry *new, *entry, *prev = NULL; struct singleLine *newLine = NULL, *tmplLine = NULL, *masterLine = NULL; int needs; char *chptr; @@ -4242,9 +4242,20 @@ new = malloc(sizeof(*new)); new->skip = 0; new->multiboot = 0; - new->next = config->entries; new->lines = NULL; - config->entries = new; + entry = config->entries; + for (unsigned int i = 0; i < newIndex; i++) { + if (!entry) + break; + prev = entry; + entry = entry->next; + } + new->next = entry; + + if (prev) + prev->next = new; + else + config->entries = new; /* copy/update from the template */ needs = NEED_KERNEL | NEED_TITLE; @@ -4737,6 +4748,7 @@ char *newDevTreePath = NULL; char *newMBKernel = NULL; char *newMBKernelArgs = NULL; + int newIndex = 0; char *removeMBKernelArgs = NULL; char *removeMBKernel = NULL; char *bootPrefix = NULL; @@ -4843,6 +4855,9 @@ {"set-default-index", 0, POPT_ARG_INT, &defaultIndex, 0, _("make the given entry index the default entry"), _("entry-index")}, + {"set-index", 0, POPT_ARG_INT, &newIndex, 0, + _("use the given index when creating a new entry"), + _("entry-index")}, {"silo", 0, POPT_ARG_NONE, &configureSilo, 0, _("configure silo bootloader")}, {"title", 0, POPT_ARG_STRING, &newKernelTitle, 0, @@ -5258,7 +5273,8 @@ if (addNewKernel(config, template, bootPrefix, newKernelPath, newKernelTitle, newKernelArgs, newKernelInitrd, (const char **)extraInitrds, extraInitrdCount, - newMBKernel, newMBKernelArgs, newDevTreePath)) + newMBKernel, newMBKernelArgs, newDevTreePath, + newIndex)) return 1; if (numEntries(config) == 0) {