--- trunk/grubby/grubby.c 2013/10/21 14:01:48 2257 +++ trunk/grubby/grubby.c 2013/10/21 14:02:25 2258 @@ -1066,6 +1066,15 @@ return 0; } +static int isnumber(const char *s) +{ + int i; + for (i = 0; s[i] != '\0'; i++) + if (s[i] < '0' || s[i] > '9') + return 0; + return i; +} + static struct grubConfig * readConfig(const char * inName, struct configFileInfo * cfi) { int in; @@ -1362,7 +1371,12 @@ char *defTitle = cfi->getEnv(cfg->cfi, "saved_entry"); if (defTitle) { int index = 0; - entry = findEntryByTitle(cfg, defTitle, &index); + if (isnumber(defTitle)) { + index = atoi(defTitle); + entry = findEntryByIndex(cfg, index); + } else { + entry = findEntryByTitle(cfg, defTitle, &index); + } if (entry) cfg->defaultImage = index; } @@ -1411,7 +1425,12 @@ char *defTitle = cfi->getEnv(cfg->cfi, "saved_entry"); if (defTitle) { int index = 0; - entry = findEntryByTitle(cfg, defTitle, &index); + if (isnumber(defTitle)) { + index = atoi(defTitle); + entry = findEntryByIndex(cfg, index); + } else { + entry = findEntryByTitle(cfg, defTitle, &index); + } if (entry) cfg->defaultImage = index; } @@ -2062,7 +2081,14 @@ char *defTitle = cfg->cfi->getEnv(cfg->cfi, "saved_entry"); if (defTitle) { int index = 0; - entry = findEntryByTitle(cfg, defTitle, &index); + if (isnumber(defTitle)) { + index = atoi(defTitle); + entry = findEntryByIndex(cfg, index); + } else { + entry = findEntryByTitle(cfg, defTitle, &index); + } + if (entry) + cfg->defaultImage = index; } } } else if (cfg->defaultImage > -1) {