1323 |
|
|
1324 |
/* most likely the symlink is relative, so change our |
/* most likely the symlink is relative, so change our |
1325 |
directory to the dir of the symlink */ |
directory to the dir of the symlink */ |
1326 |
rc = chdir(dirname(strdupa(outName))); |
rc = chdir(dirname(outName)); |
1327 |
do { |
do { |
1328 |
buf = alloca(len + 1); |
buf = alloca(len + 1); |
1329 |
rc = readlink(basename(outName), buf, len); |
rc = readlink(basename(outName), buf, len); |
1461 |
buf[rc] = '\0'; |
buf[rc] = '\0'; |
1462 |
chptr = buf; |
chptr = buf; |
1463 |
|
|
1464 |
|
char *foundanswer = NULL; |
1465 |
|
|
1466 |
while (chptr && chptr != buf+rc) { |
while (chptr && chptr != buf+rc) { |
1467 |
devname = chptr; |
devname = chptr; |
1468 |
|
|
1490 |
* for '/' obviously. |
* for '/' obviously. |
1491 |
*/ |
*/ |
1492 |
if (*(++chptr) == '/' && *(++chptr) == ' ') { |
if (*(++chptr) == '/' && *(++chptr) == ' ') { |
1493 |
/* |
/* remember the last / entry in mtab */ |
1494 |
* Move back 2, which is the first space after the device name, set |
foundanswer = devname; |
|
* it to \0 so strdup will just get the devicename. |
|
|
*/ |
|
|
chptr -= 2; |
|
|
*chptr = '\0'; |
|
|
return strdup(devname); |
|
1495 |
} |
} |
1496 |
|
|
1497 |
/* Next line */ |
/* Next line */ |
1500 |
chptr++; |
chptr++; |
1501 |
} |
} |
1502 |
|
|
1503 |
|
/* Return the last / entry found */ |
1504 |
|
if (foundanswer) { |
1505 |
|
chptr = strchr(foundanswer, ' '); |
1506 |
|
*chptr = '\0'; |
1507 |
|
return strdup(foundanswer); |
1508 |
|
} |
1509 |
|
|
1510 |
return NULL; |
return NULL; |
1511 |
} |
} |
1512 |
|
|
2979 |
static char * getInitrdVal(struct grubConfig * config, |
static char * getInitrdVal(struct grubConfig * config, |
2980 |
const char * prefix, struct singleLine *tmplLine, |
const char * prefix, struct singleLine *tmplLine, |
2981 |
const char * newKernelInitrd, |
const char * newKernelInitrd, |
2982 |
char ** extraInitrds, int extraInitrdCount) |
const char ** extraInitrds, int extraInitrdCount) |
2983 |
{ |
{ |
2984 |
char *initrdVal, *end; |
char *initrdVal, *end; |
2985 |
int i; |
int i; |
3024 |
|
|
3025 |
int addNewKernel(struct grubConfig * config, struct singleEntry * template, |
int addNewKernel(struct grubConfig * config, struct singleEntry * template, |
3026 |
const char * prefix, |
const char * prefix, |
3027 |
char * newKernelPath, char * newKernelTitle, |
const char * newKernelPath, const char * newKernelTitle, |
3028 |
char * newKernelArgs, char * newKernelInitrd, |
const char * newKernelArgs, const char * newKernelInitrd, |
3029 |
char ** extraInitrds, int extraInitrdCount, |
const char ** extraInitrds, int extraInitrdCount, |
3030 |
char * newMBKernel, char * newMBKernelArgs) { |
const char * newMBKernel, const char * newMBKernelArgs) { |
3031 |
struct singleEntry * new; |
struct singleEntry * new; |
3032 |
struct singleLine * newLine = NULL, * tmplLine = NULL, * masterLine = NULL; |
struct singleLine * newLine = NULL, * tmplLine = NULL, * masterLine = NULL; |
3033 |
int needs; |
int needs; |
3813 |
} |
} |
3814 |
if (addNewKernel(config, template, bootPrefix, newKernelPath, |
if (addNewKernel(config, template, bootPrefix, newKernelPath, |
3815 |
newKernelTitle, newKernelArgs, newKernelInitrd, |
newKernelTitle, newKernelArgs, newKernelInitrd, |
3816 |
extraInitrds, extraInitrdCount, |
(const char **)extraInitrds, extraInitrdCount, |
3817 |
newMBKernel, newMBKernelArgs)) return 1; |
newMBKernel, newMBKernelArgs)) return 1; |
3818 |
|
|
3819 |
|
|