[syslinux:master] extlinux: fix ADV handling, so extlinux.sys -> ldlinux.sys actually works
syslinux-bot for H. Peter Anvin
hpa at linux.intel.com
Thu Jun 24 13:12:38 PDT 2010
Commit-ID: 06b5bd5a470cf4aad212aa81a26c8a5e03a48b2c
Gitweb: http://syslinux.zytor.com/commit/06b5bd5a470cf4aad212aa81a26c8a5e03a48b2c
Author: H. Peter Anvin <hpa at linux.intel.com>
AuthorDate: Thu, 24 Jun 2010 13:08:46 -0700
Committer: H. Peter Anvin <hpa at linux.intel.com>
CommitDate: Thu, 24 Jun 2010 13:08:46 -0700
extlinux: fix ADV handling, so extlinux.sys -> ldlinux.sys actually works
Do the appropriate thing for various error cases, so that the
migration code actually does the right thing.
Signed-off-by: H. Peter Anvin <hpa at linux.intel.com>
---
extlinux/main.c | 25 ++++++++++++++++---------
1 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/extlinux/main.c b/extlinux/main.c
index a771643..1ecb39c 100644
--- a/extlinux/main.c
+++ b/extlinux/main.c
@@ -711,13 +711,21 @@ static int btrfs_read_adv(int devfd)
return syslinux_validate_adv(syslinux_adv) ? 1 : 0;
}
-static int ext_read_adv(const char *path, const char *cfg, int devfd)
+static int ext_read_adv(const char *path, int devfd, const char **namep)
{
+ int err;
+ const char *name;
+
if (fs_type == BTRFS) {
/* btrfs "ldlinux.sys" is in 64k blank area */
return btrfs_read_adv(devfd);
- } else {
- return read_adv(path, cfg);
+ } else {
+ err = read_adv(path, name = "ldlinux.sys");
+ if (err == 2) /* ldlinux.sys does not exist */
+ err = read_adv(path, name = "extlinux.sys");
+ if (namep)
+ *namep = name;
+ return err;
}
}
@@ -752,11 +760,11 @@ int install_loader(const char *path, int update_only)
}
/* Read a pre-existing ADV, if already installed */
- if (opt.reset_adv ||
- !already_installed(devfd) ||
- (ext_read_adv(path, "ldlinux.sys", devfd) < 0 &&
- ext_read_adv(path, "extlinux.sys", devfd) < 0)) {
+ if (opt.reset_adv) {
syslinux_reset_adv(syslinux_adv);
+ } else if (ext_read_adv(path, devfd, NULL) < 0) {
+ close(devfd);
+ return 1;
}
if (modify_adv() < 0) {
@@ -798,8 +806,7 @@ int modify_existing_adv(const char *path)
if (opt.reset_adv)
syslinux_reset_adv(syslinux_adv);
- else if (ext_read_adv(path, filename = "ldlinux.sys", devfd) < 0 &&
- ext_read_adv(path, filename = "extlinux.sys", devfd) < 0) {
+ else if (ext_read_adv(path, devfd, &filename) < 0) {
close(devfd);
return 1;
}
More information about the Syslinux-commits
mailing list