Magellan Linux

Diff of /tags/grubby-8_39/grubby.c

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

revision 2708 by niro, Wed Jul 16 10:56:09 2014 UTC revision 2962 by niro, Wed Jun 29 14:40:57 2016 UTC
# Line 1960  struct singleEntry * findEntryByPath(str Line 1960  struct singleEntry * findEntryByPath(str
1960   }   }
1961    
1962   indexVars[i + 1] = -1;   indexVars[i + 1] = -1;
1963    
1964   i = 0;   i = 0;
1965   if (index) {   if (index) {
1966      while (i < *index) i++;      while (i < *index) {
1967      if (indexVars[i] == -1) return NULL;   i++;
1968     if (indexVars[i] == -1) return NULL;
1969        }
1970   }   }
1971    
1972   entry = findEntryByIndex(config, indexVars[i]);   entry = findEntryByIndex(config, indexVars[i]);
# Line 2118  struct singleEntry * findTemplate(struct Line 2120  struct singleEntry * findTemplate(struct
2120   } else {   } else {
2121      entry = findEntryByTitle(cfg, defTitle, &index);      entry = findEntryByTitle(cfg, defTitle, &index);
2122   }   }
2123   if (entry)   if (entry && suitableImage(entry, prefix, skipRemoved, flags)) {
2124      cfg->defaultImage = index;      cfg->defaultImage = index;
2125        if (indexPtr)
2126     *indexPtr = index;
2127        return entry;
2128     }
2129      }      }
2130   }   }
2131      } else if (cfg->defaultImage > -1) {      } else if (cfg->defaultImage > -1) {
# Line 2364  void displayEntry(struct singleEntry * e Line 2370  void displayEntry(struct singleEntry * e
2370      } else {      } else {
2371   char * title;   char * title;
2372   line = getLineByType(LT_MENUENTRY, entry->lines);   line = getLineByType(LT_MENUENTRY, entry->lines);
2373   title = grub2ExtractTitle(line);   if (!line) {
2374   if (title)      title = grub2ExtractTitle(line);
2375      printf("title=%s\n", title);      if (title)
2376     printf("title=%s\n", title);
2377     }
2378      }      }
2379    
2380      for (j = 0, line = entry->lines; line; line = line->next) {      for (j = 0, line = entry->lines; line; line = line->next) {
# Line 3303  int updateImage(struct grubConfig * cfg, Line 3311  int updateImage(struct grubConfig * cfg,
3311  }  }
3312    
3313  int addMBInitrd(struct grubConfig * cfg, const char *newMBKernel,  int addMBInitrd(struct grubConfig * cfg, const char *newMBKernel,
3314   const char * image, const char * prefix, const char * initrd) {   const char * image, const char * prefix, const char * initrd,
3315     const char * title) {
3316      struct singleEntry * entry;      struct singleEntry * entry;
3317      struct singleLine * line, * kernelLine, *endLine = NULL;      struct singleLine * line, * kernelLine, *endLine = NULL;
3318      int index = 0;      int index = 0;
3319    
3320      if (!image) return 0;      if (!image) return 0;
3321    
3322      for (; (entry = findEntryByPath(cfg, newMBKernel, prefix, &index)); index++) {      for (; (entry = findEntryByPath(cfg, image, prefix, &index)); index++) {
3323          kernelLine = getLineByType(LT_MBMODULE, entry->lines);          kernelLine = getLineByType(LT_MBMODULE, entry->lines);
3324          if (!kernelLine) continue;          if (!kernelLine) continue;
3325    
3326     /* if title is supplied, the entry's title must match it. */
3327     if (title) {
3328        char *linetitle;
3329    
3330        line = getLineByType(LT_TITLE|LT_MENUENTRY, entry->lines);
3331        if (!line)
3332     continue;
3333    
3334        linetitle = extractTitle(line);
3335        if (!linetitle)
3336     continue;
3337        if (strcmp(title, linetitle)) {
3338     free(linetitle);
3339     continue;
3340        }
3341        free(linetitle);
3342     }
3343    
3344          if (prefix) {          if (prefix) {
3345              int prefixLen = strlen(prefix);              int prefixLen = strlen(prefix);
3346              if (!strncmp(initrd, prefix, prefixLen))              if (!strncmp(initrd, prefix, prefixLen))
# Line 3339  int addMBInitrd(struct grubConfig * cfg, Line 3366  int addMBInitrd(struct grubConfig * cfg,
3366  }  }
3367    
3368  int updateInitrd(struct grubConfig * cfg, const char * image,  int updateInitrd(struct grubConfig * cfg, const char * image,
3369                   const char * prefix, const char * initrd) {                   const char * prefix, const char * initrd, const char * title) {
3370      struct singleEntry * entry;      struct singleEntry * entry;
3371      struct singleLine * line, * kernelLine, *endLine = NULL;      struct singleLine * line, * kernelLine, *endLine = NULL;
3372      int index = 0;      int index = 0;
# Line 3350  int updateInitrd(struct grubConfig * cfg Line 3377  int updateInitrd(struct grubConfig * cfg
3377          kernelLine = getLineByType(LT_KERNEL|LT_KERNEL_EFI|LT_KERNEL_16, entry->lines);          kernelLine = getLineByType(LT_KERNEL|LT_KERNEL_EFI|LT_KERNEL_16, entry->lines);
3378          if (!kernelLine) continue;          if (!kernelLine) continue;
3379    
3380     /* if title is supplied, the entry's title must match it. */
3381     if (title) {
3382        char *linetitle;
3383    
3384        line = getLineByType(LT_TITLE|LT_MENUENTRY, entry->lines);
3385        if (!line)
3386     continue;
3387    
3388        linetitle = extractTitle(line);
3389        if (!linetitle)
3390     continue;
3391        if (strcmp(title, linetitle)) {
3392     free(linetitle);
3393     continue;
3394        }
3395        free(linetitle);
3396     }
3397    
3398          line = getLineByType(LT_INITRD|LT_INITRD_EFI|LT_INITRD_16, entry->lines);          line = getLineByType(LT_INITRD|LT_INITRD_EFI|LT_INITRD_16, entry->lines);
3399          if (line)          if (line)
3400              removeLine(entry, line);              removeLine(entry, line);
# Line 4053  int addNewKernel(struct grubConfig * con Line 4098  int addNewKernel(struct grubConfig * con
4098   }   }
4099      }      }
4100    
4101        struct singleLine *endLine = NULL;
4102        endLine = getLineByType(LT_ENTRY_END, new->lines);
4103        if (endLine) {
4104        removeLine(new, endLine);
4105        needs |= NEED_END;
4106        }
4107    
4108      /* add the remainder of the lines, i.e. those that either      /* add the remainder of the lines, i.e. those that either
4109       * weren't present in the template, or in the case of no template,       * weren't present in the template, or in the case of no template,
4110       * all the lines following the entryStart.       * all the lines following the entryStart.
# Line 4111  int addNewKernel(struct grubConfig * con Line 4163  int addNewKernel(struct grubConfig * con
4163   config->secondaryIndent, NULL);   config->secondaryIndent, NULL);
4164   needs &= ~NEED_END;   needs &= ~NEED_END;
4165      }      }
4166    
4167      if (needs) {      if (needs) {
4168   printf(_("grubby: needs=%d, aborting\n"), needs);   printf(_("grubby: needs=%d, aborting\n"), needs);
4169   abort();   abort();
# Line 4400  int main(int argc, const char ** argv) { Line 4453  int main(int argc, const char ** argv) {
4453      if (newKernelPath && !newKernelTitle) {      if (newKernelPath && !newKernelTitle) {
4454   fprintf(stderr, _("grubby: kernel title must be specified\n"));   fprintf(stderr, _("grubby: kernel title must be specified\n"));
4455   return 1;   return 1;
4456      } else if (!newKernelPath && (newKernelTitle  || copyDefault ||      } else if (!newKernelPath && (copyDefault ||
4457    (newKernelInitrd && !updateKernelPath)||    (newKernelInitrd && !updateKernelPath)||
4458    makeDefault || extraInitrdCount > 0)) {    makeDefault || extraInitrdCount > 0)) {
4459   fprintf(stderr, _("grubby: kernel path expected\n"));   fprintf(stderr, _("grubby: kernel path expected\n"));
# Line 4622  int main(int argc, const char ** argv) { Line 4675  int main(int argc, const char ** argv) {
4675      if (updateKernelPath && newKernelInitrd) {      if (updateKernelPath && newKernelInitrd) {
4676      if (newMBKernel) {      if (newMBKernel) {
4677      if (addMBInitrd(config, newMBKernel, updateKernelPath,      if (addMBInitrd(config, newMBKernel, updateKernelPath,
4678   bootPrefix, newKernelInitrd))   bootPrefix, newKernelInitrd,
4679     newKernelTitle))
4680      return 1;      return 1;
4681      } else {      } else {
4682      if (updateInitrd(config, updateKernelPath, bootPrefix,      if (updateInitrd(config, updateKernelPath, bootPrefix,
4683   newKernelInitrd))   newKernelInitrd, newKernelTitle))
4684   return 1;   return 1;
4685      }      }
4686      }      }

Legend:
Removed from v.2708  
changed lines
  Added in v.2962