Magellan Linux

Diff of /trunk/grubby/grubby.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3003 by niro, Tue Jun 27 14:14:00 2017 UTC revision 3017 by niro, Tue Jun 27 14:36:53 2017 UTC
# Line 2494  void markRemovedImage(struct grubConfig Line 2494  void markRemovedImage(struct grubConfig
2494   entry->skip = 1;   entry->skip = 1;
2495  }  }
2496    
2497  void setDefaultImage(struct grubConfig *config, int hasNew,  void setDefaultImage(struct grubConfig *config, int isUserSpecifiedKernelPath,
2498       const char *defaultKernelPath, int newIsDefault,       const char *defaultKernelPath, int newBootEntryIsDefault,
2499       const char *prefix, int flags, int index)       const char *prefix, int flags, int newDefaultBootEntryIndex)
2500  {  {
2501   struct singleEntry *entry, *entry2, *newDefault;   struct singleEntry *entry, *entry2, *newDefault;
2502   int i, j;   int i, j;
2503    
2504   if (newIsDefault) {   if (newBootEntryIsDefault) {
2505   config->defaultImage = 0;   config->defaultImage = 0;
2506   return;   return;
2507   } else if ((index >= 0) && config->cfi->defaultIsIndex) {   } else if ((newDefaultBootEntryIndex >= 0) && config->cfi->defaultIsIndex) {
2508   if (findEntryByIndex(config, index))   if (findEntryByIndex(config, newDefaultBootEntryIndex))
2509   config->defaultImage = index;   config->defaultImage = newDefaultBootEntryIndex;
2510   else   else
2511   config->defaultImage = -1;   config->defaultImage = -1;
2512   return;   return;
# Line 2534  void setDefaultImage(struct grubConfig * Line 2534  void setDefaultImage(struct grubConfig *
2534    
2535   if (entry && !entry->skip) {   if (entry && !entry->skip) {
2536   /* we can preserve the default */   /* we can preserve the default */
2537   if (hasNew)   if (isUserSpecifiedKernelPath)
2538   config->defaultImage++;   config->defaultImage++;
2539    
2540   /* count the number of entries erased before this one */   /* count the number of entries erased before this one */
# Line 2543  void setDefaultImage(struct grubConfig * Line 2543  void setDefaultImage(struct grubConfig *
2543   if (entry2->skip)   if (entry2->skip)
2544   config->defaultImage--;   config->defaultImage--;
2545   }   }
2546   } else if (hasNew) {   } else if (isUserSpecifiedKernelPath) {
2547   config->defaultImage = 0;   config->defaultImage = 0;
2548   } else {   } else {
2549   /* Either we just erased the default (or the default line was   /* Either we just erased the default (or the default line was
# Line 4210  int addNewKernel(struct grubConfig *conf Line 4210  int addNewKernel(struct grubConfig *conf
4210   const char *newKernelArgs, const char *newKernelInitrd,   const char *newKernelArgs, const char *newKernelInitrd,
4211   const char **extraInitrds, int extraInitrdCount,   const char **extraInitrds, int extraInitrdCount,
4212   const char *newMBKernel, const char *newMBKernelArgs,   const char *newMBKernel, const char *newMBKernelArgs,
4213   const char *newDevTreePath)   const char *newDevTreePath, int newIndex)
4214  {  {
4215   struct singleEntry *new;   struct singleEntry *new, *entry, *prev = NULL;
4216   struct singleLine *newLine = NULL, *tmplLine = NULL, *masterLine = NULL;   struct singleLine *newLine = NULL, *tmplLine = NULL, *masterLine = NULL;
4217   int needs;   int needs;
4218     char *indexs;
4219   char *chptr;   char *chptr;
4220     int rc;
4221    
4222   if (!newKernelPath)   if (!newKernelPath)
4223   return 0;   return 0;
4224    
4225     rc = asprintf(&indexs, "%d", newIndex);
4226     if (rc < 0)
4227     return 1;
4228    
4229   /* if the newKernelTitle is too long silently munge it into something   /* if the newKernelTitle is too long silently munge it into something
4230   * we can live with. truncating is first check, then we'll just mess with   * we can live with. truncating is first check, then we'll just mess with
4231   * it until it looks better */   * it until it looks better */
# Line 4242  int addNewKernel(struct grubConfig *conf Line 4248  int addNewKernel(struct grubConfig *conf
4248   new = malloc(sizeof(*new));   new = malloc(sizeof(*new));
4249   new->skip = 0;   new->skip = 0;
4250   new->multiboot = 0;   new->multiboot = 0;
  new->next = config->entries;  
4251   new->lines = NULL;   new->lines = NULL;
4252   config->entries = new;   entry = config->entries;
4253     for (unsigned int i = 0; i < newIndex; i++) {
4254     if (!entry)
4255     break;
4256     prev = entry;
4257     entry = entry->next;
4258     }
4259     new->next = entry;
4260    
4261     if (prev)
4262     prev->next = new;
4263     else
4264     config->entries = new;
4265    
4266   /* copy/update from the template */   /* copy/update from the template */
4267   needs = NEED_KERNEL | NEED_TITLE;   needs = NEED_KERNEL | NEED_TITLE;
# Line 4707  int addNewKernel(struct grubConfig *conf Line 4724  int addNewKernel(struct grubConfig *conf
4724   abort();   abort();
4725   }   }
4726    
4727   if (updateImage(config, "0", prefix, newKernelArgs, NULL,   if (updateImage(config, indexs, prefix, newKernelArgs, NULL,
4728   newMBKernelArgs, NULL))   newMBKernelArgs, NULL))
4729   return 1;   return 1;
4730    
# Line 4737  int main(int argc, const char **argv) Line 4754  int main(int argc, const char **argv)
4754   char *newDevTreePath = NULL;   char *newDevTreePath = NULL;
4755   char *newMBKernel = NULL;   char *newMBKernel = NULL;
4756   char *newMBKernelArgs = NULL;   char *newMBKernelArgs = NULL;
4757     int newIndex = 0;
4758   char *removeMBKernelArgs = NULL;   char *removeMBKernelArgs = NULL;
4759   char *removeMBKernel = NULL;   char *removeMBKernel = NULL;
4760   char *bootPrefix = NULL;   char *bootPrefix = NULL;
# Line 4771  int main(int argc, const char **argv) Line 4789  int main(int argc, const char **argv)
4789   NULL},   NULL},
4790   {"boot-filesystem", 0, POPT_ARG_STRING, &bootPrefix, 0,   {"boot-filesystem", 0, POPT_ARG_STRING, &bootPrefix, 0,
4791   _   _
4792   ("filestystem which contains /boot directory (for testing only)"),   ("filesystem which contains /boot directory (for testing only)"),
4793   _("bootfs")},   _("bootfs")},
4794  #if defined(__i386__) || defined(__x86_64__) || defined (__powerpc64__) || defined (__ia64__)  #if defined(__i386__) || defined(__x86_64__) || defined (__powerpc64__) || defined (__ia64__)
4795   {"bootloader-probe", 0, POPT_ARG_NONE, &bootloaderProbe, 0,   {"bootloader-probe", 0, POPT_ARG_NONE, &bootloaderProbe, 0,
# Line 4843  int main(int argc, const char **argv) Line 4861  int main(int argc, const char **argv)
4861   {"set-default-index", 0, POPT_ARG_INT, &defaultIndex, 0,   {"set-default-index", 0, POPT_ARG_INT, &defaultIndex, 0,
4862   _("make the given entry index the default entry"),   _("make the given entry index the default entry"),
4863   _("entry-index")},   _("entry-index")},
4864     {"set-index", 0, POPT_ARG_INT, &newIndex, 0,
4865     _("use the given index when creating a new entry"),
4866     _("entry-index")},
4867   {"silo", 0, POPT_ARG_NONE, &configureSilo, 0,   {"silo", 0, POPT_ARG_NONE, &configureSilo, 0,
4868   _("configure silo bootloader")},   _("configure silo bootloader")},
4869   {"title", 0, POPT_ARG_STRING, &newKernelTitle, 0,   {"title", 0, POPT_ARG_STRING, &newKernelTitle, 0,
# Line 5258  int main(int argc, const char **argv) Line 5279  int main(int argc, const char **argv)
5279   if (addNewKernel(config, template, bootPrefix, newKernelPath,   if (addNewKernel(config, template, bootPrefix, newKernelPath,
5280   newKernelTitle, newKernelArgs, newKernelInitrd,   newKernelTitle, newKernelArgs, newKernelInitrd,
5281   (const char **)extraInitrds, extraInitrdCount,   (const char **)extraInitrds, extraInitrdCount,
5282   newMBKernel, newMBKernelArgs, newDevTreePath))   newMBKernel, newMBKernelArgs, newDevTreePath,
5283     newIndex))
5284   return 1;   return 1;
5285    
5286   if (numEntries(config) == 0) {   if (numEntries(config) == 0) {

Legend:
Removed from v.3003  
changed lines
  Added in v.3017