Magellan Linux

Diff of /trunk/grubby/grubby.c

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

revision 2694 by niro, Wed Jul 16 10:48:13 2014 UTC revision 2960 by niro, Wed Jun 29 14:07:59 2016 UTC
# Line 60  int debug = 0; /* Currently just for tem Line 60  int debug = 0; /* Currently just for tem
60    
61  int isEfi = 0;  int isEfi = 0;
62    
63  #if defined(__arch64__)  #if defined(__aarch64__)
64  #define isEfiOnly 1  #define isEfiOnly 1
65  #else  #else
66  #define isEfiOnly 0  #define isEfiOnly 0
# 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 2276  void displayEntry(struct singleEntry * e Line 2282  void displayEntry(struct singleEntry * e
2282      struct singleLine * line;      struct singleLine * line;
2283      char * root = NULL;      char * root = NULL;
2284      int i;      int i;
2285        int j;
2286    
2287      printf("index=%d\n", index);      printf("index=%d\n", index);
2288    
# Line 2367  void displayEntry(struct singleEntry * e Line 2374  void displayEntry(struct singleEntry * e
2374   if (title)   if (title)
2375      printf("title=%s\n", title);      printf("title=%s\n", title);
2376      }      }
2377    
2378        for (j = 0, line = entry->lines; line; line = line->next) {
2379     if ((line->type & LT_MBMODULE) && line->numElements >= 2) {
2380        if (!strncmp(prefix, line->elements[1].item, strlen(prefix)))
2381     printf("mbmodule%d=", j);
2382        else
2383     printf("mbmodule%d=%s", j, prefix);
2384    
2385        for (i = 1; i < line->numElements; i++)
2386     printf("%s%s", line->elements[i].item, line->elements[i].indent);
2387        printf("\n");
2388        j++;
2389     }
2390        }
2391  }  }
2392    
2393  int isSuseSystem(void) {  int isSuseSystem(void) {
# Line 3288  int updateImage(struct grubConfig * cfg, Line 3309  int updateImage(struct grubConfig * cfg,
3309  }  }
3310    
3311  int addMBInitrd(struct grubConfig * cfg, const char *newMBKernel,  int addMBInitrd(struct grubConfig * cfg, const char *newMBKernel,
3312   const char * image, const char * prefix, const char * initrd) {   const char * image, const char * prefix, const char * initrd,
3313     const char * title) {
3314      struct singleEntry * entry;      struct singleEntry * entry;
3315      struct singleLine * line, * kernelLine, *endLine = NULL;      struct singleLine * line, * kernelLine, *endLine = NULL;
3316      int index = 0;      int index = 0;
3317    
3318      if (!image) return 0;      if (!image) return 0;
3319    
3320      for (; (entry = findEntryByPath(cfg, newMBKernel, prefix, &index)); index++) {      for (; (entry = findEntryByPath(cfg, image, prefix, &index)); index++) {
3321          kernelLine = getLineByType(LT_MBMODULE, entry->lines);          kernelLine = getLineByType(LT_MBMODULE, entry->lines);
3322          if (!kernelLine) continue;          if (!kernelLine) continue;
3323    
3324     /* if title is supplied, the entry's title must match it. */
3325     if (title) {
3326        line = getLineByType(LT_TITLE|LT_MENUENTRY, entry->lines);
3327        char *linetitle = extractTitle(line);
3328    
3329        if (!linetitle)
3330     continue;
3331        if (strcmp(title, linetitle)) {
3332     free(linetitle);
3333     continue;
3334        }
3335        free(linetitle);
3336     }
3337    
3338          if (prefix) {          if (prefix) {
3339              int prefixLen = strlen(prefix);              int prefixLen = strlen(prefix);
3340              if (!strncmp(initrd, prefix, prefixLen))              if (!strncmp(initrd, prefix, prefixLen))
# Line 3324  int addMBInitrd(struct grubConfig * cfg, Line 3360  int addMBInitrd(struct grubConfig * cfg,
3360  }  }
3361    
3362  int updateInitrd(struct grubConfig * cfg, const char * image,  int updateInitrd(struct grubConfig * cfg, const char * image,
3363                   const char * prefix, const char * initrd) {                   const char * prefix, const char * initrd, const char * title) {
3364      struct singleEntry * entry;      struct singleEntry * entry;
3365      struct singleLine * line, * kernelLine, *endLine = NULL;      struct singleLine * line, * kernelLine, *endLine = NULL;
3366      int index = 0;      int index = 0;
# Line 3335  int updateInitrd(struct grubConfig * cfg Line 3371  int updateInitrd(struct grubConfig * cfg
3371          kernelLine = getLineByType(LT_KERNEL|LT_KERNEL_EFI|LT_KERNEL_16, entry->lines);          kernelLine = getLineByType(LT_KERNEL|LT_KERNEL_EFI|LT_KERNEL_16, entry->lines);
3372          if (!kernelLine) continue;          if (!kernelLine) continue;
3373    
3374     /* if title is supplied, the entry's title must match it. */
3375     if (title) {
3376        line = getLineByType(LT_TITLE|LT_MENUENTRY, entry->lines);
3377        char *linetitle = extractTitle(line);
3378    
3379        if (!linetitle)
3380     continue;
3381        if (strcmp(title, linetitle)) {
3382     free(linetitle);
3383     continue;
3384        }
3385        free(linetitle);
3386     }
3387    
3388          line = getLineByType(LT_INITRD|LT_INITRD_EFI|LT_INITRD_16, entry->lines);          line = getLineByType(LT_INITRD|LT_INITRD_EFI|LT_INITRD_16, entry->lines);
3389          if (line)          if (line)
3390              removeLine(entry, line);              removeLine(entry, line);
# Line 4038  int addNewKernel(struct grubConfig * con Line 4088  int addNewKernel(struct grubConfig * con
4088   }   }
4089      }      }
4090    
4091        struct singleLine *endLine = NULL;
4092        endLine = getLineByType(LT_ENTRY_END, new->lines);
4093        if (endLine) {
4094        removeLine(new, endLine);
4095        needs |= NEED_END;
4096        }
4097    
4098      /* add the remainder of the lines, i.e. those that either      /* add the remainder of the lines, i.e. those that either
4099       * 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,
4100       * all the lines following the entryStart.       * all the lines following the entryStart.
# Line 4096  int addNewKernel(struct grubConfig * con Line 4153  int addNewKernel(struct grubConfig * con
4153   config->secondaryIndent, NULL);   config->secondaryIndent, NULL);
4154   needs &= ~NEED_END;   needs &= ~NEED_END;
4155      }      }
4156    
4157      if (needs) {      if (needs) {
4158   printf(_("grubby: needs=%d, aborting\n"), needs);   printf(_("grubby: needs=%d, aborting\n"), needs);
4159   abort();   abort();
# Line 4385  int main(int argc, const char ** argv) { Line 4443  int main(int argc, const char ** argv) {
4443      if (newKernelPath && !newKernelTitle) {      if (newKernelPath && !newKernelTitle) {
4444   fprintf(stderr, _("grubby: kernel title must be specified\n"));   fprintf(stderr, _("grubby: kernel title must be specified\n"));
4445   return 1;   return 1;
4446      } else if (!newKernelPath && (newKernelTitle  || copyDefault ||      } else if (!newKernelPath && (copyDefault ||
4447    (newKernelInitrd && !updateKernelPath)||    (newKernelInitrd && !updateKernelPath)||
4448    makeDefault || extraInitrdCount > 0)) {    makeDefault || extraInitrdCount > 0)) {
4449   fprintf(stderr, _("grubby: kernel path expected\n"));   fprintf(stderr, _("grubby: kernel path expected\n"));
# Line 4607  int main(int argc, const char ** argv) { Line 4665  int main(int argc, const char ** argv) {
4665      if (updateKernelPath && newKernelInitrd) {      if (updateKernelPath && newKernelInitrd) {
4666      if (newMBKernel) {      if (newMBKernel) {
4667      if (addMBInitrd(config, newMBKernel, updateKernelPath,      if (addMBInitrd(config, newMBKernel, updateKernelPath,
4668   bootPrefix, newKernelInitrd))   bootPrefix, newKernelInitrd,
4669     newKernelTitle))
4670      return 1;      return 1;
4671      } else {      } else {
4672      if (updateInitrd(config, updateKernelPath, bootPrefix,      if (updateInitrd(config, updateKernelPath, bootPrefix,
4673   newKernelInitrd))   newKernelInitrd, newKernelTitle))
4674   return 1;   return 1;
4675      }      }
4676      }      }

Legend:
Removed from v.2694  
changed lines
  Added in v.2960